import { isDesktop, isIOS } from "react-device-detect"; import { Sheet, SheetContent } from "../../ui/sheet"; import { Drawer, DrawerContent } from "../../ui/drawer"; import useSWR from "swr"; import { FrigateConfig } from "@/types/frigateConfig"; import { useFormattedTimestamp } from "@/hooks/use-date-utils"; import { getIconForLabel } from "@/utils/iconUtil"; import { useApiHost } from "@/api"; import { ReviewSegment } from "@/types/review"; type ReviewDetailDialogProps = { review?: ReviewSegment; setReview: (review: ReviewSegment | undefined) => void; }; export default function ReviewDetailDialog({ review, setReview, }: ReviewDetailDialogProps) { const { data: config } = useSWR("config", { revalidateOnFocus: false, }); const apiHost = useApiHost(); // data const formattedDate = useFormattedTimestamp( review?.start_time ?? 0, config?.ui.time_format == "24hour" ? "%b %-d %Y, %H:%M" : "%b %-d %Y, %I:%M %p", ); // content const Overlay = isDesktop ? Sheet : Drawer; const Content = isDesktop ? SheetContent : DrawerContent; return ( { if (!open) { setReview(undefined); } }} > {review && (
Labels
{[ ...new Set([ ...(review.data.objects || []), ...(review.data.sub_labels || []), ...(review.data.audio || []), ]), ] .filter( (item) => item !== undefined && !item.includes("-verified"), ) .sort() .map((obj) => { return (
{getIconForLabel(obj, "size-3 text-white")} {obj}
); })}
Camera
{review.camera.replaceAll("_", " ")}
Timestamp
{formattedDate}
{review.data.detections.map((eventId) => { return ( ); })}
)}
); }