UNPKG

burdy

Version:

Open Source Headless Platform

123 lines (122 loc) 4.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useAllowedPaths = exports.useModelState = exports.useStorageState = exports.useButtonHover = exports.useRefChange = void 0; const react_1 = require("react"); const use_debounce_1 = require("use-debounce"); const misc_1 = require("./misc"); const react_hooks_1 = require("@fluentui/react-hooks"); const utility_1 = require("./utility"); const settings_1 = require("../context/settings"); const useButtonHover = (debounce = 300) => { const [value, setValue] = (0, react_1.useState)(false); const setDebounceValue = (0, use_debounce_1.useDebouncedCallback)((val) => { setValue(val); }, debounce); const listeners = { onMouseEnter: () => { setValue(true); setDebounceValue(true); }, onMouseLeave: () => setDebounceValue(false), }; return [value, listeners]; }; exports.useButtonHover = useButtonHover; const useStorageState = (name, defaultValue) => { var _a; const [state, setState] = (0, react_1.useState)((_a = JSON.parse(localStorage.getItem(name))) !== null && _a !== void 0 ? _a : defaultValue); (0, react_1.useEffect)(() => { localStorage.setItem(name, JSON.stringify(state)); }, [state]); return [state, setState]; }; exports.useStorageState = useStorageState; const useModelState = (defaultValue = [], sorter = null) => { const [sort, setSort] = (0, react_1.useState)(sorter ? () => sorter : null); const [arrayState, setArrayStatePrivate] = (0, react_1.useState)(defaultValue); const [objectState, setObjectStatePrivate] = (0, react_1.useState)((0, misc_1.convertModelArrayToObject)(defaultValue)); const [middleware, setMiddleware] = (0, react_1.useState)([]); const removeSort = () => { setSort(null); }; const setObjectState = (models) => { setArrayState(Object.values(models)); }; const sortList = (models = []) => { if (sort) { models.sort(sort); } }; const setArrayState = (models) => { models = middleware.reduce((previous, current) => current(previous), models); sortList(models); setObjectStatePrivate((0, misc_1.convertModelArrayToObject)(models)); setArrayStatePrivate(models); }; const create = (models) => { setArrayState([...arrayState, ...models]); }; const destroy = (ids) => { if (!Array.isArray(ids)) return; setArrayState(arrayState.filter((u) => !ids.includes(u.id))); }; const update = (models) => { const newObjectState = Object.assign({}, objectState); models.forEach((m) => { newObjectState[m.id] = m; }); setObjectState(newObjectState); }; return { arrayState, objectState, setObjectState, setArrayState, create, delete: destroy, update, middleware, setMiddleware, removeSort, setSort, }; }; exports.useModelState = useModelState; // Wrapper for typings class ModelStateWrapper { constructor() { this.useModelState = (defaultValue = []) => useModelState(defaultValue); } } const useRefChange = (callback, initial) => { const previousRef = (0, react_1.useRef)(initial); return (0, react_hooks_1.useRefEffect)((current) => { const cleanup = callback(current, previousRef.current); previousRef.current = current; return cleanup; }, initial); }; exports.useRefChange = useRefChange; const useAllowedPaths = () => { const { settingsArray } = (0, settings_1.useSettings)(); const allowedPaths = (0, react_1.useMemo)(() => { const previewEditor = (0, utility_1.findSettingsValue)(settingsArray, 'previewEditor'); let paths = []; if (!previewEditor) return paths; try { const parsed = JSON.parse(previewEditor); if (!(0, utility_1.isTrue)(parsed === null || parsed === void 0 ? void 0 : parsed.enabled)) { return paths; } paths = ((parsed === null || parsed === void 0 ? void 0 : parsed.rewrites) || []).map(rewrite => rewrite === null || rewrite === void 0 ? void 0 : rewrite.source).filter((path) => (path === null || path === void 0 ? void 0 : path.length) > 0); } catch (_a) { // } return paths; }, []); return allowedPaths; }; exports.useAllowedPaths = useAllowedPaths;