import { baseUrl } from "@/api/baseUrl"; import LivePlayer from "@/components/player/LivePlayer"; import { ScrollArea, ScrollBar } from "@/components/ui/scroll-area"; import { Event as FrigateEvent } from "@/types/event"; import { FrigateConfig } from "@/types/frigateConfig"; import axios from "axios"; import { useCallback, useMemo } from "react"; import { LuStar } from "react-icons/lu"; import useSWR from "swr"; function Live() { const { data: config } = useSWR("config"); // recent events const now = new Date(); now.setHours(now.getHours() - 4, 0, 0, 0); const recentTimestamp = now.getTime() / 1000; const { data: events, mutate: updateEvents } = useSWR([ "events", { limit: 10, after: recentTimestamp }, ]); const onFavorite = useCallback( async (e: Event, event: FrigateEvent) => { e.stopPropagation(); let response; if (!event.retain_indefinitely) { response = await axios.post(`events/${event.id}/retain`); } else { response = await axios.delete(`events/${event.id}/retain`); } if (response.status === 200) { updateEvents(); } }, [event] ); // camera live views const cameras = useMemo(() => { if (!config) { return []; } return Object.values(config.cameras) .filter((conf) => conf.ui.dashboard && conf.enabled) .sort((aConf, bConf) => aConf.ui.order - bConf.ui.order); }, [config]); return ( <> {events && events.length > 0 && (
{events.map((event) => { return (
onFavorite(e, event)} fill={event.retain_indefinitely ? "currentColor" : "none"} /> {event.end_time ? null : (
In progress
)}
); })}
)}
{cameras.map((camera) => { return ; })}
); } export default Live;