Skip to content

Commit c9a70f2

Browse files
committed
feat: put colorMode preference in local storage
1 parent cd82361 commit c9a70f2

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

src/hooks/use-color-preference.js

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import {useCallback, useMemo} from 'react'
2+
import {useTheme} from '@primer/react'
3+
4+
export const useColorPreference = (themeContextId = 'root') => {
5+
const {colorMode, setColorMode} = useTheme()
6+
const setColorPreference = useCallback(
7+
mode => {
8+
localStorage.setItem(`${themeContextId}-color-mode`, mode)
9+
setColorMode(mode)
10+
},
11+
[setColorMode, themeContextId],
12+
)
13+
14+
const preferredColorMode = useMemo(
15+
() => colorMode ?? localStorage.getItem(`${themeContextId}-color-mode`) ?? 'auto',
16+
[colorMode, themeContextId],
17+
)
18+
19+
return {preferredColorMode, setColorPreference}
20+
}

src/theme.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import deepmerge from 'deepmerge'
44

55
export const NPM_RED = '#cb3837'
66

7+
const colorModePreference = localStorage.getItem('root-color-mode') ?? 'auto'
8+
79
export const npmTheme = deepmerge(theme, {
810
colors: {
911
logoBg: NPM_RED,
@@ -37,7 +39,7 @@ export const npmTheme = deepmerge(theme, {
3739
},
3840
})
3941

40-
export const ThemeProvider = props => <Provider theme={npmTheme} {...props} />
42+
export const ThemeProvider = props => <Provider theme={npmTheme} colorMode={colorModePreference} {...props} />
4143

4244
export const Theme = React.forwardRef(function Theme({theme: colorMode, as = Box, ...props}, ref) {
4345
return (

0 commit comments

Comments
 (0)