@doreamonjs/gate
Version:
gate for doreamonjs
127 lines • 5.89 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.version = void 0;
const tslib_1 = require("tslib");
const react_1 = tslib_1.__importStar(require("react"));
const dva_1 = require("dva");
const doreamon_1 = tslib_1.__importDefault(require("@zodash/doreamon"));
const utils = tslib_1.__importStar(require("./common/utils"));
const antd_1 = require("antd");
const zh_CN_1 = tslib_1.__importDefault(require("antd/es/locale/zh_CN"));
const components_1 = require("@doreamonjs/components");
const error_boundary_1 = tslib_1.__importDefault(require("./common/global/error-boundary"));
const lockscreen_1 = tslib_1.__importDefault(require("./common/global/lockscreen"));
const public_1 = tslib_1.__importDefault(require("./common/global/public"));
const blank_1 = tslib_1.__importDefault(require("./kind/blank"));
const header_1 = tslib_1.__importDefault(require("./kind/header"));
const console_1 = tslib_1.__importDefault(require("./kind/console"));
exports.version = require('../package.json').version;
const Layout = (props) => {
react_1.useEffect(() => {
document.body.setAttribute('data-theme', props.theme);
return () => {
document.body.removeAttribute('data-theme');
};
}, [props.theme]);
if (props.loading) {
return (react_1.default.createElement(components_1.Loading.Cover, { style: {
zIndex: 1000,
background: '#fff', // '#f0f0f0',
}, loading: props.loading },
react_1.default.createElement("span", { style: { color: 'rgba(0, 0, 0, .65)', marginLeft: 10 } }, "\u7CFB\u7EDF\u8D44\u6E90\u52A0\u8F7D\u4E2D...")));
}
// show 403 instead of go 403 route
if (!props.isAllowedRoute) {
return react_1.default.createElement(components_1.Exception.NotAllowed, null);
}
if (props.isScreenLock) {
return (react_1.default.createElement(error_boundary_1.default, null,
react_1.default.createElement(public_1.default, null),
react_1.default.createElement(lockscreen_1.default, null)));
}
switch (props.layout) {
case 'blank':
return (react_1.default.createElement(error_boundary_1.default, null,
react_1.default.createElement(antd_1.ConfigProvider, { locale: zh_CN_1.default },
react_1.default.createElement(public_1.default, null),
react_1.default.createElement(blank_1.default, { ...props }))));
case 'header':
return (react_1.default.createElement(error_boundary_1.default, null,
react_1.default.createElement(antd_1.ConfigProvider, { locale: zh_CN_1.default },
react_1.default.createElement(public_1.default, null),
react_1.default.createElement(header_1.default, { ...props }))));
case 'console':
return (react_1.default.createElement(error_boundary_1.default, null,
react_1.default.createElement(antd_1.ConfigProvider, { locale: zh_CN_1.default },
react_1.default.createElement(public_1.default, null),
react_1.default.createElement(console_1.default, { ...props }))));
default:
return (react_1.default.createElement(error_boundary_1.default, null,
react_1.default.createElement(antd_1.ConfigProvider, { locale: zh_CN_1.default },
react_1.default.createElement(public_1.default, null),
react_1.default.createElement(console_1.default, { ...props }))));
}
};
const mapState = ({ router, functions, loading, applications, menus, screens, }) => {
// console.log('xxxx:', (window as any).g_app._store.getState());
// @TODO fix applications is undefined => models not loaded in Firefox
// applications is undefined
// menus is undefined
// screens is undefined
if (typeof applications === 'undefined' || typeof menus === 'undefined' || typeof screens === 'undefined') {
return {
loading: true,
};
}
return {
loading: !applications.loaded,
isScreenLock: screens.lock,
theme: applications.theme || 'unknown',
layout: getLayout(functions, applications.layout, menus.data, router.location.pathname),
isAllowedRoute: checkRoutePermission(applications.routerSecurityStrategy, menus.data, router.location.pathname),
};
};
exports.default = dva_1.connect(mapState)(Layout);
function getLayout(enables, globalLayout, menus, path) {
// @TODO For Compatible IFrame For Old System
// Use Browser Query
if (enables && enables['global.system.query.layout']) {
const { layout } = doreamon_1.default.qs.parse(window.location.search);
if (layout) {
return layout;
}
}
const _layout = match(globalLayout.rules, path);
if (_layout) {
return _layout;
}
const indexMenus = utils.getMenus('nest', menus).index;
const menu = indexMenus[path];
if (menu && menu.layout) {
return menu.layout;
}
return globalLayout.fallback;
}
function match(regularRecords, path) {
for (const regStr in regularRecords) {
if (new RegExp(regStr, 'i').test(path)) {
return regularRecords[regStr];
}
}
return null;
}
function checkRoutePermission(routerSecurityStrategy, menus, currentPath) {
// if routerSecurityStrategy disable, always allow all routes
if (!routerSecurityStrategy.enable)
return true;
// global white routes
if (routerSecurityStrategy.whiteRoutes.some((e) => currentPath.startsWith(e)))
return true;
// safe routes in menu
const indexMenus = utils.getMenus('nest', menus).index;
if (indexMenus[currentPath])
return true;
// not allow route path
return false;
}
//# sourceMappingURL=index.js.map