-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMyProviders.tsx
80 lines (65 loc) · 2.45 KB
/
MyProviders.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import React, {createContext, Dispatch, ReactNode, SetStateAction, useState} from "react";
import {createTheme, CssBaseline, PaletteMode, ThemeProvider} from "@mui/material";
import getDesignTokens from "../../themes/getDesignTokens";
import {HelmetProvider} from "react-helmet-async";
import {AuthProvider} from "../AuthContext/AuthContext";
import {ILanguageContextProps, IThemeContextProps, UserContextProps} from "../../types/types";
export const ColorModeContext = React.createContext({
toggleColorMode: () => {
}
});
export const ThemeContext = createContext<IThemeContextProps>({
theme: 'light',
setTheme: () => null,
});
export const LanguageContext = createContext<ILanguageContextProps>({
language: 'uk',
setLanguage: () => null,
});
export const UserContext = createContext<UserContextProps>({
currentUser: null,
setCurrentUser: () => null,
});
interface MyProvidersProps {
children: ReactNode;
}
function MyProviders({children}: MyProvidersProps) {
const [currentUser, setCurrentUser] = useState<any>(null);
// const [theme, setTheme] = useState<'light' | 'dark'>('light');
const [language, setLanguage] = useState<'uk' | 'en'>('uk');
const [mode, setMode] = React.useState<PaletteMode>('light');
const colorMode = React.useMemo(
() => ({
// The dark mode switch would invoke this method
toggleColorMode: () => {
setMode((prevMode: PaletteMode) =>
prevMode === 'light' ? 'dark' : 'light',
);
},
}),
[],
);
const theme = React.useMemo(() => createTheme(getDesignTokens(mode)), [mode]);
return (
<HelmetProvider>
<LanguageContext.Provider value={{language, setLanguage}}>
<UserContext.Provider
value={{
currentUser,
setCurrentUser
}}
>
<ColorModeContext.Provider value={colorMode}>
<ThemeProvider theme={theme}>
<AuthProvider>
<CssBaseline/>
{children}
</AuthProvider>
</ThemeProvider>
</ColorModeContext.Provider>
</UserContext.Provider>
</LanguageContext.Provider>
</HelmetProvider>
);
}
export default MyProviders