()
| 7 | import { applyTheme, resolveInitialTheme } from "./theme.utils"; |
| 8 | |
| 9 | export function useTheme(): IThemeState { |
| 10 | const [theme, setThemeState] = useState<ThemeName>(resolveInitialTheme); |
| 11 | |
| 12 | useEffect(() => { |
| 13 | applyTheme(theme); |
| 14 | }, [theme]); |
| 15 | |
| 16 | const setTheme = useCallback((next: ThemeName) => { |
| 17 | localStore.set(THEME_STORAGE_KEY, next); |
| 18 | setThemeState(next); |
| 19 | }, []); |
| 20 | |
| 21 | const toggle = useCallback(() => { |
| 22 | setThemeState((current) => { |
| 23 | const next: ThemeName = current === "dark" ? "light" : "dark"; |
| 24 | |
| 25 | localStore.set(THEME_STORAGE_KEY, next); |
| 26 | |
| 27 | return next; |
| 28 | }); |
| 29 | }, []); |
| 30 | |
| 31 | return { theme, setTheme, toggle }; |
| 32 | } |
no test coverage detected