mirror of
https://github.com/linux-do/new-api.git
synced 2025-11-18 03:23:42 +08:00
37 lines
1023 B
JavaScript
37 lines
1023 B
JavaScript
import { createContext, useCallback, useContext, useState } from 'react';
|
|
|
|
const ThemeContext = createContext(null);
|
|
export const useTheme = () => useContext(ThemeContext);
|
|
|
|
const SetThemeContext = createContext(null);
|
|
export const useSetTheme = () => useContext(SetThemeContext);
|
|
|
|
export const ThemeProvider = ({ children }) => {
|
|
const [theme, _setTheme] = useState(() => {
|
|
try {
|
|
return localStorage.getItem('theme-mode') || null;
|
|
} catch {
|
|
return null;
|
|
}
|
|
});
|
|
|
|
const setTheme = useCallback((input) => {
|
|
_setTheme(input ? 'dark' : 'light');
|
|
|
|
const body = document.body;
|
|
if (!input) {
|
|
body.removeAttribute('theme-mode');
|
|
localStorage.setItem('theme-mode', 'light');
|
|
} else {
|
|
body.setAttribute('theme-mode', 'dark');
|
|
localStorage.setItem('theme-mode', 'dark');
|
|
}
|
|
}, []);
|
|
|
|
return (
|
|
<SetThemeContext.Provider value={setTheme}>
|
|
<ThemeContext.Provider value={theme}>{children}</ThemeContext.Provider>
|
|
</SetThemeContext.Provider>
|
|
);
|
|
};
|