diff --git a/src/components/dark-mask/index.tsx b/src/components/dark-mask/index.tsx index a14b27f0..5c666645 100644 --- a/src/components/dark-mask/index.tsx +++ b/src/components/dark-mask/index.tsx @@ -15,7 +15,7 @@ const fadeOut = keyframes` } `; -const Mask = styled.div<{ isHiding: boolean }>` +const Mask = styled.div<{ $isHiding: boolean }>` display: flex; justify-content: center; align-items: center; @@ -26,7 +26,7 @@ const Mask = styled.div<{ isHiding: boolean }>` height: 100vh; background-color: rgba(59, 59, 59, 1); z-index: 9999; - animation: ${({ isHiding }) => (isHiding ? fadeOut : 'none')} ${duration}s + animation: ${({ $isHiding }) => ($isHiding ? fadeOut : 'none')} ${duration}s ease forwards; `; @@ -79,7 +79,7 @@ const DarkModeMask = () => { return () => el.removeEventListener('animationend', handleAnimationEnd); }, [visible]); - return visible ? : null; + return visible ? : null; }; export default DarkModeMask; diff --git a/src/hooks/use-user-settings.ts b/src/hooks/use-user-settings.ts index a73f4e99..71872683 100644 --- a/src/hooks/use-user-settings.ts +++ b/src/hooks/use-user-settings.ts @@ -9,6 +9,8 @@ export default function useUserSettings() { const { light, dark, colorPrimary } = themeConfig; const [userSettings, setUserSettings] = useAtom(userSettingsHelperAtom); + console.log('userSettings===', userSettings); + const getCurrentTheme = (mode: Theme): 'light' | 'realDark' => { if (mode === 'auto') { return window.matchMedia('(prefers-color-scheme: dark)').matches @@ -46,23 +48,32 @@ export default function useUserSettings() { }); }; - useEffect(() => { - setHtmlThemeAttr(userSettings.theme); - }, [userSettings.theme]); + const initTheme = () => { + const systemTheme = window.matchMedia('(prefers-color-scheme: dark)') + .matches + ? 'realDark' + : 'light'; + if (userSettings.mode === 'auto' && systemTheme !== userSettings.theme) { + setTheme('auto'); + } + }; useEffect(() => { - if (userSettings.mode !== 'auto') return; + initTheme(); + }, [userSettings.theme, userSettings.mode]); - setTheme('auto'); + useEffect(() => { const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)'); const handleChange = () => { + // The theme follows the system preference, when the mode is set to 'auto' + if (userSettings.mode !== 'auto') return; setTheme('auto'); }; mediaQuery.addEventListener('change', handleChange); return () => { mediaQuery.removeEventListener('change', handleChange); }; - }, [userSettings.mode]); + }, [userSettings.mode, userSettings.theme]); return { userSettings,