diff --git a/web/src/components/camera/DebugCameraImage.tsx b/web/src/components/camera/DebugCameraImage.tsx new file mode 100644 index 000000000..e7352c17a --- /dev/null +++ b/web/src/components/camera/DebugCameraImage.tsx @@ -0,0 +1,150 @@ +import { Switch } from "../ui/switch"; +import { Label } from "../ui/label"; +import { CameraConfig } from "@/types/frigateConfig"; +import { Button } from "../ui/button"; +import { LuSettings } from "react-icons/lu"; +import { useCallback, useMemo, useState } from "react"; +import { Card, CardContent, CardHeader, CardTitle } from "../ui/card"; +import { usePersistence } from "@/hooks/use-persistence"; +import AutoUpdatingCameraImage from "./AutoUpdatingCameraImage"; + +type Options = { [key: string]: boolean }; + +const emptyObject = Object.freeze({}); + +type DebugCameraImageProps = { + className?: string; + cameraConfig: CameraConfig; +}; + +export default function DebugCameraImage({ + className, + cameraConfig, +}: DebugCameraImageProps) { + const [showSettings, setShowSettings] = useState(false); + const [options, setOptions] = usePersistence( + `${cameraConfig?.name}-feed`, + emptyObject + ); + const handleSetOption = useCallback( + (id: string, value: boolean) => { + const newOptions = { ...options, [id]: value }; + setOptions(newOptions); + }, + [options] + ); + const searchParams = useMemo( + () => + new URLSearchParams( + Object.keys(options).reduce((memo, key) => { + //@ts-ignore we know this is correct + memo.push([key, options[key] === true ? "1" : "0"]); + return memo; + }, []) + ), + [options] + ); + const handleToggleSettings = useCallback(() => { + setShowSettings(!showSettings); + }, [showSettings]); + + return ( +
+ + + {showSettings ? ( + + + Options + + + + + + ) : null} +
+ ); +} + +type DebugSettingsProps = { + handleSetOption: (id: string, value: boolean) => void; + options: Options; +}; + +function DebugSettings({ handleSetOption, options }: DebugSettingsProps) { + return ( +
+
+ { + handleSetOption("bbox", isChecked); + }} + /> + +
+
+ { + handleSetOption("timestamp", isChecked); + }} + /> + +
+
+ { + handleSetOption("zones", isChecked); + }} + /> + +
+
+ { + handleSetOption("mask", isChecked); + }} + /> + +
+
+ { + handleSetOption("motion", isChecked); + }} + /> + +
+
+ { + handleSetOption("regions", isChecked); + }} + /> + +
+
+ ); +} diff --git a/web/src/components/player/LivePlayer.tsx b/web/src/components/player/LivePlayer.tsx index 5c5f648dd..f7c1ad9d9 100644 --- a/web/src/components/player/LivePlayer.tsx +++ b/web/src/components/player/LivePlayer.tsx @@ -2,13 +2,7 @@ import WebRtcPlayer from "./WebRTCPlayer"; import { CameraConfig } from "@/types/frigateConfig"; import AutoUpdatingCameraImage from "../camera/AutoUpdatingCameraImage"; import ActivityIndicator from "../ui/activity-indicator"; -import { Button } from "../ui/button"; -import { LuSettings } from "react-icons/lu"; -import { useCallback, useEffect, useMemo, useState } from "react"; -import { Card, CardContent, CardHeader, CardTitle } from "../ui/card"; -import { Switch } from "../ui/switch"; -import { Label } from "../ui/label"; -import { usePersistence } from "@/hooks/use-persistence"; +import { useEffect, useMemo, useState } from "react"; import MSEPlayer from "./MsePlayer"; import JSMpegPlayer from "./JSMpegPlayer"; import { MdCircle, MdLeakAdd } from "react-icons/md"; @@ -19,8 +13,6 @@ import { useRecordingsState } from "@/api/ws"; import { LivePlayerMode } from "@/types/live"; import useCameraLiveMode from "@/hooks/use-camera-live-mode"; -const emptyObject = Object.freeze({}); - type LivePlayerProps = { className?: string; cameraConfig: CameraConfig; @@ -29,8 +21,6 @@ type LivePlayerProps = { windowVisible?: boolean; }; -type Options = { [key: string]: boolean }; - export default function LivePlayer({ className, cameraConfig, @@ -65,35 +55,6 @@ export default function LivePlayer({ const { payload: recording } = useRecordingsState(cameraConfig.name); - // debug view settings - - const [showSettings, setShowSettings] = useState(false); - const [options, setOptions] = usePersistence( - `${cameraConfig?.name}-feed`, - emptyObject - ); - const handleSetOption = useCallback( - (id: string, value: boolean) => { - const newOptions = { ...options, [id]: value }; - setOptions(newOptions); - }, - [options] - ); - const searchParams = useMemo( - () => - new URLSearchParams( - Object.keys(options).reduce((memo, key) => { - //@ts-ignore we know this is correct - memo.push([key, options[key] === true ? "1" : "0"]); - return memo; - }, []) - ), - [options] - ); - const handleToggleSettings = useCallback(() => { - setShowSettings(!showSettings); - }, [showSettings]); - if (!cameraConfig) { return ; } @@ -133,34 +94,6 @@ export default function LivePlayer({ height={cameraConfig.detect.height} /> ); - } else if (liveMode == "debug") { - player = ( - <> - - - {showSettings ? ( - - - Options - - - - - - ) : null} - - ); } else { player = ; } @@ -222,75 +155,3 @@ export default function LivePlayer({ ); } - -type DebugSettingsProps = { - handleSetOption: (id: string, value: boolean) => void; - options: Options; -}; - -function DebugSettings({ handleSetOption, options }: DebugSettingsProps) { - return ( -
-
- { - handleSetOption("bbox", isChecked); - }} - /> - -
-
- { - handleSetOption("timestamp", isChecked); - }} - /> - -
-
- { - handleSetOption("zones", isChecked); - }} - /> - -
-
- { - handleSetOption("mask", isChecked); - }} - /> - -
-
- { - handleSetOption("motion", isChecked); - }} - /> - -
-
- { - handleSetOption("regions", isChecked); - }} - /> - -
-
- ); -}