import { useCallback, useState } from "react"; import TimeAgo from "../dynamic/TimeAgo"; import useSWR from "swr"; import { FrigateConfig } from "@/types/frigateConfig"; import { useFormattedTimestamp } from "@/hooks/use-date-utils"; import { Tooltip, TooltipContent, TooltipTrigger } from "../ui/tooltip"; import ActivityIndicator from "../indicators/activity-indicator"; import { SearchResult } from "@/types/search"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from "../ui/alert-dialog"; import { LuCamera, LuDownload, LuMoreVertical, LuTrash2 } from "react-icons/lu"; import FrigatePlusIcon from "@/components/icons/FrigatePlusIcon"; import { FrigatePlusDialog } from "../overlay/dialog/FrigatePlusDialog"; import { Event } from "@/types/event"; import { FaArrowsRotate } from "react-icons/fa6"; import { baseUrl } from "@/api/baseUrl"; import axios from "axios"; import { toast } from "sonner"; import { MdImageSearch } from "react-icons/md"; type SearchThumbnailProps = { searchResult: SearchResult; findSimilar: () => void; refreshResults: () => void; showObjectLifecycle: () => void; }; export default function SearchThumbnailFooter({ searchResult, findSimilar, refreshResults, showObjectLifecycle, }: SearchThumbnailProps) { const { data: config } = useSWR("config"); // interactions const [showFrigatePlus, setShowFrigatePlus] = useState(false); const [deleteDialogOpen, setDeleteDialogOpen] = useState(false); const handleDelete = useCallback(() => { axios .delete(`events/${searchResult.id}`) .then((resp) => { if (resp.status == 200) { toast.success("Tracked object deleted successfully.", { position: "top-center", }); refreshResults(); } }) .catch(() => { toast.error("Failed to delete tracked object.", { position: "top-center", }); }); }, [searchResult, refreshResults]); // date const formattedDate = useFormattedTimestamp( searchResult.start_time, config?.ui.time_format == "24hour" ? "%b %-d, %H:%M" : "%b %-d, %I:%M %p", config?.ui.timezone, ); return ( <> setDeleteDialogOpen(!deleteDialogOpen)} > Confirm Delete Are you sure you want to delete this tracked object? Cancel Delete setShowFrigatePlus(false)} onEventUploaded={() => {}} />
{searchResult.end_time ? ( ) : (
)} {formattedDate}
{config?.plus?.enabled && searchResult.has_snapshot && searchResult.end_time && ( setShowFrigatePlus(true)} /> Submit to Frigate+ )} {config?.semantic_search?.enabled && ( Find similar )} Tracked Object Actions {searchResult.has_clip && ( Download video )} {searchResult.has_snapshot && ( Download snapshot )} View object lifecycle setDeleteDialogOpen(true)} > Delete
); }