import { useEffect } from "react"; import type { CameraID } from "../../../../../app/config/cameraConfig"; import { useCameraFeedContext } from "../../../../../app/context/CameraFeedContext"; import SliderComponent from "../../../../../ui/SliderComponent"; import { useCameraZoom } from "../../../hooks/useCameraZoom"; import { useDebouncedCallback } from "use-debounce"; type CameraControlsProps = { cameraFeedID: CameraID; subTabIndex?: number; }; const CameraControls = ({ cameraFeedID, subTabIndex }: CameraControlsProps) => { const { state, dispatch } = useCameraFeedContext(); const { cameraZoomMutation, cameraZoomQuery } = useCameraZoom(cameraFeedID); const zoomLevel = state.zoomLevel ? state.zoomLevel[cameraFeedID] : 0; const currentZoomLevel = cameraZoomQuery.data ? cameraZoomQuery.data["propPhysCurrent"].value : 0; const minLevel = cameraZoomQuery.data ? cameraZoomQuery.data["propPhysMin"].value : 0; const maxLevel = cameraZoomQuery.data ? cameraZoomQuery.data["propPhysMax"].value : 0; const normalizedZoomLevel = ((currentZoomLevel - minLevel) / (maxLevel - minLevel)).toFixed(2); useEffect(() => { if (subTabIndex === 1) { dispatch({ type: "CHANGE_MODE", payload: { cameraFeedID, mode: "controller" } }); } }, [cameraFeedID, dispatch, subTabIndex]); const debouncedMutation = useDebouncedCallback(async (value) => { await cameraZoomMutation.mutateAsync({ cameraFeedID, zoomLevel: value as number, }); }, 1000); const handleChange = (value: number | number[]) => { const newZoom = value as number; dispatch({ type: "SET_ZOOM_LEVEL", payload: { cameraFeedID: cameraFeedID, zoomLevel: newZoom }, }); debouncedMutation(newZoom); }; const handleOneShotClick = () => { debouncedMutation(normalizedZoomLevel); }; return (