@bianic-ui/media-query
Version:
A React hook for changing properties or visibility of a component based on css media query
32 lines (27 loc) • 930 B
JavaScript
import * as React from "react";
import { isBrowser } from "@bianic-ui/utils";
var isSupported = api => isBrowser && api in window;
var useSafeLayoutEffect = isBrowser ? React.useLayoutEffect : React.useEffect;
/**
* React hook that tracks state of a CSS media query
*
* @param query the media query to match
*/
export function useMediaQuery(query) {
var [matches, setMatches] = React.useState(() => {
if (!isSupported("matchMedia")) return false;
return !!window.matchMedia(query).matches;
});
useSafeLayoutEffect(() => {
if (!isSupported("matchMedia")) return;
var mediaQueryList = window.matchMedia(query);
var listener = () => setMatches(!!mediaQueryList.matches);
mediaQueryList.addListener(listener);
listener();
return () => {
mediaQueryList.removeListener(listener);
};
}, [query]);
return [matches, setMatches];
}
//# sourceMappingURL=use-media-query.js.map