1
0
Fork 0
mirror of https://github.com/muerwre/vault-frontend.git synced 2025-04-24 20:36:40 +07:00

fixed theme memoization

This commit is contained in:
Fedor Katurov 2022-11-21 15:56:35 +06:00
parent 564de5e5cc
commit ed9694c246

View file

@ -1,6 +1,7 @@
import React, {
createContext,
FC,
useCallback,
useContext,
useEffect,
useMemo,
@ -23,8 +24,23 @@ const themeClass: Record<Theme, string> = {
};
const ThemeProvider: FC<ProvidersProps> = ({ children }) => {
const [theme, setTheme] = useState(Theme.Default);
const value = useMemo(() => ({ theme, setTheme }), [theme, setTheme]);
const [theme, setThemeValue] = useState(Theme.Default);
const setTheme = useCallback(
(val: Theme) => {
if (themeClass[theme]) {
document.documentElement.classList.remove(themeClass[theme]);
}
localStorage.setItem('vault__theme', val);
setThemeValue(val);
if (themeClass[val]) {
document.documentElement.classList.add(themeClass[val]);
}
},
[theme],
);
useEffect(() => {
const stored = localStorage.getItem('vault__theme');
@ -34,19 +50,7 @@ const ThemeProvider: FC<ProvidersProps> = ({ children }) => {
setTheme(stored as Theme);
}, []);
useEffect(() => {
if (!themeClass[theme]) {
return;
}
document.documentElement.classList.add(themeClass[theme]);
try {
localStorage.setItem('vault__theme', theme);
} catch {}
return () => document.documentElement.classList.remove(themeClass[theme]);
}, [theme]);
const value = useMemo(() => ({ theme, setTheme }), [theme, setTheme]);
return (
<ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>