import { h, Fragment } from 'preact'; import AutoUpdatingCameraImage from '../components/AutoUpdatingCameraImage'; import JSMpegPlayer from '../components/JSMpegPlayer'; import Heading from '../components/Heading'; import Link from '../components/Link'; import Switch from '../components/Switch'; import { usePersistence } from '../context'; import { useCallback, useMemo, useState } from 'preact/hooks'; import { useApiHost, useConfig } from '../api'; import { Tabs, TextTab } from '../components/Tabs'; import Timeline from '../components/Timeline'; import { LiveChip } from '../components/LiveChip'; import { HistoryHeader } from './HistoryHeader'; import { longToDate } from '../utils/dateUtil' const emptyObject = Object.freeze({}); export default function Camera({ camera }) { const apiHost = useApiHost(); const { data: config } = useConfig(); const [hideBanner, setHideBanner] = useState(false); const [playerType, setPlayerType] = useState("live"); const cameraConfig = config?.cameras[camera]; const liveWidth = Math.round(cameraConfig.live.height * (cameraConfig.detect.width / cameraConfig.detect.height)) const [options, setOptions] = usePersistence(`${camera}-feed`, emptyObject); const [currentEvent, setCurrentEvent] = useState(undefined) const handleSetOption = useCallback( (id, value) => { const newOptions = { ...options, [id]: value }; setOptions(newOptions); }, [options, setOptions] ); const searchParams = useMemo( () => new URLSearchParams( Object.keys(options).reduce((memo, key) => { memo.push([key, options[key] === true ? '1' : '0']); return memo; }, []) ), [options] ); const optionContent = (
Mask & Zone creator
) const RenderPlayer = useCallback(() => { if (playerType === "live") { return ( ) } else if (playerType === "debug") { return (
{/* {optionContent} */}
); } else if (playerType === "history") { return currentEvent && ( ) } }, [playerType, currentEvent]); const handleVideoTouch = () => { setHideBanner(true); } const handleTabChange = (index) => { if (index === 0) { setPlayerType("history") } else if (index === 1) { setPlayerType("live") } else if (index === 2) { setPlayerType("debug"); } } const handleTimelineChange = (event) => { setCurrentEvent(event); } return (
{ (playerType === "live" || playerType === "debug") && ( {camera} ) }
{ currentEvent && }
{playerType === "history" && }
); }