UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

107 lines (106 loc) 3.16 kB
"use strict"; "use client"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; Object.defineProperty(exports, "onMediaQueryChange", { enumerable: true, get: function () { return _MediaQueryUtils.onMediaQueryChange; } }); var _react = _interopRequireDefault(require("react")); var _Context = _interopRequireDefault(require("./Context.js")); var _MediaQueryUtils = require("./MediaQueryUtils.js"); var _jsxRuntime = require("react/jsx-runtime"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function MediaQuery(props) { const context = _react.default.useContext(_Context.default); const listenerRef = _react.default.useRef(null); const getInitialState = () => { const state = { match: null, mediaQueryList: null }; if (!(0, _MediaQueryUtils.isMatchMediaSupported)() && props.matchOnSSR) { state.match = true; } if ((0, _MediaQueryUtils.isMatchMediaSupported)()) { var _state$mediaQueryList; const { query, when, not } = props; const { disabled, correctRange = true, log } = props; state.mediaQueryList = (0, _MediaQueryUtils.makeMediaQueryList)({ query, when, not }, context === null || context === void 0 ? void 0 : context.breakpoints, { disabled, correctRange, log }); if ((_state$mediaQueryList = state.mediaQueryList) !== null && _state$mediaQueryList !== void 0 && _state$mediaQueryList.matches) { state.match = true; } } return state; }; const [state, setState] = _react.default.useState(getInitialState); _react.default.useEffect(() => { if (listenerRef.current) { listenerRef.current(); listenerRef.current = null; } if (!(0, _MediaQueryUtils.isMatchMediaSupported)()) { return undefined; } const { query, when, not, disabled, correctRange = true, log } = props; const mediaQueryList = (0, _MediaQueryUtils.makeMediaQueryList)({ query, when, not }, context === null || context === void 0 ? void 0 : context.breakpoints, { disabled, correctRange, log }); setState({ match: mediaQueryList === null || mediaQueryList === void 0 ? void 0 : mediaQueryList.matches, mediaQueryList }); if (mediaQueryList) { listenerRef.current = (0, _MediaQueryUtils.createMediaQueryListener)(mediaQueryList, match => { setState(prev => ({ ...prev, match })); }); } return () => { if (listenerRef.current) { listenerRef.current(); listenerRef.current = null; } }; }, [props.query, props.when, props.not, props.disabled, props.correctRange, props.log, context === null || context === void 0 ? void 0 : context.breakpoints]); return (0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, { children: state.match ? props.children : null }); } var _default = exports.default = MediaQuery; //# sourceMappingURL=MediaQuery.js.map