UNPKG

@doreamonjs/gate

Version:
127 lines 5.89 kB
"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