import { useMemo } from "react"; import ActivityIndicator from "@/components/ui/activity-indicator"; import { useAudioState, useDetectState, useRecordingsState, useSnapshotsState, } from "@/api/ws"; import useSWR from "swr"; import { CameraConfig, FrigateConfig } from "@/types/frigateConfig"; import Heading from "@/components/ui/heading"; import { Card } from "@/components/ui/card"; import CameraImage from "@/components/camera/CameraImage"; import { AspectRatio } from "@/components/ui/aspect-ratio"; import { Button } from "@/components/ui/button"; import { AiOutlinePicture } from "react-icons/ai"; import { FaWalking } from "react-icons/fa"; import { LuEar } from "react-icons/lu"; import { TbMovie } from "react-icons/tb"; import MiniEventCard from "@/components/card/MiniEventCard"; import { Event as FrigateEvent } from "@/types/event"; import { ScrollArea, ScrollBar } from "@/components/ui/scroll-area"; export function Dashboard() { const { data: config } = useSWR("config"); const now = new Date(); now.setMinutes(now.getMinutes() - 30, 0, 0); const recentTimestamp = now.getTime() / 1000; const { data: events, mutate: updateEvents } = useSWR([ "events", { limit: 10, after: recentTimestamp }, ]); const sortedCameras = useMemo(() => { if (!config) { return []; } return Object.values(config.cameras) .filter((conf) => conf.ui.dashboard) .sort((aConf, bConf) => aConf.ui.order - bConf.ui.order); }, [config]); return ( <> Dashboard {!config && } {config && (
{events && events.length > 0 && ( <> Recent Events
{events.map((event) => { return ( updateEvents()} /> ); })}
)} Cameras
{sortedCameras.map((camera) => { return ; })}
)} ); } function Camera({ camera }: { camera: CameraConfig }) { const { payload: detectValue, send: sendDetect } = useDetectState( camera.name ); const { payload: recordValue, send: sendRecord } = useRecordingsState( camera.name ); const { payload: snapshotValue, send: sendSnapshot } = useSnapshotsState( camera.name ); const { payload: audioValue, send: sendAudio } = useAudioState(camera.name); return ( <>
{camera.name.replaceAll("_", " ")}
{camera.audio.enabled_in_config && ( )}
); } export default Dashboard;