blob: 4326fe91353614066631c3d434d9d688c9376cfb (
plain)
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 {
Context,
createContext,
ReactNode,
useEffect,
useMemo,
useState,
} from "react";
import { ThemeConfig } from "bootstrap-darkmode";
interface DarkModeApi {
darkMode: boolean;
toggle: () => void;
}
export const DarkModeContext = createContext<Partial<DarkModeApi>>(
{}
) as Context<DarkModeApi>;
interface DarkModeProviderProps {
children: ReactNode;
}
export default function DarkModeProvider({ children }: DarkModeProviderProps) {
const themeConfig = useMemo(() => new ThemeConfig(), []);
const [darkMode, setDarkMode] = useState(
() => themeConfig.getTheme() === "dark"
);
useEffect(() => {
themeConfig.setTheme(darkMode ? "dark" : "light");
}, [darkMode]);
return (
<DarkModeContext.Provider
value={{
darkMode,
toggle: () => setDarkMode((dm) => !dm),
}}
>
{children}
</DarkModeContext.Provider>
);
}
|