import { Stage, Layer, Image, Rect, Text } from "react-konva"; import type { SightingType } from "../../../../utils/types"; import { useCreateVideoSnapshot } from "../../hooks/useCreateVideoSnapshot"; import { useEffect, useState } from "react"; import { useCameraSettingsContext } from "../../../../app/context/CameraSettingsContext"; type VideoFeedProps = { mostRecentSighting: SightingType; isLoading: boolean; size: { width: number; height: number }; modeSetting?: number; isModal?: boolean; }; const VideoFeed = ({ mostRecentSighting, isLoading, size, modeSetting, isModal = false }: VideoFeedProps) => { const { state: cameraSettings, dispatch } = useCameraSettingsContext(); const contextMode = cameraSettings.mode; const [localMode, setLocalMode] = useState(0); const mode = isModal ? localMode : contextMode; const { image, plateRect, plateTrack } = useCreateVideoSnapshot(mostRecentSighting); const handleModeChange = (newMode: number) => { if (modeSetting) return; const nextMode = newMode > 2 ? 0 : newMode; if (isModal) { setLocalMode(nextMode); } else { dispatch({ type: "SET_MODE", payload: nextMode }); } }; useEffect(() => { const updateSize = () => { const width = window.innerWidth * 0.57; const height = (width * 2) / 3; dispatch({ type: "SET_IMAGE_SIZE", payload: { width, height } }); }; updateSize(); window.addEventListener("resize", updateSize); return () => window.removeEventListener("resize", updateSize); }, []); if (isLoading) return <>Loading...; return (
handleModeChange(mode + 1)}> {image && ( { const container = e.target.getStage()?.container(); if (container) container.style.cursor = "pointer"; }} onMouseLeave={(e) => { const container = e.target.getStage()?.container(); if (container) container.style.cursor = "default"; }} cornerRadius={10} /> )} {plateRect && mode === 1 && ( )} {plateTrack && mode === 2 && ( {plateTrack.map((rect, index) => ( ))} )}
); }; export default VideoFeed;