11import { useEffect , useState } from 'react'
22
33interface 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 )
1011const setStoredTheme = ( localStorageItemName : string , colorMode : string ) =>
1112 localStorage . setItem ( localStorageItemName , colorMode )
1213
1314const 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) => {
3338export 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