import { useEffect, useMemo, useRef } from "react"; import useSWR from "swr"; import { Trans } from "react-i18next"; import Heading from "@/components/ui/heading"; import { Separator } from "@/components/ui/separator"; import { Switch } from "@/components/ui/switch"; import { Label } from "@/components/ui/label"; import { FrigateConfig } from "@/types/frigateConfig"; import { useAlertsState, useDetectionsState, useObjectDescriptionState, useReviewDescriptionState, } from "@/api/ws"; import type { SectionRendererProps } from "./registry"; import CameraReviewClassification from "./CameraReviewClassification"; export default function CameraReviewStatusToggles({ selectedCamera, formContext, }: SectionRendererProps) { const { data: config } = useSWR("config"); const cameraId = selectedCamera ?? ""; const cameraConfig = useMemo(() => { if (config && selectedCamera) { return config.cameras[selectedCamera]; } }, [config, selectedCamera]); const { payload: alertsState, send: sendAlerts } = useAlertsState(cameraId); const { payload: detectionsState, send: sendDetections } = useDetectionsState(cameraId); const { payload: objDescState, send: sendObjDesc } = useObjectDescriptionState(cameraId); const { payload: revDescState, send: sendRevDesc } = useReviewDescriptionState(cameraId); // Sync WS runtime state when review genai transitions from disabled to enabled in config const prevRevGenaiEnabled = useRef( cameraConfig?.review?.genai?.enabled_in_config, ); useEffect(() => { const wasEnabled = prevRevGenaiEnabled.current; const isEnabled = cameraConfig?.review?.genai?.enabled_in_config; prevRevGenaiEnabled.current = isEnabled; if (!wasEnabled && isEnabled) { sendRevDesc("ON"); } }, [cameraConfig?.review?.genai?.enabled_in_config, sendRevDesc]); if (!selectedCamera || !cameraConfig) { return null; } return (
cameraReview.title
{ sendAlerts(isChecked ? "ON" : "OFF"); }} />
{ sendDetections(isChecked ? "ON" : "OFF"); }} />
cameraReview.review.desc
{cameraConfig?.objects?.genai?.enabled_in_config && ( <> cameraReview.object_descriptions.title
{ sendObjDesc(isChecked ? "ON" : "OFF"); }} />
cameraReview.object_descriptions.desc
)} {cameraConfig?.review?.genai?.enabled_in_config && ( <> cameraReview.review_descriptions.title
{ sendRevDesc(isChecked ? "ON" : "OFF"); }} />
cameraReview.review_descriptions.desc
)}
); }