import type { CameraFeedAction, CameraFeedState, PaintedCell } from "../../types/types"; export const initialState: CameraFeedState = { cameraFeedID: "A", paintedCells: { A: new Map(), B: new Map(), C: new Map(), }, regionsByCamera: { A: [ { name: "Bay 1", brushColour: "#ff0000" }, { name: "Bay 2", brushColour: "#00ff00" }, { name: "Bay 3", brushColour: "#0400ff" }, { name: "Bay 4", brushColour: "#ffff00" }, { name: "Bay 5", brushColour: "#fc35db" }, ], B: [ { name: "Bay 1", brushColour: "#ff0000" }, { name: "Bay 2", brushColour: "#00ff00" }, { name: "Bay 3", brushColour: "#0400ff" }, { name: "Bay 4", brushColour: "#ffff00" }, { name: "Bay 5", brushColour: "#fc35db" }, ], C: [ { name: "Bay 1", brushColour: "#ff0000" }, { name: "Bay 2", brushColour: "#00ff00" }, { name: "Bay 3", brushColour: "#0400ff" }, { name: "Bay 4", brushColour: "#ffff00" }, { name: "Bay 5", brushColour: "#fc35db" }, ], }, selectedRegionIndex: 0, modeByCamera: { A: "painter", B: "painter", C: "painter", }, zoomLevel: { A: 1, B: 1, C: 1, }, }; export function reducer(state: CameraFeedState, action: CameraFeedAction) { switch (action.type) { case "SET_CAMERA_FEED": return { ...state, cameraFeedID: action.payload, }; case "CHANGE_MODE": return { ...state, modeByCamera: { ...state.modeByCamera, [action.payload.cameraFeedID]: action.payload.mode, }, }; case "SET_SELECTED_REGION_INDEX": return { ...state, selectedRegionIndex: action.payload, }; case "SET_SELECTED_REGION_COLOUR": return { ...state, regionsByCamera: { ...state.regionsByCamera, [action.payload.cameraFeedID]: state.regionsByCamera[action.payload.cameraFeedID].map((region) => region.name === action.payload.regionName ? { ...region, brushColour: action.payload.newColour } : region, ), }, }; case "ADD_NEW_REGION": return { ...state, regionsByCamera: { ...state.regionsByCamera, [action.payload.cameraFeedID]: [ ...state.regionsByCamera[action.payload.cameraFeedID], { name: action.payload.regionName, brushColour: action.payload.brushColour }, ], }, }; case "REMOVE_REGION": return { ...state, regionsByCamera: { ...state.regionsByCamera, [action.payload.cameraFeedID]: state.regionsByCamera[action.payload.cameraFeedID].filter( (region) => region.name !== action.payload.regionName, ), }, }; case "RESET_PAINTED_CELLS": return { ...state, paintedCells: { ...state.paintedCells, [state.cameraFeedID]: new Map(), }, }; case "SET_CAMERA_FEED_DATA": return { ...action.cameraState, }; case "RESET_CAMERA_FEED": return { ...initialState, }; case "SET_ZOOM_LEVEL": return { ...state, zoomLevel: { ...state.zoomLevel, [action.payload.cameraFeedID]: action.payload.zoomLevel, }, }; default: return state; } }