Skip to content

Commit 2286122

Browse files
create ThemeProvider
1 parent 0f204f5 commit 2286122

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

beta/src/modules/ThemeProvider.tsx

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import { createContext, Dispatch, FC, SetStateAction, useEffect, useMemo, useState } from "react";
2+
3+
export enum ColorMode {
4+
light = 'light',
5+
dark = 'dark'
6+
}
7+
8+
9+
export const ThemeContext = createContext<{
10+
colorMode: ColorMode,
11+
setColorMode: Dispatch<SetStateAction<ColorMode>>
12+
}>({
13+
colorMode: ColorMode.light,
14+
setColorMode: () => { }
15+
});
16+
17+
export const ThemeProvider: FC = ({ children }) => {
18+
const [colorMode, setColorMode] = useState(ColorMode.light);
19+
const colorModeKey = "@app/colorMode";
20+
21+
useEffect(() => {
22+
const savedColorMode = localStorage.getItem(colorModeKey);
23+
if (savedColorMode) setColorMode(savedColorMode as ColorMode)
24+
}, [])
25+
26+
27+
useEffect(() => {
28+
localStorage.setItem(colorModeKey, colorMode);
29+
if (!document) return;
30+
colorMode === ColorMode.dark ?
31+
document.documentElement.classList.add(ColorMode.dark) :
32+
document.documentElement.classList.remove(ColorMode.dark)
33+
}, [colorMode])
34+
35+
36+
return (
37+
<ThemeContext.Provider
38+
value={useMemo(
39+
() => ({
40+
colorMode,
41+
setColorMode
42+
}),
43+
[colorMode]
44+
)}>
45+
{children}
46+
</ThemeContext.Provider>
47+
)
48+
}

0 commit comments

Comments
 (0)