@@ -32,18 +32,21 @@ export interface LoadSyncedStateProps extends ThemeSwitcherProps {
32
32
setThemeState : SetStateAction < ThemeState > ;
33
33
}
34
34
35
- function parseState ( str ?: string | null ) : ThemeState {
36
- const parts = ( str ?? ",system,light " ) . split ( "," ) as [ string , ColorSchemePreference , "light" | "dark" ] ;
37
- return { theme : parts [ 0 ] , colorSchemePreference : parts [ 1 ] , systemColorScheme : parts [ 2 ] } ;
35
+ function parseState ( str ?: string | null ) {
36
+ const parts = ( str ?? ",system" ) . split ( "," ) as [ string , ColorSchemePreference ] ;
37
+ return { theme : parts [ 0 ] , colorSchemePreference : parts [ 1 ] } ;
38
38
}
39
39
40
+ let tInit = 0 ;
41
+
40
42
function useLoadSyncedState ( { dontSync, targetId, setThemeState } : LoadSyncedStateProps ) {
41
43
React . useEffect ( ( ) => {
42
44
if ( dontSync ) return ;
45
+ tInit = Date . now ( ) ;
43
46
const key = targetId ?? DEFAULT_ID ;
44
- setThemeState ( parseState ( localStorage . getItem ( key ) ) ) ;
47
+ setThemeState ( state => ( { ... state , ... parseState ( localStorage . getItem ( key ) ) } ) ) ;
45
48
const storageListener = ( e : StorageEvent ) => {
46
- if ( e . key === key ) setThemeState ( parseState ( e . newValue ) ) ;
49
+ if ( e . key === key ) setThemeState ( state => ( { ... state , ... parseState ( e . newValue ) } ) ) ;
47
50
} ;
48
51
window . addEventListener ( "storage" , storageListener ) ;
49
52
return ( ) => {
@@ -114,10 +117,10 @@ export function ThemeSwitcher({ targetId, dontSync, themeTransition }: ThemeSwit
114
117
React . useEffect ( ( ) => {
115
118
const restoreTransitions = modifyTransition ( themeTransition ) ;
116
119
updateDOM ( { targetId, themeState, dontSync } ) ;
117
- if ( ! dontSync ) {
120
+ if ( ! dontSync && tInit < Date . now ( ) - 300 ) {
118
121
// save to localStorage
119
- const { theme, colorSchemePreference : csp , systemColorScheme : scs } = themeState ;
120
- const stateToSave = [ theme , csp , scs ] . join ( "," ) ;
122
+ const { theme, colorSchemePreference } = themeState ;
123
+ const stateToSave = [ theme , colorSchemePreference ] . join ( "," ) ;
121
124
const key = targetId ?? DEFAULT_ID ;
122
125
localStorage . setItem ( key , stateToSave ) ;
123
126
}
0 commit comments