import { useEffect } from "react"; import { usePrefersDarkMode } from "./useMediaQuery"; import { useStateWithLocalStorage } from "./useStateWithLocalStorage"; export function useDarkMode( key: string, initialValue: boolean | undefined ): [ boolean | undefined, boolean | undefined, React.Dispatch<React.SetStateAction<boolean | undefined>>, React.Dispatch<React.SetStateAction<boolean | undefined>> ] { const [darkMode, setDarkMode] = useStateWithLocalStorage(key, initialValue); const prefersDarkMode = usePrefersDarkMode(); const [selectedThemeMode, setSelectedThemeMode] = useStateWithLocalStorage( "selectedThemeMode", false ); useEffect(() => { if (selectedThemeMode === false) setDarkMode(prefersDarkMode); }, [selectedThemeMode, prefersDarkMode, setDarkMode]); return [darkMode, selectedThemeMode, setDarkMode, setSelectedThemeMode]; }