useTheme hook to fix hydration issues
This commit is contained in:
parent
24c7b19686
commit
5553293476
1 changed files with 22 additions and 0 deletions
22
packages/freesewing.shared/hooks/useTheme.js
Normal file
22
packages/freesewing.shared/hooks/useTheme.js
Normal file
|
@ -0,0 +1,22 @@
|
|||
import useLocalStorage from 'shared/hooks/useLocalStorage';
|
||||
import { useState, useEffect } from 'react'
|
||||
|
||||
function useTheme() {
|
||||
const [storedTheme, setStoredTheme, ready] = useLocalStorage('theme', undefined);
|
||||
|
||||
useEffect(() => {
|
||||
if (ready) {
|
||||
const prefersDarkMode = (typeof window !== 'undefined' && typeof window.matchMedia === 'function')
|
||||
? window.matchMedia(`(prefers-color-scheme: dark`).matches
|
||||
: null
|
||||
|
||||
if (storedTheme === undefined) {
|
||||
setStoredTheme(prefersDarkMode ? 'dark' : 'light')
|
||||
}
|
||||
}
|
||||
}, [ready])
|
||||
|
||||
return [storedTheme, setStoredTheme];
|
||||
}
|
||||
|
||||
export default useTheme;
|
Loading…
Add table
Add a link
Reference in a new issue