= ({
className = '',
hideTitle = false,
horizontal = false,
}) => {
- const [themeMode, setThemeMode] = useState<'light' | 'dark' | 'system'>(getThemeMode);
- const [isDarkMode, setDarkMode] = useState(() => getIsDarkMode(getThemeMode()));
-
- useEffect(() => {
- const handleStorageChange = (e: { key: string | null; newValue: string | null }) => {
- if (e.key === 'use_system_theme' || e.key === 'theme') {
- const newThemeMode = getThemeMode();
- setThemeMode(newThemeMode);
- setDarkMode(getIsDarkMode(newThemeMode));
- }
- };
-
- window.addEventListener('storage', handleStorageChange);
-
- return () => {
- window.removeEventListener('storage', handleStorageChange);
- };
- }, []);
-
- useEffect(() => {
- const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
-
- const handleThemeChange = (e: { matches: boolean }) => {
- if (themeMode === 'system') {
- setDarkMode(e.matches);
- }
- };
-
- mediaQuery.addEventListener('change', handleThemeChange);
-
- setThemeModeStorage(themeMode);
- setDarkMode(getIsDarkMode(themeMode));
-
- return () => mediaQuery.removeEventListener('change', handleThemeChange);
- }, [themeMode]);
-
- useEffect(() => {
- if (isDarkMode) {
- document.documentElement.classList.add('dark');
- document.documentElement.classList.remove('light');
- } else {
- document.documentElement.classList.remove('dark');
- document.documentElement.classList.add('light');
- }
- }, [isDarkMode]);
-
- const handleThemeChange = (newTheme: 'light' | 'dark' | 'system') => {
- setThemeMode(newTheme);
- };
+ const { userThemePreference, setUserThemePreference } = useTheme();
return (
@@ -109,9 +24,9 @@ const ThemeSelector: React.FC = ({
>