import { baseUrl } from "@/api/baseUrl"; import TimeAgo from "../dynamic/TimeAgo"; import { Tooltip, TooltipContent, TooltipTrigger } from "../ui/tooltip"; import { useCallback, useMemo } from "react"; import { useApiHost } from "@/api"; import useSWR from "swr"; import { FrigateConfig } from "@/types/frigateConfig"; import { ReviewSegment } from "@/types/review"; import { useNavigate } from "react-router-dom"; type AnimatedEventThumbnailProps = { event: ReviewSegment; }; export function AnimatedEventThumbnail({ event }: AnimatedEventThumbnailProps) { const apiHost = useApiHost(); const { data: config } = useSWR("config"); // interaction const navigate = useNavigate(); const onOpenReview = useCallback(() => { navigate("events", { state: { review: event.id } }); }, [navigate, event]); // image behavior const imageUrl = useMemo(() => { if (Date.now() / 1000 < event.start_time + 20) { return `${apiHost}api/preview/${event.camera}/${event.start_time}/thumbnail.jpg`; } return `${baseUrl}api/review/${event.id}/preview.gif`; }, [apiHost, event]); const aspectRatio = useMemo(() => { if (!config) { return 1; } const detect = config.cameras[event.camera].detect; return detect.width / detect.height; }, [config, event]); return (
{`${[...event.data.objects, ...event.data.audio, ...(event.data.sub_labels || [])].join(", ")} detected`}
); }