UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

64 lines (63 loc) 1.99 kB
"use client"; import "core-js/modules/web.dom-collections.iterator.js"; import React, { useContext, useMemo, useRef, useState } from 'react'; import { isTrue } from './component-helper'; import Context from './Context'; import { makeMediaQueryList, createMediaQueryListener, isMatchMediaSupported } from './MediaQueryUtils'; const useLayoutEffect = typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect; export default function useMediaQuery(props) { var _mediaQueryList$curre; const context = useContext(Context); const { query, when, not, matchOnSSR, disabled, correctRange = true, log } = props; let matches = useMemo(() => { if (disabled) { return false; } return isTrue(matchOnSSR) && !isMatchMediaSupported(); }, [disabled, matchOnSSR]); const mediaQueryList = useRef(makeMediaQueryList({ query, when, not }, context.breakpoints, { disabled, correctRange, log })); if ((_mediaQueryList$curre = mediaQueryList.current) !== null && _mediaQueryList$curre !== void 0 && _mediaQueryList$curre.matches) { matches = true; } const [match, matchUpdate] = useState(matches); const listenerRef = useRef(); useLayoutEffect(() => { if (disabled) { return; } if (typeof listenerRef.current === 'function') { var _mediaQueryList$curre2; listenerRef.current(); mediaQueryList.current = makeMediaQueryList({ query, when, not }, context.breakpoints, { disabled, correctRange, log }); matchUpdate((_mediaQueryList$curre2 = mediaQueryList.current) === null || _mediaQueryList$curre2 === void 0 ? void 0 : _mediaQueryList$curre2.matches); } listenerRef.current = createMediaQueryListener(mediaQueryList.current, match => matchUpdate(match)); return listenerRef.current; }, [query, when, not, disabled]); return Boolean(match); } //# sourceMappingURL=useMediaQuery.js.map