import { useMemo, useState } from "react"; import { Event } from "@/types/event"; import { baseUrl } from "@/api/baseUrl"; import { ReviewSegment, REVIEW_PADDING } from "@/types/review"; import useSWR from "swr"; import { useNavigate } from "react-router-dom"; import { useTranslation } from "react-i18next"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, DropdownMenuPortal, } from "@/components/ui/dropdown-menu"; import { HiDotsHorizontal } from "react-icons/hi"; import { SearchResult } from "@/types/search"; import { FrigateConfig } from "@/types/frigateConfig"; type Props = { search: SearchResult | Event; config?: FrigateConfig; setSearch?: (s: SearchResult | undefined) => void; setSimilarity?: () => void; faceNames?: string[]; onTrainFace?: (name: string) => void; hasFace?: boolean; }; export default function DetailActionsMenu({ search, config, setSearch, setSimilarity, }: Props) { const { t } = useTranslation(["views/explore", "views/faceLibrary"]); const navigate = useNavigate(); const [isOpen, setIsOpen] = useState(false); const clipTimeRange = useMemo(() => { const startTime = (search.start_time ?? 0) - REVIEW_PADDING; const endTime = (search.end_time ?? Date.now() / 1000) + REVIEW_PADDING; return `start/${startTime}/end/${endTime}`; }, [search]); const { data: reviewItem } = useSWR([ `review/event/${search.id}`, ]); return (
{t("itemMenu.downloadSnapshot.label")}
{t("itemMenu.downloadVideo.label")}
{config?.semantic_search.enabled && setSimilarity != undefined && search.data?.type == "object" && ( { setIsOpen(false); setTimeout(() => { setSearch?.(undefined); setSimilarity?.(); }, 0); }} >
{t("itemMenu.findSimilar.label")}
)} {reviewItem && reviewItem.id && ( { setIsOpen(false); setTimeout(() => { navigate(`/review?id=${reviewItem.id}`); }, 0); }} >
{t("itemMenu.viewInHistory.label")}
)} {config?.semantic_search.enabled && search.data.type == "object" && ( { setIsOpen(false); setTimeout(() => { navigate( `/settings?page=triggers&camera=${search.camera}&event_id=${search.id}`, ); }, 0); }} >
{t("itemMenu.addTrigger.label")}
)}
); }