Skip to content

Commit aa5ac11

Browse files
committed
refactor(useColorModes): add SSR support
1 parent 518eb21 commit aa5ac11

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

packages/coreui-react/src/hooks/useColorModes.ts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,21 @@
11
import { useEffect, useState } from 'react'
22

33
interface UseColorModesOutput {
4-
getColorMode: () => string
4+
getColorMode: () => string | undefined
55
isColorModeSet: () => boolean
66
setColorMode: (mode: string) => void
77
}
88

9-
const getStoredTheme = (localStorageItemName: string) => localStorage.getItem(localStorageItemName)
9+
const getStoredTheme = (localStorageItemName: string) =>
10+
typeof window !== 'undefined' && localStorage.getItem(localStorageItemName)
1011
const setStoredTheme = (localStorageItemName: string, colorMode: string) =>
1112
localStorage.setItem(localStorageItemName, colorMode)
1213

1314
const getPreferredColorScheme = (localStorageItemName: string) => {
15+
if (typeof window === 'undefined') {
16+
return
17+
}
18+
1419
const storedTheme = getStoredTheme(localStorageItemName)
1520

1621
if (storedTheme) {
@@ -33,17 +38,21 @@ const setTheme = (colorMode: string) => {
3338
export const useColorModes = (
3439
localStorageItemName = 'coreui-react-color-scheme',
3540
): UseColorModesOutput => {
36-
const [colorMode, setColorMode] = useState<string>(getPreferredColorScheme(localStorageItemName))
41+
const [colorMode, setColorMode] = useState<string | undefined>(
42+
getPreferredColorScheme(localStorageItemName),
43+
)
3744

3845
useEffect(() => {
39-
setStoredTheme(localStorageItemName, colorMode)
40-
setTheme(colorMode)
46+
if (colorMode) {
47+
setStoredTheme(localStorageItemName, colorMode)
48+
setTheme(colorMode)
49+
}
4150
}, [colorMode])
4251

4352
useEffect(() => {
4453
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
4554
const storedTheme = getStoredTheme(localStorageItemName)
46-
if (storedTheme !== 'light' && storedTheme !== 'dark') {
55+
if (storedTheme !== 'light' && storedTheme !== 'dark' && colorMode) {
4756
setTheme(colorMode)
4857
}
4958
})

0 commit comments

Comments
 (0)