monkey-react
Version:
A powerful yet simple React library designed to make responsive can adapt seamlessly to any device, providing a smooth, consistent user experience.
206 lines • 10.7 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getBasename = getBasename;
exports.getBaseRouters = getBaseRouters;
var jsx_runtime_1 = require("react/jsx-runtime");
var react_router_dom_1 = require("react-router-dom");
function getBasename(routers, isPermit, levelOrLevel) {
// checking cannot use char "/" for define default path
var _a, _b, _c, _d, _e, _f;
// check browser location for get sub path and matching with basename
var _g = (_a = window.location.pathname) === null || _a === void 0 ? void 0 : _a.split("/"), _ = _g[0], basename = _g[1];
var baserouters = routers.find(function (e) { return e.index === true; });
if (basename) {
// set router basename
baserouters = routers.find(function (e) { return e.basename === basename; });
// set router defaultpath if not found router basename with browser router
// if (!baserouters && defaultPath!!) {
// baserouters = routers.find((e) => e.basename === defaultPath);
// }
}
// set default baseroute when not any basename from browser location
// else if (defaultPath!!) {
// baserouters = routers.find((e) => e.basename === defaultPath);
// }
var tempRouters = baserouters === null || baserouters === void 0 ? void 0 : baserouters.routers;
var result = [];
// remap router with basename prefix like "/v2"+"/path"
for (var i = 0; i < (tempRouters === null || tempRouters === void 0 ? void 0 : tempRouters.length); i++) {
var el = tempRouters[i];
var temp = __assign(__assign(__assign({}, el), (el.path ? { path: "/".concat(baserouters === null || baserouters === void 0 ? void 0 : baserouters.basename, "/").concat(el === null || el === void 0 ? void 0 : el.path) } : {})), (!el.permit ? { permit: false } : { permit: el === null || el === void 0 ? void 0 : el.permit }));
// create default navigation when permit is false with matching with field permit & create index router
var typeEl = (_b = temp === null || temp === void 0 ? void 0 : temp.element) === null || _b === void 0 ? void 0 : _b.valueOf();
if (!isPermit &&
!(temp === null || temp === void 0 ? void 0 : temp.permit) &&
(temp === null || temp === void 0 ? void 0 : temp.index) &&
((_c = typeEl === null || typeEl === void 0 ? void 0 : typeEl.type) === null || _c === void 0 ? void 0 : _c.name) === "Navigate") {
temp = {
index: true,
element: ((0, jsx_runtime_1.jsx)(react_router_dom_1.Navigate, { to: "/".concat(baserouters === null || baserouters === void 0 ? void 0 : baserouters.basename, "/").concat(baserouters === null || baserouters === void 0 ? void 0 : baserouters.authPath) })),
};
result.push(__assign({}, temp));
}
// add all router without permit
else if (!isPermit && !(temp === null || temp === void 0 ? void 0 : temp.permit)) {
result.push(__assign({}, temp));
}
// add all router if permit is true
if (isPermit) {
if ((temp === null || temp === void 0 ? void 0 : temp.permit) &&
typeof levelOrLevel === "function" &&
Array.isArray(temp.children) &&
!temp.index) {
var child = [
(_d = temp.children) === null || _d === void 0 ? void 0 : _d.find(function (e) { return (e === null || e === void 0 ? void 0 : e.index) === true; }),
];
var filter = filterLevelOrRole(temp === null || temp === void 0 ? void 0 : temp.children, levelOrLevel);
child = __spreadArray([child[0]], filter, true);
temp.children = child;
}
result.push(__assign({}, temp));
}
}
// create prefix basename router to navigate default or index router
result.unshift({
path: baserouters === null || baserouters === void 0 ? void 0 : baserouters.basename,
element: (_e = result.find(function (e) { return e.index === true; })) === null || _e === void 0 ? void 0 : _e.element,
});
// create default navigation when not found router or navigate to default not found router if any define path "[*]"
var routePath = window.location.pathname;
// check router is define router return to navigate to index
var checkinRouterDef = tempRouters.filter(function (e) {
var _a;
var temp = (_a = e.path) === null || _a === void 0 ? void 0 : _a.split("/")[0];
return routePath.includes(temp);
})[0];
// cehck default "*" router define to global not found
var notFoundRoute = ((_f = result.find(function (e) { return e.path === "/".concat(baserouters === null || baserouters === void 0 ? void 0 : baserouters.basename, "/*"); })) === null || _f === void 0 ? void 0 : _f.element) || ((0, jsx_runtime_1.jsx)(react_router_dom_1.Navigate, { to: "/".concat(baserouters === null || baserouters === void 0 ? void 0 : baserouters.basename, "/").concat(baserouters === null || baserouters === void 0 ? void 0 : baserouters.authPath) }));
//create element if notfound with default route define "*" or when not define navigate to index element
checkinRouterDef && !isPermit &&
result.push({
path: routePath,
element: ((0, jsx_runtime_1.jsx)(react_router_dom_1.Navigate, { to: "/".concat(baserouters === null || baserouters === void 0 ? void 0 : baserouters.basename, "/").concat(baserouters === null || baserouters === void 0 ? void 0 : baserouters.authPath) })),
});
!checkinRouterDef &&
result.push({
path: routePath,
element: notFoundRoute,
});
// warning any wrong define params or etc.
if (!basename && !(result === null || result === void 0 ? void 0 : result.length))
console.warn("[getBasename]: basename must be define \"index=true\" or default path must be define with basename");
if (basename && !result.length)
console.warn("router path [/".concat(basename, "] not found"));
return result;
}
var filterLevelOrRole = function (route, levelOrLevel) {
var temp = route;
temp = temp.filter(function (e) {
if (e.children) {
e.children = filterLevelOrRole(e.children, levelOrLevel);
}
return levelOrLevel(e);
});
return temp;
};
function getBaseRouters(routers, isPermit, levelOrLevel) {
var pathname = window.location.pathname;
var _a = pathname.split("/"), prefix = _a[1];
// select basename router
var findRouter = getBaseRouterWithPrefix(prefix, routers);
if (!findRouter) {
return { routers: [] };
}
var result = (findRouter === null || findRouter === void 0 ? void 0 : findRouter.routers) || [];
result = result.map(function (e) {
if (!(e === null || e === void 0 ? void 0 : e.permit))
e.permit = false;
return e;
});
// navigate to auth when permit router true and isPermit false
if (!isPermit) {
result = result.map(function (e) {
// permit without prefix
if (e.permit && findRouter.basename !== prefix) {
e = __assign(__assign({}, e), { permit: false, element: (0, jsx_runtime_1.jsx)(react_router_dom_1.Navigate, { to: "/" + (findRouter === null || findRouter === void 0 ? void 0 : findRouter.authPath) || "" }) });
}
// permit with prefix
else if (e.permit) {
e = __assign(__assign({}, e), { permit: false, element: (0, jsx_runtime_1.jsx)(react_router_dom_1.Navigate, { to: "/" + prefix + "/" + (findRouter === null || findRouter === void 0 ? void 0 : findRouter.authPath) || "" }) });
}
return e;
});
}
// add prefix with basename prefix
if (prefix === findRouter.basename) {
result = addingPrefix(result, prefix);
}
// filter with level
if (levelOrLevel && typeof levelOrLevel === "function") {
result = filterLevelOrRole(result, levelOrLevel);
}
return { routers: result, layout: findRouter.layout };
}
function getBaseRouterWithPrefix(prefix, routers) {
var find = routers.find(function (e) { return (e === null || e === void 0 ? void 0 : e.basename) === prefix; });
// default with index
if (!find)
find = routers.find(function (e) { return e === null || e === void 0 ? void 0 : e.index; });
// create warning when not found
if (!find)
console.warn("routers basename ".concat(prefix, " not found will be define with index prop"));
return find;
}
function addingPrefix(router, prefix) {
var result = [];
for (var i = 0; i < router.length; i++) {
var route = router[i];
// add prefix if router path match with basename
if (prefix) {
if (route.index) {
var index = route.index, less = __rest(route, ["index"]);
route = __assign(__assign({}, less), { path: prefix });
}
else {
if (route.path === "*")
route = __assign(__assign({}, route), { path: "*" });
else
route = __assign(__assign({}, route), { path: prefix + ((route === null || route === void 0 ? void 0 : route.path) ? "/" + route.path : "") });
}
}
result.push(route);
}
return result;
}
//# sourceMappingURL=permitRouter.js.map