import TimeAgo from "@/components/dynamic/TimeAgo"; import PreviewThumbnailPlayer from "@/components/player/PreviewThumbnailPlayer"; import ActivityIndicator from "@/components/ui/activity-indicator"; import { Button } from "@/components/ui/button"; import { ToggleGroup, ToggleGroupItem } from "@/components/ui/toggle-group"; import { FrigateConfig } from "@/types/frigateConfig"; import { ReviewSegment, ReviewSeverity } from "@/types/review"; import { formatUnixTimestampToDateTime } from "@/utils/dateUtil"; import { useMemo, useState } from "react"; import { LuCalendar, LuFilter, LuVideo } from "react-icons/lu"; import { MdCircle } from "react-icons/md"; import useSWR from "swr"; export default function Events() { const { data: config } = useSWR("config"); const [severity, setSeverity] = useState("alert"); const { data: reviewSegments } = useSWR([ "review", { limit: 500 }, ]); const previewTimes = useMemo(() => { if (!reviewSegments) { return undefined; } const startDate = new Date(); startDate.setMinutes(0, 0, 0); const endDate = new Date(reviewSegments.at(-1)!!.end_time); endDate.setHours(0, 0, 0, 0); return { start: startDate.getTime() / 1000, end: endDate.getTime() / 1000, }; }, [reviewSegments]); const { data: allPreviews } = useSWR( previewTimes ? `preview/all/start/${previewTimes.start}/end/${previewTimes.end}` : null, { revalidateOnFocus: false } ); if (!config) { return ; } return ( <>
setSeverity(value)} > Alerts Detections Motion
{reviewSegments?.map((value) => { if (value.severity == severity) { const detectConfig = config.cameras[value.camera].detect; const relevantPreview = Object.values(allPreviews || []).find( (preview) => preview.camera == value.camera && preview.start < value.start_time && preview.end > value.end_time ); return (
{relevantPreview ? ( ) : (
{value.camera} {value.data.objects}
)}
{formatUnixTimestampToDateTime(value.start_time, { strftime_fmt: config.ui.time_format == "24hour" ? "%b %-d, %H:%M" : "%b %-d, %I:%M %p", })}
); } })}
); }