blob: fd536b29dbc32cb0b4b5feb352175dfada27b188 (
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
|
import * as React from "react";
import {
Context,
createContext,
PropsWithChildren,
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>;
export default function DarkModeProvider({ children }: PropsWithChildren<any>) {
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>
);
}
|