Skip to content

Commit

Permalink
Add similarity search
Browse files Browse the repository at this point in the history
  • Loading branch information
hawkeye217 committed Oct 15, 2024
1 parent 778fd7b commit 5684e41
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 23 deletions.
14 changes: 1 addition & 13 deletions web/src/components/card/SearchThumbnail.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { useCallback, useMemo, useState } from "react";
import { useCallback, useMemo } from "react";
import { useApiHost } from "@/api";
import { getIconForLabel } from "@/utils/iconUtil";
import useSWR from "swr";
Expand All @@ -12,8 +12,6 @@ import { capitalizeFirstLetter } from "@/utils/stringUtil";
import { SearchResult } from "@/types/search";
import { cn } from "@/lib/utils";
import { TooltipPortal } from "@radix-ui/react-tooltip";
import { FrigatePlusDialog } from "../overlay/dialog/FrigatePlusDialog";
import { Event } from "@/types/event";

type SearchThumbnailProps = {
searchResult: SearchResult;
Expand All @@ -30,8 +28,6 @@ export default function SearchThumbnail({

// interactions

const [showFrigatePlus, setShowFrigatePlus] = useState(false);

const handleOnClick = useCallback(() => {
onClick(searchResult);
}, [searchResult, onClick]);
Expand All @@ -58,14 +54,6 @@ export default function SearchThumbnail({

return (
<div className="relative size-full cursor-pointer" onClick={handleOnClick}>
<FrigatePlusDialog
upload={
showFrigatePlus ? (searchResult as unknown as Event) : undefined
}
onClose={() => setShowFrigatePlus(false)}
onEventUploaded={() => {}}
/>

<ImageLoadingIndicator
className="absolute inset-0"
imgLoaded={imgLoaded}
Expand Down
25 changes: 16 additions & 9 deletions web/src/components/card/SearchThumbnailFooter.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import {
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
import {
LuActivity,
LuCamera,
LuDownload,
LuMoreVertical,
Expand All @@ -23,13 +22,16 @@ import {
import FrigatePlusIcon from "@/components/icons/FrigatePlusIcon";
import { FrigatePlusDialog } from "../overlay/dialog/FrigatePlusDialog";
import { Event } from "@/types/event";
import { FaArrowsRotate } from "react-icons/fa6";

type SearchThumbnailProps = {
searchResult: SearchResult;
findSimilar: () => void;
};

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

Expand Down Expand Up @@ -70,7 +72,7 @@ export default function SearchThumbnailFooter({
searchResult.has_snapshot &&
searchResult.end_time && (
<Tooltip>
<TooltipTrigger asChild>
<TooltipTrigger>
<FrigatePlusIcon
className="size-5 cursor-pointer text-white"
onClick={() => setShowFrigatePlus(true)}
Expand All @@ -80,12 +82,17 @@ export default function SearchThumbnailFooter({
</Tooltip>
)}

<Tooltip>
<TooltipTrigger asChild>
<LuSearch className="size-5 cursor-pointer text-white" />
</TooltipTrigger>
<TooltipContent>Find similar</TooltipContent>
</Tooltip>
{config?.semantic_search?.enabled && (
<Tooltip>
<TooltipTrigger>
<LuSearch
className="size-5 cursor-pointer text-white"
onClick={findSimilar}
/>
</TooltipTrigger>
<TooltipContent>Find similar</TooltipContent>
</Tooltip>
)}

<DropdownMenu>
<DropdownMenuTrigger>
Expand All @@ -101,7 +108,7 @@ export default function SearchThumbnailFooter({
<span>Download snapshot</span>
</DropdownMenuItem>
<DropdownMenuItem>
<LuActivity className="mr-2 size-4" />
<FaArrowsRotate className="mr-2 size-4" />
<span>View object lifecycle</span>
</DropdownMenuItem>
<DropdownMenuItem>
Expand Down
9 changes: 8 additions & 1 deletion web/src/views/search/SearchView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -428,7 +428,14 @@ export default function SearchView({
className={`review-item-ring pointer-events-none absolute inset-0 z-10 size-full rounded-lg outline outline-[3px] -outline-offset-[2.8px] ${selected ? `shadow-selected outline-selected` : "outline-transparent duration-500"}`}
/>
<div className="flex w-full items-center justify-between rounded-b-lg border border-t-0 bg-card p-3 text-card-foreground">
<SearchThumbnailFooter searchResult={value} />
<SearchThumbnailFooter
searchResult={value}
findSimilar={() => {
if (config?.semantic_search.enabled) {
setSimilaritySearch(value);
}
}}
/>
</div>
</div>
);
Expand Down

0 comments on commit 5684e41

Please sign in to comment.