added global state context provider

This commit is contained in:
immkg 2024-08-18 18:49:55 +05:30
parent 8c23ede683
commit e65bc67dbc
2 changed files with 42 additions and 3 deletions

View File

@ -0,0 +1,36 @@
// GlobalStateContext.tsx
import React, { createContext, useState, ReactNode, useContext } from "react";
interface GlobalStateContextType {
lastSelectedCamera: string;
setLastSelectedCamera: (camera: string) => void;
}
const GlobalStateContext = createContext<GlobalStateContextType | undefined>(
undefined,
);
const GlobalStateProvider: React.FC<{ children: ReactNode }> = ({
children,
}) => {
const [lastSelectedCamera, setLastSelectedCamera] = useState<string>("");
return (
<GlobalStateContext.Provider
value={{ lastSelectedCamera, setLastSelectedCamera }}
>
{children}
</GlobalStateContext.Provider>
);
};
const useGlobalState = (): GlobalStateContextType => {
const context = useContext(GlobalStateContext);
if (context === undefined) {
throw new Error("useGlobalState must be used within a GlobalStateProvider");
}
return context;
};
// eslint-disable-next-line react-refresh/only-export-components
export { GlobalStateProvider, useGlobalState };

View File

@ -5,19 +5,22 @@ import { ApiProvider } from "@/api";
import { IconContext } from "react-icons"; import { IconContext } from "react-icons";
import { TooltipProvider } from "@/components/ui/tooltip"; import { TooltipProvider } from "@/components/ui/tooltip";
import { StatusBarMessagesProvider } from "@/context/statusbar-provider"; import { StatusBarMessagesProvider } from "@/context/statusbar-provider";
import { GlobalStateProvider } from "@/context/global-state-provider";
type TProvidersProps = { type TProvidersProps = {
children: ReactNode; children: ReactNode;
}; };
function providers({ children }: TProvidersProps) { function Providers({ children }: TProvidersProps) {
return ( return (
<RecoilRoot> <RecoilRoot>
<ApiProvider> <ApiProvider>
<ThemeProvider defaultTheme="system" storageKey="frigate-ui-theme"> <ThemeProvider defaultTheme="system" storageKey="frigate-ui-theme">
<TooltipProvider> <TooltipProvider>
<IconContext.Provider value={{ size: "20" }}> <IconContext.Provider value={{ size: "20" }}>
<StatusBarMessagesProvider>{children}</StatusBarMessagesProvider> <StatusBarMessagesProvider>
<GlobalStateProvider>{children}</GlobalStateProvider>
</StatusBarMessagesProvider>
</IconContext.Provider> </IconContext.Provider>
</TooltipProvider> </TooltipProvider>
</ThemeProvider> </ThemeProvider>
@ -26,4 +29,4 @@ function providers({ children }: TProvidersProps) {
); );
} }
export default providers; export default Providers;