UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

182 lines (181 loc) 6.46 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AppStore = void 0; var tslib_1 = require("tslib"); var mobx_state_tree_1 = require("mobx-state-tree"); var helper_1 = require("../utils/helper"); var service_1 = require("./service"); exports.AppStore = service_1.ServiceStore.named('AppStore') .props({ pages: mobx_state_tree_1.types.frozen(), activePage: mobx_state_tree_1.types.frozen(), folded: false, offScreen: false }) .views(function (self) { return ({ get navigations() { if (Array.isArray(self.pages)) { return (0, helper_1.mapTree)(self.pages, function (item) { var visible = item.visible; if (visible !== false && item.path && !~item.path.indexOf('http') && ~item.path.indexOf(':')) { visible = false; } return { label: item.label, icon: item.icon, path: item.path, children: item.children, className: item.className, visible: visible }; }); } return [ { label: self.__('App.navigation'), children: [] } ]; }, get bcn() { var _a; return ((_a = self.activePage) === null || _a === void 0 ? void 0 : _a.bcn) || []; }, get pageData() { var _a; return (0, helper_1.createObject)(self.data, { params: ((_a = self.activePage) === null || _a === void 0 ? void 0 : _a.params) || {} }); } }); }) .actions(function (self) { return ({ toggleFolded: function () { self.folded = !self.folded; }, toggleOffScreen: function () { self.offScreen = !self.offScreen; }, setPages: function (pages) { if (pages && !Array.isArray(pages)) { pages = [pages]; } else if (!Array.isArray(pages)) { return; } pages = (0, helper_1.mapTree)(pages, function (item, index, level, paths) { var path = item.link || item.url; if (item.schema || item.schemaApi) { path = item.url || "/" + paths .map(function (item) { return item.index; }) .concat(index) .map(function (index) { return "page-" + (index + 1); }) .join('/'); if (path && path[0] !== '/') { var parentPath = '/'; var index_1 = paths.length; while (index_1 > 0) { var item_1 = paths[index_1 - 1]; if (item_1 === null || item_1 === void 0 ? void 0 : item_1.path) { parentPath = item_1.path + '/'; break; } index_1--; } path = parentPath + path; } } return (0, tslib_1.__assign)((0, tslib_1.__assign)({}, item), { index: index, id: item.id || (0, helper_1.guid)(), label: item.label, icon: item.icon, path: path }); }); self.pages = pages; }, rewrite: function (to, env) { var page = (0, helper_1.findTree)(self.pages, function (item) { if (item.path === to) { return true; } return false; }); if (page) { this.setActivePage(page, env); } }, setActivePage: function (page, env, params) { var _a; // 同一个页面直接返回。 if (((_a = self.activePage) === null || _a === void 0 ? void 0 : _a.id) === page.id) { return; } var bcn = []; (0, helper_1.findTree)(self.pages, function (item, index, level, paths) { if (item.id === page.id) { bcn = paths.filter(function (item) { return item.path && item.label; }); bcn.push((0, tslib_1.__assign)((0, tslib_1.__assign)({}, item), { path: '' })); self.__; if (bcn[0].path !== '/') { bcn.unshift({ label: self.__('App.home'), path: '/' }); } return true; } return false; }); self.activePage = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, page), { params: params || {}, bcn: bcn }); if (page.label) { document.title = page.label; } if (page.schema) { self.schema = page.schema; self.schemaKey = '' + Date.now(); } else if (page.schemaApi) { self.schema = null; self.fetchSchema(page.schemaApi, self.activePage, { method: 'get' }); } else if (page.redirect) { env.jumpTo(page.redirect); return; } else if (page.rewrite) { this.rewrite(page.rewrite, env); } else { self.schema = null; self.schemaKey = ''; } }, updateActivePage: function (env) { if (!Array.isArray(self.pages)) { return; } var matched; var page = (0, helper_1.findTree)(self.pages, function (item) { if (item.path) { matched = env.isCurrentUrl(item.path, item); if (matched) { return true; } } return false; }); if (page) { this.setActivePage(page, env, typeof matched === 'object' ? matched.params : undefined); } else { var page_1 = (0, helper_1.findTree)(self.pages, function (item) { return item.isDefaultPage; }); if (page_1) { this.setActivePage(page_1, env); } else { self.activePage = null; } } } }); }); //# sourceMappingURL=./store/app.js.map