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:
parent
564de5e5cc
commit
ed9694c246
1 changed files with 19 additions and 15 deletions
|
@ -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>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue