react-permissions-dynamic
Version:
This is a package with react-permissions
31 lines (30 loc) • 1.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useCheckPermissions = void 0;
const react_1 = require("react");
const utilities_1 = require("./utilities");
const _1 = require(".");
const hooks_1 = require("../../hooks");
const getCheckedActions = (result) => result.filter(a => a.checked).map(a => a.action);
const getNewCheckedActions = (result, checked) => {
return result.filter(ar => ar.checked && !(0, utilities_1.has)(checked, ar.action));
};
const useCheckPermissions = (actions, onCheck) => {
const { check, allowed } = (0, _1.usePermissions)();
const allowedResult = actions.map(allowed);
const checkedRef = (0, react_1.useRef)([]);
const checkRef = (0, hooks_1.useRefValue)(check);
const onCheckRef = (0, hooks_1.useRefValue)(onCheck);
(0, hooks_1.useDeepEffect)(() => {
var _a;
(_a = checkRef.current) === null || _a === void 0 ? void 0 : _a.call(checkRef, actions);
}, [actions, checkRef]);
(0, hooks_1.useDeepEffect)(() => {
const checked = checkedRef.current;
const newCheckedActions = getNewCheckedActions(allowedResult, checked);
checkedRef.current = getCheckedActions(allowedResult);
newCheckedActions.map(a => { var _a; return (_a = onCheckRef.current) === null || _a === void 0 ? void 0 : _a.call(onCheckRef, a); });
}, [allowedResult, onCheckRef, checkedRef]);
return allowedResult;
};
exports.useCheckPermissions = useCheckPermissions;