@aplus-frontend/utils
Version:
Utils for Aplus frontend team.
93 lines (92 loc) • 2.66 kB
JavaScript
const createStatusAuth = (statusMap) => {
var _a, _b, _c;
let authTransMap = {};
let statusTransMap = {};
let authFunMap = {};
const statusLength = (_a = Object.keys(statusMap)) == null ? void 0 : _a.length;
if (!statusLength) return authFunMap;
const authList = [
...new Set(
((_b = Object.keys(statusMap)) == null ? void 0 : _b.reduce((c, v) => {
c = [...c, ...statusMap[v]];
return c;
}, [])) || []
)
];
const authLength = (authList == null ? void 0 : authList.length) || 0;
if (authLength === 0) return authFunMap;
authTransMap = authList == null ? void 0 : authList.reduce(
(c, v, i) => {
const arr = new Array(authLength).fill(0);
arr.splice(i, 1, 1);
c[v] = Number(`0b${arr.join("")}`);
return c;
},
{}
);
statusTransMap = (_c = Object.keys(statusMap)) == null ? void 0 : _c.reduce(
(c, v) => {
var _a2;
c[v] = (_a2 = [...new Set(statusMap[v])]) == null ? void 0 : _a2.reduce(
(cc, vv) => cc + (authTransMap[vv] ?? 0),
0
);
return c;
},
{}
);
authFunMap = Object.keys(authTransMap).reduce(
(c, v) => {
c[`${v}Auth`] = (status) => {
if (!status) {
return false;
}
return (statusTransMap[status] & authTransMap[v]) === authTransMap[v];
};
return c;
},
{}
);
return authFunMap;
};
const createStatusGroupAuth = (...statusMapList) => {
let authFunMap = {};
let statusMapTransList = [];
const statusMapListLength = statusMapList == null ? void 0 : statusMapList.length;
if (!statusMapListLength) return authFunMap;
const authList = [
...new Set(
statusMapList == null ? void 0 : statusMapList.reduce((current, statusMap) => {
var _a;
current = [
...current,
...((_a = Object.keys(statusMap)) == null ? void 0 : _a.reduce((c, v) => {
c = [...c, ...statusMap[v]];
return c;
}, [])) || []
];
return current;
}, [])
)
];
statusMapTransList = statusMapList == null ? void 0 : statusMapList.map(
(statusMap) => createStatusAuth(statusMap)
);
authFunMap = authList == null ? void 0 : authList.reduce(
(c, v) => {
c[`${v}Auth`] = (...statusList) => {
return statusList.every((status, index) => {
var _a, _b;
return ((_b = (_a = statusMapTransList[index]) == null ? void 0 : _a[`${v}Auth`]) == null ? void 0 : _b.call(_a, status)) ?? false;
});
};
return c;
},
{}
);
return authFunMap;
};
export {
createStatusAuth,
createStatusGroupAuth
};