forked from kubeflow/hub
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathThemeContext.tsx
More file actions
44 lines (36 loc) · 1.22 KB
/
ThemeContext.tsx
File metadata and controls
44 lines (36 loc) · 1.22 KB
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
import * as React from 'react';
import { createTheme } from '@mui/material';
import { ThemeProvider as MUIThemeProvider } from '@mui/material/styles';
import { isMUITheme, Theme } from '~/shared/utilities/const';
type ThemeProviderProps = {
children: React.ReactNode;
};
type ThemeContextProps = {
isMUITheme: boolean;
};
export const ThemeContext = React.createContext({
isMUITheme: false,
});
export const useThemeContext = (): ThemeContextProps => React.useContext(ThemeContext);
const ThemeProvider: React.FC<ThemeProviderProps> = ({ children }) => {
const themeValue = React.useMemo(() => ({ isMUITheme: isMUITheme() }), []);
const createMUITheme = React.useMemo(() => createTheme({ cssVariables: true }), []);
React.useEffect(() => {
// Apply the theme based on the value of STYLE_THEME
if (isMUITheme()) {
document.documentElement.classList.add(Theme.MUI);
} else {
document.documentElement.classList.remove(Theme.MUI);
}
}, []);
return (
<ThemeContext.Provider value={themeValue}>
{isMUITheme() ? (
<MUIThemeProvider theme={createMUITheme}>{children}</MUIThemeProvider>
) : (
children
)}
</ThemeContext.Provider>
);
};
export default ThemeProvider;