Skip to content

Commit

Permalink
fix(component): visual bug in auto dark mode
Browse files Browse the repository at this point in the history
  • Loading branch information
hyrious committed May 20, 2022
1 parent 8a0efa6 commit 9e8a586
Showing 1 changed file with 12 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,21 @@ import { useIsomorphicLayoutEffect } from "react-use";

export type FlatPrefersColorScheme = "auto" | "dark" | "light";

const prefersDark = window.matchMedia("(prefers-color-scheme: dark)");

export function useDarkMode(prefersColorScheme?: FlatPrefersColorScheme): boolean {
const [darkMode, setDarkMode] = useState(prefersColorScheme === "dark");
const [darkMode, setDarkMode] = useState(() =>
prefersColorScheme === "auto" && prefersDark
? prefersDark.matches
: prefersColorScheme === "dark",
);

useIsomorphicLayoutEffect(() => {
if (prefersColorScheme === "auto") {
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)");
if (prefersDark) {
setDarkMode(prefersDark.matches);
const handler = (evt: MediaQueryListEvent): void => setDarkMode(evt.matches);
prefersDark.addListener(handler);
return () => prefersDark.removeListener(handler);
}
return;
if (prefersColorScheme === "auto" && prefersDark) {
setDarkMode(prefersDark.matches);
const handler = (evt: MediaQueryListEvent): void => setDarkMode(evt.matches);
prefersDark.addEventListener("change", handler);
return () => prefersDark.removeEventListener("change", handler);
} else {
setDarkMode(prefersColorScheme === "dark");
return;
Expand Down

0 comments on commit 9e8a586

Please sign in to comment.