payload
Version:
Node, React and MongoDB Headless CMS and Application Framework
166 lines (165 loc) • 12.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: all[name]
});
}
_export(exports, {
NavContext: function() {
return NavContext;
},
NavProvider: function() {
return NavProvider;
},
useNav: function() {
return useNav;
}
});
const _windowinfo = require("@faceless-ui/window-info");
const _bodyscrolllock = require("body-scroll-lock");
const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
const _reactrouterdom = require("react-router-dom");
const _Preferences = require("../../utilities/Preferences");
function _getRequireWildcardCache(nodeInterop) {
if (typeof WeakMap !== "function") return null;
var cacheBabelInterop = new WeakMap();
var cacheNodeInterop = new WeakMap();
return (_getRequireWildcardCache = function(nodeInterop) {
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
})(nodeInterop);
}
function _interop_require_wildcard(obj, nodeInterop) {
if (!nodeInterop && obj && obj.__esModule) {
return obj;
}
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
return {
default: obj
};
}
var cache = _getRequireWildcardCache(nodeInterop);
if (cache && cache.has(obj)) {
return cache.get(obj);
}
var newObj = {
__proto__: null
};
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
for(var key in obj){
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
if (desc && (desc.get || desc.set)) {
Object.defineProperty(newObj, key, desc);
} else {
newObj[key] = obj[key];
}
}
}
newObj.default = obj;
if (cache) {
cache.set(obj, newObj);
}
return newObj;
}
const NavContext = /*#__PURE__*/ _react.default.createContext({
navOpen: true,
navRef: null,
setNavOpen: ()=>{}
});
const useNav = ()=>_react.default.useContext(NavContext);
const getNavPreference = async (getPreference)=>{
const navPrefs = await getPreference('nav');
const preferredState = navPrefs?.open;
if (typeof preferredState === 'boolean') {
return preferredState;
} else {
return true;
}
};
const NavProvider = ({ children })=>{
const { breakpoints: { l: largeBreak, m: midBreak, s: smallBreak } } = (0, _windowinfo.useWindowInfo)();
const { getPreference } = (0, _Preferences.usePreferences)();
const history = (0, _reactrouterdom.useHistory)();
const navRef = (0, _react.useRef)(null);
// initialize the nav to be closed
// this is because getting the preference is async
// so instead of closing it after the preference is loaded
// we will open it after the preference is loaded
const [navOpen, setNavOpen] = _react.default.useState(false);
// on load check the user's preference and set "initial" state
(0, _react.useEffect)(()=>{
if (largeBreak === false) {
const setNavFromPreferences = async ()=>{
const preferredState = await getNavPreference(getPreference);
setNavOpen(preferredState);
};
setNavFromPreferences() // eslint-disable-line @typescript-eslint/no-floating-promises
;
}
}, [
largeBreak,
getPreference,
setNavOpen
]);
// on smaller screens where the nav is a modal
// close the nav when the user navigates away
(0, _react.useEffect)(()=>{
let unlisten;
if (midBreak) {
unlisten = history.listen(()=>{
setNavOpen(false);
});
} else if (unlisten) {
unlisten();
}
return ()=>unlisten && unlisten();
}, [
history,
setNavOpen,
midBreak
]);
// on open and close, lock the body scroll
// do not do this on desktop, the sidebar is not a modal
(0, _react.useEffect)(()=>{
if (navRef.current) {
if (navOpen && midBreak) {
(0, _bodyscrolllock.disableBodyScroll)(navRef.current);
} else {
(0, _bodyscrolllock.enableBodyScroll)(navRef.current);
}
}
}, [
navOpen,
midBreak
]);
// on smaller screens where the nav is a modal
// close the nav when the user resizes down to mobile
// the sidebar is a modal on mobile
(0, _react.useEffect)(()=>{
if (largeBreak === false || midBreak === false || smallBreak === false) {
setNavOpen(false);
}
}, [
largeBreak,
midBreak,
smallBreak
]);
// when the component unmounts, clear all body scroll locks
(0, _react.useEffect)(()=>{
return ()=>{
(0, _bodyscrolllock.clearAllBodyScrollLocks)();
};
}, []);
return /*#__PURE__*/ _react.default.createElement(NavContext.Provider, {
value: {
navOpen,
navRef,
setNavOpen
}
}, children);
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hZG1pbi9jb21wb25lbnRzL2VsZW1lbnRzL05hdi9jb250ZXh0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VXaW5kb3dJbmZvIH0gZnJvbSAnQGZhY2VsZXNzLXVpL3dpbmRvdy1pbmZvJ1xuaW1wb3J0IHsgY2xlYXJBbGxCb2R5U2Nyb2xsTG9ja3MsIGRpc2FibGVCb2R5U2Nyb2xsLCBlbmFibGVCb2R5U2Nyb2xsIH0gZnJvbSAnYm9keS1zY3JvbGwtbG9jaydcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlSGlzdG9yeSB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nXG5cbmltcG9ydCB7IHVzZVByZWZlcmVuY2VzIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL1ByZWZlcmVuY2VzJ1xuXG50eXBlIE5hdkNvbnRleHRUeXBlID0ge1xuICBuYXZPcGVuOiBib29sZWFuXG4gIG5hdlJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PlxuICBzZXROYXZPcGVuOiAodmFsdWU6IGJvb2xlYW4pID0+IHZvaWRcbn1cblxuZXhwb3J0IGNvbnN0IE5hdkNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PE5hdkNvbnRleHRUeXBlPih7XG4gIG5hdk9wZW46IHRydWUsXG4gIG5hdlJlZjogbnVsbCxcbiAgc2V0TmF2T3BlbjogKCkgPT4ge30sXG59KVxuXG5leHBvcnQgY29uc3QgdXNlTmF2ID0gKCkgPT4gUmVhY3QudXNlQ29udGV4dChOYXZDb250ZXh0KVxuXG5jb25zdCBnZXROYXZQcmVmZXJlbmNlID0gYXN5bmMgKGdldFByZWZlcmVuY2UpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgbmF2UHJlZnMgPSBhd2FpdCBnZXRQcmVmZXJlbmNlKCduYXYnKVxuICBjb25zdCBwcmVmZXJyZWRTdGF0ZSA9IG5hdlByZWZzPy5vcGVuXG4gIGlmICh0eXBlb2YgcHJlZmVycmVkU3RhdGUgPT09ICdib29sZWFuJykge1xuICAgIHJldHVybiBwcmVmZXJyZWRTdGF0ZVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IE5hdlByb3ZpZGVyOiBSZWFjdC5GQzx7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcbn0+ID0gKHsgY2hpbGRyZW4gfSkgPT4ge1xuICBjb25zdCB7XG4gICAgYnJlYWtwb2ludHM6IHsgbDogbGFyZ2VCcmVhaywgbTogbWlkQnJlYWssIHM6IHNtYWxsQnJlYWsgfSxcbiAgfSA9IHVzZVdpbmRvd0luZm8oKVxuXG4gIGNvbnN0IHsgZ2V0UHJlZmVyZW5jZSB9ID0gdXNlUHJlZmVyZW5jZXMoKVxuICBjb25zdCBoaXN0b3J5ID0gdXNlSGlzdG9yeSgpXG4gIGNvbnN0IG5hdlJlZiA9IHVzZVJlZihudWxsKVxuXG4gIC8vIGluaXRpYWxpemUgdGhlIG5hdiB0byBiZSBjbG9zZWRcbiAgLy8gdGhpcyBpcyBiZWNhdXNlIGdldHRpbmcgdGhlIHByZWZlcmVuY2UgaXMgYXN5bmNcbiAgLy8gc28gaW5zdGVhZCBvZiBjbG9zaW5nIGl0IGFmdGVyIHRoZSBwcmVmZXJlbmNlIGlzIGxvYWRlZFxuICAvLyB3ZSB3aWxsIG9wZW4gaXQgYWZ0ZXIgdGhlIHByZWZlcmVuY2UgaXMgbG9hZGVkXG4gIGNvbnN0IFtuYXZPcGVuLCBzZXROYXZPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKVxuXG4gIC8vIG9uIGxvYWQgY2hlY2sgdGhlIHVzZXIncyBwcmVmZXJlbmNlIGFuZCBzZXQgXCJpbml0aWFsXCIgc3RhdGVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobGFyZ2VCcmVhayA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHNldE5hdkZyb21QcmVmZXJlbmNlcyA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcHJlZmVycmVkU3RhdGUgPSBhd2FpdCBnZXROYXZQcmVmZXJlbmNlKGdldFByZWZlcmVuY2UpXG4gICAgICAgIHNldE5hdk9wZW4ocHJlZmVycmVkU3RhdGUpXG4gICAgICB9XG5cbiAgICAgIHNldE5hdkZyb21QcmVmZXJlbmNlcygpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgfVxuICB9LCBbbGFyZ2VCcmVhaywgZ2V0UHJlZmVyZW5jZSwgc2V0TmF2T3Blbl0pXG5cbiAgLy8gb24gc21hbGxlciBzY3JlZW5zIHdoZXJlIHRoZSBuYXYgaXMgYSBtb2RhbFxuICAvLyBjbG9zZSB0aGUgbmF2IHdoZW4gdGhlIHVzZXIgbmF2aWdhdGVzIGF3YXlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgdW5saXN0ZW46ICgpID0+IHZvaWRcblxuICAgIGlmIChtaWRCcmVhaykge1xuICAgICAgdW5saXN0ZW4gPSBoaXN0b3J5Lmxpc3RlbigoKSA9PiB7XG4gICAgICAgIHNldE5hdk9wZW4oZmFsc2UpXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAodW5saXN0ZW4pIHtcbiAgICAgIHVubGlzdGVuKClcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4gdW5saXN0ZW4gJiYgdW5saXN0ZW4oKVxuICB9LCBbaGlzdG9yeSwgc2V0TmF2T3BlbiwgbWlkQnJlYWtdKVxuXG4gIC8vIG9uIG9wZW4gYW5kIGNsb3NlLCBsb2NrIHRoZSBib2R5IHNjcm9sbFxuICAvLyBkbyBub3QgZG8gdGhpcyBvbiBkZXNrdG9wLCB0aGUgc2lkZWJhciBpcyBub3QgYSBtb2RhbFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChuYXZSZWYuY3VycmVudCkge1xuICAgICAgaWYgKG5hdk9wZW4gJiYgbWlkQnJlYWspIHtcbiAgICAgICAgZGlzYWJsZUJvZHlTY3JvbGwobmF2UmVmLmN1cnJlbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbmFibGVCb2R5U2Nyb2xsKG5hdlJlZi5jdXJyZW50KVxuICAgICAgfVxuICAgIH1cbiAgfSwgW25hdk9wZW4sIG1pZEJyZWFrXSlcblxuICAvLyBvbiBzbWFsbGVyIHNjcmVlbnMgd2hlcmUgdGhlIG5hdiBpcyBhIG1vZGFsXG4gIC8vIGNsb3NlIHRoZSBuYXYgd2hlbiB0aGUgdXNlciByZXNpemVzIGRvd24gdG8gbW9iaWxlXG4gIC8vIHRoZSBzaWRlYmFyIGlzIGEgbW9kYWwgb24gbW9iaWxlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxhcmdlQnJlYWsgPT09IGZhbHNlIHx8IG1pZEJyZWFrID09PSBmYWxzZSB8fCBzbWFsbEJyZWFrID09PSBmYWxzZSkge1xuICAgICAgc2V0TmF2T3BlbihmYWxzZSlcbiAgICB9XG4gIH0sIFtsYXJnZUJyZWFrLCBtaWRCcmVhaywgc21hbGxCcmVha10pXG5cbiAgLy8gd2hlbiB0aGUgY29tcG9uZW50IHVubW91bnRzLCBjbGVhciBhbGwgYm9keSBzY3JvbGwgbG9ja3NcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2xlYXJBbGxCb2R5U2Nyb2xsTG9ja3MoKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgcmV0dXJuIChcbiAgICA8TmF2Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17eyBuYXZPcGVuLCBuYXZSZWYsIHNldE5hdk9wZW4gfX0+e2NoaWxkcmVufTwvTmF2Q29udGV4dC5Qcm92aWRlcj5cbiAgKVxufVxuIl0sIm5hbWVzIjpbIk5hdkNvbnRleHQiLCJOYXZQcm92aWRlciIsInVzZU5hdiIsIlJlYWN0IiwiY3JlYXRlQ29udGV4dCIsIm5hdk9wZW4iLCJuYXZSZWYiLCJzZXROYXZPcGVuIiwidXNlQ29udGV4dCIsImdldE5hdlByZWZlcmVuY2UiLCJnZXRQcmVmZXJlbmNlIiwibmF2UHJlZnMiLCJwcmVmZXJyZWRTdGF0ZSIsIm9wZW4iLCJjaGlsZHJlbiIsImJyZWFrcG9pbnRzIiwibCIsImxhcmdlQnJlYWsiLCJtIiwibWlkQnJlYWsiLCJzIiwic21hbGxCcmVhayIsInVzZVdpbmRvd0luZm8iLCJ1c2VQcmVmZXJlbmNlcyIsImhpc3RvcnkiLCJ1c2VIaXN0b3J5IiwidXNlUmVmIiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJzZXROYXZGcm9tUHJlZmVyZW5jZXMiLCJ1bmxpc3RlbiIsImxpc3RlbiIsImN1cnJlbnQiLCJkaXNhYmxlQm9keVNjcm9sbCIsImVuYWJsZUJvZHlTY3JvbGwiLCJjbGVhckFsbEJvZHlTY3JvbGxMb2NrcyIsIlByb3ZpZGVyIiwidmFsdWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBYWFBLFVBQVU7ZUFBVkE7O0lBa0JBQyxXQUFXO2VBQVhBOztJQVpBQyxNQUFNO2VBQU5BOzs7NEJBbkJpQjtnQ0FDK0M7K0RBQ3BDO2dDQUNkOzZCQUVJOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFReEIsTUFBTUYsMkJBQWFHLGNBQUssQ0FBQ0MsYUFBYSxDQUFpQjtJQUM1REMsU0FBUztJQUNUQyxRQUFRO0lBQ1JDLFlBQVksS0FBTztBQUNyQjtBQUVPLE1BQU1MLFNBQVMsSUFBTUMsY0FBSyxDQUFDSyxVQUFVLENBQUNSO0FBRTdDLE1BQU1TLG1CQUFtQixPQUFPQztJQUM5QixNQUFNQyxXQUFXLE1BQU1ELGNBQWM7SUFDckMsTUFBTUUsaUJBQWlCRCxVQUFVRTtJQUNqQyxJQUFJLE9BQU9ELG1CQUFtQixXQUFXO1FBQ3ZDLE9BQU9BO0lBQ1QsT0FBTztRQUNMLE9BQU87SUFDVDtBQUNGO0FBRU8sTUFBTVgsY0FFUixDQUFDLEVBQUVhLFFBQVEsRUFBRTtJQUNoQixNQUFNLEVBQ0pDLGFBQWEsRUFBRUMsR0FBR0MsVUFBVSxFQUFFQyxHQUFHQyxRQUFRLEVBQUVDLEdBQUdDLFVBQVUsRUFBRSxFQUMzRCxHQUFHQyxJQUFBQSx5QkFBYTtJQUVqQixNQUFNLEVBQUVaLGFBQWEsRUFBRSxHQUFHYSxJQUFBQSwyQkFBYztJQUN4QyxNQUFNQyxVQUFVQyxJQUFBQSwwQkFBVTtJQUMxQixNQUFNbkIsU0FBU29CLElBQUFBLGFBQU0sRUFBQztJQUV0QixrQ0FBa0M7SUFDbEMsa0RBQWtEO0lBQ2xELDBEQUEwRDtJQUMxRCxpREFBaUQ7SUFDakQsTUFBTSxDQUFDckIsU0FBU0UsV0FBVyxHQUFHSixjQUFLLENBQUN3QixRQUFRLENBQUM7SUFFN0MsOERBQThEO0lBQzlEQyxJQUFBQSxnQkFBUyxFQUFDO1FBQ1IsSUFBSVgsZUFBZSxPQUFPO1lBQ3hCLE1BQU1ZLHdCQUF3QjtnQkFDNUIsTUFBTWpCLGlCQUFpQixNQUFNSCxpQkFBaUJDO2dCQUM5Q0gsV0FBV0s7WUFDYjtZQUVBaUIsd0JBQXdCLDhEQUE4RDs7UUFDeEY7SUFDRixHQUFHO1FBQUNaO1FBQVlQO1FBQWVIO0tBQVc7SUFFMUMsOENBQThDO0lBQzlDLDZDQUE2QztJQUM3Q3FCLElBQUFBLGdCQUFTLEVBQUM7UUFDUixJQUFJRTtRQUVKLElBQUlYLFVBQVU7WUFDWlcsV0FBV04sUUFBUU8sTUFBTSxDQUFDO2dCQUN4QnhCLFdBQVc7WUFDYjtRQUNGLE9BQU8sSUFBSXVCLFVBQVU7WUFDbkJBO1FBQ0Y7UUFFQSxPQUFPLElBQU1BLFlBQVlBO0lBQzNCLEdBQUc7UUFBQ047UUFBU2pCO1FBQVlZO0tBQVM7SUFFbEMsMENBQTBDO0lBQzFDLHdEQUF3RDtJQUN4RFMsSUFBQUEsZ0JBQVMsRUFBQztRQUNSLElBQUl0QixPQUFPMEIsT0FBTyxFQUFFO1lBQ2xCLElBQUkzQixXQUFXYyxVQUFVO2dCQUN2QmMsSUFBQUEsaUNBQWlCLEVBQUMzQixPQUFPMEIsT0FBTztZQUNsQyxPQUFPO2dCQUNMRSxJQUFBQSxnQ0FBZ0IsRUFBQzVCLE9BQU8wQixPQUFPO1lBQ2pDO1FBQ0Y7SUFDRixHQUFHO1FBQUMzQjtRQUFTYztLQUFTO0lBRXRCLDhDQUE4QztJQUM5QyxxREFBcUQ7SUFDckQsbUNBQW1DO0lBQ25DUyxJQUFBQSxnQkFBUyxFQUFDO1FBQ1IsSUFBSVgsZUFBZSxTQUFTRSxhQUFhLFNBQVNFLGVBQWUsT0FBTztZQUN0RWQsV0FBVztRQUNiO0lBQ0YsR0FBRztRQUFDVTtRQUFZRTtRQUFVRTtLQUFXO0lBRXJDLDJEQUEyRDtJQUMzRE8sSUFBQUEsZ0JBQVMsRUFBQztRQUNSLE9BQU87WUFDTE8sSUFBQUEsdUNBQXVCO1FBQ3pCO0lBQ0YsR0FBRyxFQUFFO0lBRUwscUJBQ0UsNkJBQUNuQyxXQUFXb0MsUUFBUTtRQUFDQyxPQUFPO1lBQUVoQztZQUFTQztZQUFRQztRQUFXO09BQUlPO0FBRWxFIn0=