blob: 6dc1c31fc88c34330c93f401b530802181926d80 (
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,
ReactElement,
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>
)
}
|