UNPKG

@wordpress/compose

Version:
66 lines (61 loc) 1.86 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = useMediaQuery; var _element = require("@wordpress/element"); /** * WordPress dependencies */ const matchMediaCache = new Map(); /** * A new MediaQueryList object for the media query * * @param {string} [query] Media Query. * @return {MediaQueryList|null} A new object for the media query */ function getMediaQueryList(query) { if (!query) { return null; } let match = matchMediaCache.get(query); if (match) { return match; } if (typeof window !== 'undefined' && typeof window.matchMedia === 'function') { match = window.matchMedia(query); matchMediaCache.set(query, match); return match; } return null; } /** * Runs a media query and returns its value when it changes. * * @param {string} [query] Media Query. * @return {boolean} return value of the media query. */ function useMediaQuery(query) { const source = (0, _element.useMemo)(() => { const mediaQueryList = getMediaQueryList(query); return { /** @type {(onStoreChange: () => void) => () => void} */ subscribe(onStoreChange) { if (!mediaQueryList) { return () => {}; } // Avoid a fatal error when browsers don't support `addEventListener` on MediaQueryList. mediaQueryList.addEventListener?.('change', onStoreChange); return () => { mediaQueryList.removeEventListener?.('change', onStoreChange); }; }, getValue() { var _mediaQueryList$match; return (_mediaQueryList$match = mediaQueryList?.matches) !== null && _mediaQueryList$match !== void 0 ? _mediaQueryList$match : false; } }; }, [query]); return (0, _element.useSyncExternalStore)(source.subscribe, source.getValue, () => false); } //# sourceMappingURL=index.js.map