- implement camera zoom controls and state management

This commit is contained in:
2025-12-09 08:47:21 +00:00
parent fa33b012cc
commit b93b446614
9 changed files with 222 additions and 6 deletions

View File

@@ -3,9 +3,14 @@ import { CameraFeedContext } from "../context/CameraFeedContext";
import { initialState, reducer } from "../reducers/cameraFeedReducer";
import { useBlackBoard } from "../../hooks/useBlackBoard";
import type { CameraFeedState } from "../../types/types";
import { useCameraZoom } from "../../features/cameras/hooks/useCameraZoom";
export const CameraFeedProvider = ({ children }: { children: ReactNode }) => {
const { blackboardMutation } = useBlackBoard();
const { cameraZoomQuery: cameraZoomQueryA } = useCameraZoom("A");
const { cameraZoomQuery: cameraZoomQueryB } = useCameraZoom("B");
const { cameraZoomQuery: cameraZoomQueryC } = useCameraZoom("C");
const [state, dispatch] = useReducer(reducer, initialState);
useEffect(() => {
@@ -29,5 +34,42 @@ export const CameraFeedProvider = ({ children }: { children: ReactNode }) => {
fetchBlackBoardData();
}, []);
useEffect(() => {
const fetchZoomLevels = async () => {
const [resultA, resultB, resultC] = await Promise.all([
cameraZoomQueryA.refetch(),
cameraZoomQueryB.refetch(),
cameraZoomQueryC.refetch(),
]);
console.log(resultA?.data);
const zoomLevelAnumber = parseFloat(resultA.data?.propPhysCurrent?.value);
const zoomLevelBnumber = parseFloat(resultB.data?.propPhysCurrent?.value);
const zoomLevelCnumber = parseFloat(resultC.data?.propPhysCurrent?.value);
if (resultA.data) {
dispatch({
type: "SET_ZOOM_LEVEL",
payload: { cameraFeedID: "A", zoomLevel: zoomLevelAnumber },
});
}
if (resultB.data) {
dispatch({
type: "SET_ZOOM_LEVEL",
payload: { cameraFeedID: "B", zoomLevel: zoomLevelBnumber },
});
}
if (resultC.data) {
dispatch({
type: "SET_ZOOM_LEVEL",
payload: { cameraFeedID: "C", zoomLevel: zoomLevelCnumber },
});
}
};
fetchZoomLevels();
}, []);
return <CameraFeedContext.Provider value={{ state, dispatch }}>{children}</CameraFeedContext.Provider>;
};

View File

@@ -37,6 +37,11 @@ export const initialState: CameraFeedState = {
B: "painter",
C: "painter",
},
zoomLevel: {
A: 1,
B: 1,
C: 1,
},
};
export function reducer(state: CameraFeedState, action: CameraFeedAction) {
@@ -106,7 +111,14 @@ export function reducer(state: CameraFeedState, action: CameraFeedAction) {
return {
...initialState,
};
case "SET_ZOOM_LEVEL":
return {
...state,
zoomLevel: {
...state.zoomLevel,
[action.payload.cameraFeedID]: action.payload.zoomLevel,
},
};
default:
return state;
}