Skip to content

Instantly share code, notes, and snippets.

@gladchinda
Last active May 4, 2020 18:35
Show Gist options
  • Save gladchinda/4be7e527d418ff0d9667fe8349a9fd05 to your computer and use it in GitHub Desktop.
Save gladchinda/4be7e527d418ff0d9667fe8349a9fd05 to your computer and use it in GitHub Desktop.
export default function useColorScheme(targetColorScheme) {
const isMounted = useRef();
const colorScheme = useRef();
const targetScheme = useMemo(
() => resolveTargetColorScheme(targetColorScheme),
[targetColorScheme]
);
const [scheme, setColorScheme] = useState(() => {
const { scheme } = colorScheme.current = getCurrentColorScheme();
return scheme;
});
useEffect(() => {
const { query } = colorScheme.current;
query.addEventListener('change', schemeChangeHandler);
isMounted.current = true;
function schemeChangeHandler(evt) {
if (!evt.matches) {
this.removeEventListener('change', schemeChangeHandler);
const { query, scheme } = colorScheme.current = getCurrentColorScheme();
isMounted.current && setColorScheme(scheme);
query.addEventListener('change', schemeChangeHandler);
}
}
return () => {
const { query } = colorScheme.current;
query.removeEventListener('change', schemeChangeHandler);
isMounted.current = false;
};
}, []);
return scheme === targetScheme;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment