Add CameraSettings context and provider; integrate into AppProviders and VideoFeed

This commit is contained in:
2025-12-22 16:10:34 +00:00
parent 6879e30b9c
commit 70083d9c60
10 changed files with 118 additions and 13 deletions

View File

@@ -0,0 +1,16 @@
import { createContext, useContext } from "react";
import type { CameraSettings, CameraSettingsAction } from "../../utils/types";
type CameraSettingsContextType = {
state: CameraSettings;
dispatch: (state: CameraSettingsAction) => void;
};
export const CameraSettingsContext = createContext<CameraSettingsContextType | null>(null);
export const useCameraSettingsContext = () => {
const context = useContext(CameraSettingsContext);
if (!context) {
throw new Error("useCameraSettingsContext must be used within a CameraSettingsProvider");
}
return context;
};

View File

@@ -1,8 +1,13 @@
import { type PropsWithChildren } from "react";
import { QueryProvider } from "./QueryProvider";
import CameraSettingsProvider from "./CameraSettingsProvider";
const AppProviders = ({ children }: PropsWithChildren) => {
return <QueryProvider>{children}</QueryProvider>;
return (
<QueryProvider>
<CameraSettingsProvider>{children}</CameraSettingsProvider>
</QueryProvider>
);
};
export default AppProviders;

View File

@@ -0,0 +1,11 @@
import { CameraSettingsContext } from "../context/CameraSettingsContext";
import { useReducer, type ReactNode } from "react";
import { initialState, cameraSettingsReducer } from "../reducers/cameraSettingsReducer";
const CameraSettingsProvider = ({ children }: { children: ReactNode }) => {
const [state, dispatch] = useReducer(cameraSettingsReducer, initialState);
return <CameraSettingsContext.Provider value={{ state, dispatch }}>{children}</CameraSettingsContext.Provider>;
};
export default CameraSettingsProvider;

View File

@@ -0,0 +1,17 @@
import type { CameraSettings, CameraSettingsAction } from "../../utils/types";
export const initialState: CameraSettings = {
mode: 0,
};
export const cameraSettingsReducer = (state: CameraSettings, action: CameraSettingsAction) => {
switch (action.type) {
case "SET_MODE":
return {
...state,
mode: action.payload,
};
default:
return state;
}
};