UNPKG

@doreamonjs/gate

Version:
148 lines (147 loc) 6.74 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.version = void 0; const react_1 = __importStar(require("react")); const dva_1 = require("dva"); const doreamon_1 = __importDefault(require("@zodash/doreamon")); const utils = __importStar(require("./common/utils")); const antd_1 = require("antd"); const zh_CN_1 = __importDefault(require("antd/es/locale/zh_CN")); const components_1 = require("@doreamonjs/components"); const error_boundary_1 = __importDefault(require("./common/global/error-boundary")); const lockscreen_1 = __importDefault(require("./common/global/lockscreen")); const public_1 = __importDefault(require("./common/global/public")); const blank_1 = __importDefault(require("./kind/blank")); const header_1 = __importDefault(require("./kind/header")); const console_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; }