Skip to content

Commit

Permalink
Merge branch 'fix-selected-outline' of https://github.com/blakeblacks…
Browse files Browse the repository at this point in the history
…hear/frigate into fix-selected-outline
  • Loading branch information
hawkeye217 committed Oct 15, 2024
2 parents ae679ac + 5a978e1 commit d7d2b75
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 11 deletions.
4 changes: 3 additions & 1 deletion web/src/components/card/SearchThumbnailFooter.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,14 @@ type SearchThumbnailProps = {
searchResult: SearchResult;
findSimilar: () => void;
refreshResults: () => void;
showObjectLifecycle: () => void;
};

export default function SearchThumbnailFooter({
searchResult,
findSimilar,
refreshResults,
showObjectLifecycle,
}: SearchThumbnailProps) {
const { data: config } = useSWR<FrigateConfig>("config");

Expand Down Expand Up @@ -146,7 +148,7 @@ export default function SearchThumbnailFooter({
</a>
</DropdownMenuItem>
)}
<DropdownMenuItem>
<DropdownMenuItem onClick={showObjectLifecycle}>
<FaArrowsRotate className="mr-2 size-4" />
<span>View object lifecycle</span>
</DropdownMenuItem>
Expand Down
17 changes: 12 additions & 5 deletions web/src/components/overlay/detail/SearchDetailDialog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -69,16 +69,20 @@ const SEARCH_TABS = [
"video",
"object lifecycle",
] as const;
type SearchTab = (typeof SEARCH_TABS)[number];
export type SearchTab = (typeof SEARCH_TABS)[number];

type SearchDetailDialogProps = {
search?: SearchResult;
page: SearchTab;
setSearch: (search: SearchResult | undefined) => void;
setSearchPage: (page: SearchTab) => void;
setSimilarity?: () => void;
};
export default function SearchDetailDialog({
search,
page,
setSearch,
setSearchPage,
setSimilarity,
}: SearchDetailDialogProps) {
const { data: config } = useSWR<FrigateConfig>("config", {
Expand All @@ -87,8 +91,11 @@ export default function SearchDetailDialog({

// tabs

const [page, setPage] = useState<SearchTab>("details");
const [pageToggle, setPageToggle] = useOptimisticState(page, setPage, 100);
const [pageToggle, setPageToggle] = useOptimisticState(
page,
setSearchPage,
100,
);

// dialog and mobile page

Expand Down Expand Up @@ -130,9 +137,9 @@ export default function SearchDetailDialog({
}

if (!searchTabs.includes(pageToggle)) {
setPage("details");
setSearchPage("details");
}
}, [pageToggle, searchTabs]);
}, [pageToggle, searchTabs, setSearchPage]);

if (!search) {
return;
Expand Down
22 changes: 17 additions & 5 deletions web/src/views/search/SearchView.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import SearchThumbnail from "@/components/card/SearchThumbnail";
import SearchFilterGroup from "@/components/filter/SearchFilterGroup";
import ActivityIndicator from "@/components/indicators/activity-indicator";
import SearchDetailDialog from "@/components/overlay/detail/SearchDetailDialog";
import SearchDetailDialog, {
SearchTab,
} from "@/components/overlay/detail/SearchDetailDialog";
import { Toaster } from "@/components/ui/sonner";
import {
Tooltip,
Expand Down Expand Up @@ -160,16 +162,21 @@ export default function SearchView({
// detail

const [searchDetail, setSearchDetail] = useState<SearchResult>();
const [page, setPage] = useState<SearchTab>("details");

// search interaction

const [selectedIndex, setSelectedIndex] = useState<number | null>(null);
const itemRefs = useRef<(HTMLDivElement | null)[]>([]);

const onSelectSearch = useCallback((item: SearchResult, index: number) => {
setSearchDetail(item);
setSelectedIndex(index);
}, []);
const onSelectSearch = useCallback(
(item: SearchResult, index: number, page: SearchTab = "details") => {
setPage(page);
setSearchDetail(item);
setSelectedIndex(index);
},
[],
);

useEffect(() => {
setSelectedIndex(0);
Expand Down Expand Up @@ -298,7 +305,9 @@ export default function SearchView({
<Toaster closeButton={true} />
<SearchDetailDialog
search={searchDetail}
page={page}
setSearch={setSearchDetail}
setSearchPage={setPage}
setSimilarity={
searchDetail && (() => setSimilaritySearch(searchDetail))
}
Expand Down Expand Up @@ -396,6 +405,9 @@ export default function SearchView({
}
}}
refreshResults={refresh}
showObjectLifecycle={() =>
onSelectSearch(value, index, "object lifecycle")
}
/>
</div>
</div>
Expand Down

0 comments on commit d7d2b75

Please sign in to comment.