burdy
Version:
Open Source Headless Platform
123 lines (122 loc) • 4.54 kB
JavaScript
;
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;