Skip to content

Commit f89d821

Browse files
committed
🌑 Better Dark Mode
1 parent 30114f2 commit f89d821

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

Diff for: src/Provider/index.js

+11-9
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,25 @@
1-
import React, { useLayoutEffect, useState } from 'react'
1+
import React, { useEffect, useState } from 'react'
22
import {
33
ActionButton,
44
defaultTheme,
55
Provider as RSProvider
66
} from '@adobe/react-spectrum'
77
import Light from '@spectrum-icons/workflow/Light'
88
import Moon from '@spectrum-icons/workflow/Moon'
9-
import useIsMounted from 'react-is-mounted-hook'
109

1110
function useCurrentColorScheme() {
1211
const [colorScheme, setColorScheme] = useState(undefined)
13-
const isMounted = useIsMounted()
14-
useLayoutEffect(() => {
15-
setColorScheme(localStorage.theme || 'light')
16-
}, [isMounted])
1712

18-
useLayoutEffect(() => {
13+
useEffect(() => {
14+
const root = window.document.documentElement
15+
const initialColorValue = root.style.getPropertyValue('--initial-theme')
16+
setColorScheme(initialColorValue)
17+
1918
const mq = window.matchMedia('(prefers-color-scheme: dark)')
2019
const onChange = () => {
21-
setColorScheme(localStorage.theme || (mq.matches ? 'dark' : 'light'))
20+
setColorScheme(
21+
localStorage.getItem('theme') || (mq.matches ? 'dark' : 'light')
22+
)
2223
}
2324

2425
mq.addListener(onChange)
@@ -59,7 +60,8 @@ export const Provider = ({
5960
export const ThemeSwitcher = () => {
6061
const colorScheme = useCurrentColorScheme()
6162
const onPress = () => {
62-
localStorage.theme = colorScheme === 'dark' ? 'light' : 'dark'
63+
const scheme = colorScheme === 'dark' ? 'light' : 'dark'
64+
localStorage.setItem('theme', scheme)
6365
window.dispatchEvent(new Event('storage'))
6466
}
6567
const label =

0 commit comments

Comments
 (0)