fastlion-amis
Version:
一种MIS页面生成工具
200 lines (199 loc) • 11.6 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.AppRenderer = void 0;
var tslib_1 = require("tslib");
var react_1 = (0, tslib_1.__importDefault)(require("react"));
var components_1 = require("../components");
var Layout_1 = (0, tslib_1.__importDefault)(require("../components/Layout"));
var factory_1 = require("../factory");
var Scoped_1 = require("../Scoped");
var app_1 = require("../store/app");
var api_1 = require("../utils/api");
var helper_1 = require("../utils/helper");
var icon_1 = require("../utils/icon");
var App = /** @class */ (function (_super) {
(0, tslib_1.__extends)(App, _super);
function App(props) {
var _this = _super.call(this, props) || this;
var store = props.store;
store.syncProps(props, undefined, ['pages']);
store.updateActivePage(props.env);
if (props.env.watchRouteChange) {
_this.unWatchRouteChange = props.env.watchRouteChange(function () {
return store.updateActivePage(props.env);
});
}
return _this;
}
App.prototype.componentDidMount = function () {
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
return (0, tslib_1.__generator)(this, function (_a) {
localStorage.setItem('submitCount', ''); // 设置一下count的初始值
this.reload();
return [2 /*return*/];
});
});
};
App.prototype.componentDidUpdate = function (prevProps) {
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
var props, store;
return (0, tslib_1.__generator)(this, function (_a) {
props = this.props;
store = props.store;
store.syncProps(props, prevProps, ['pages']);
if ((0, api_1.isApiOutdated)(prevProps.api, props.api, prevProps.data, props.data)) {
this.reload();
}
else if (props.location && props.location !== prevProps.location) {
store.updateActivePage(props.env);
}
return [2 /*return*/];
});
});
};
App.prototype.componentWillUnmount = function () {
var _a;
(_a = this.unWatchRouteChange) === null || _a === void 0 ? void 0 : _a.call(this);
};
App.prototype.reload = function (subpath, query, ctx, silent) {
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
var _a, api, store, env, json;
return (0, tslib_1.__generator)(this, function (_b) {
switch (_b.label) {
case 0:
if (query) {
return [2 /*return*/, this.receive(query)];
}
_a = this.props, api = _a.api, store = _a.store, env = _a.env;
if (!(0, api_1.isEffectiveApi)(api, store.data)) return [3 /*break*/, 2];
return [4 /*yield*/, store.fetchInitData(api, store.data, {})];
case 1:
json = _b.sent();
if (json === null || json === void 0 ? void 0 : json.data.pages) {
store.setPages(json.data.pages);
store.updateActivePage(env);
}
_b.label = 2;
case 2: return [2 /*return*/];
}
});
});
};
App.prototype.receive = function (values) {
var store = this.props.store;
store.updateData(values);
this.reload();
};
App.prototype.handleNavClick = function (e) {
e.preventDefault();
var env = this.props.env;
var link = e.currentTarget.getAttribute('href');
env.jumpTo(link);
};
App.prototype.renderHeader = function () {
var _a = this.props, cx = _a.classnames, brandName = _a.brandName, header = _a.header, render = _a.render, store = _a.store, logo = _a.logo;
return (react_1.default.createElement(react_1.default.Fragment, null,
react_1.default.createElement("div", { className: cx('Layout-brandBar') },
react_1.default.createElement("div", { onClick: store.toggleOffScreen, className: cx('Layout-offScreenBtn') },
react_1.default.createElement("i", { className: "bui-icon iconfont icon-collapse" })),
react_1.default.createElement("div", { className: cx('Layout-brand') },
logo && ~logo.indexOf('<svg') ? (react_1.default.createElement(components_1.Html, { className: cx('AppLogo-html'), html: logo })) : logo ? (react_1.default.createElement("img", { className: cx('AppLogo'), src: logo })) : null,
react_1.default.createElement("span", { className: "hidden-folded m-l-sm" }, brandName))),
react_1.default.createElement("div", { className: cx('Layout-headerBar') },
react_1.default.createElement("a", { onClick: store.toggleFolded, type: "button", className: cx('AppFoldBtn') },
react_1.default.createElement("i", { className: "fa fa-" + (store.folded ? 'indent' : 'dedent') + " fa-fw" })),
header ? render('header', header) : null)));
};
App.prototype.renderAside = function () {
var _this = this;
var _a = this.props, store = _a.store, env = _a.env, asideBefore = _a.asideBefore, asideAfter = _a.asideAfter, render = _a.render;
return (react_1.default.createElement(react_1.default.Fragment, null,
asideBefore ? render('aside-before', asideBefore) : null,
react_1.default.createElement(components_1.AsideNav, { navigations: store.navigations, renderLink: function (_a, key) {
var link = _a.link, active = _a.active, toggleExpand = _a.toggleExpand, cx = _a.classnames, depth = _a.depth, subHeader = _a.subHeader;
var children = [];
if ((link === null || link === void 0 ? void 0 : link.visible) === false) {
return null;
}
if (!subHeader && link.children && link.children.length) {
children.push(react_1.default.createElement("span", { key: "expand-toggle", className: cx('AsideNav-itemArrow'), onClick: function (e) { return toggleExpand(link, e); } }));
}
link.badge &&
children.push(react_1.default.createElement("b", { key: "badge", className: cx("AsideNav-itemBadge", link.badgeClassName || 'bg-info') }, link.badge));
if (!subHeader && link.icon) {
children.push((0, icon_1.generateIcon)(cx, link.icon, 'AsideNav-itemIcon'));
}
else if (store.folded && depth === 1 && !subHeader) {
children.push(react_1.default.createElement("i", { key: "icon", className: cx("AsideNav-itemIcon", link.children ? 'fa fa-folder' : 'fa fa-info') }));
}
children.push(react_1.default.createElement("span", { className: cx('AsideNav-itemLabel'), key: "label" }, link.label));
return link.path ? (/^https?\:/.test(link.path) ? (react_1.default.createElement("a", { target: "_blank", href: link.path, rel: "noopener" }, children)) : (react_1.default.createElement("a", { onClick: _this.handleNavClick, href: link.path || (link.children && link.children[0].path) }, children))) : (react_1.default.createElement("a", { onClick: link.children ? function () { return toggleExpand(link); } : undefined }, children));
}, isActive: function (link) { return !!env.isCurrentUrl(link === null || link === void 0 ? void 0 : link.path, link); } }),
asideAfter ? render('aside-before', asideAfter) : null));
};
App.prototype.renderFooter = function () {
var _a = this.props, render = _a.render, footer = _a.footer;
return footer ? render('footer', footer) : null;
};
App.prototype.render = function () {
var _this = this;
var _a;
var _b = this.props, className = _b.className, size = _b.size, cx = _b.classnames, store = _b.store, render = _b.render;
return (react_1.default.createElement(Layout_1.default, { header: this.renderHeader(), aside: this.renderAside(), footer: this.renderFooter(), folded: store.folded, offScreen: store.offScreen },
store.activePage && store.schema ? (react_1.default.createElement(react_1.default.Fragment, null,
store.bcn.length ? (react_1.default.createElement("ul", { className: cx('AppBcn') }, store.bcn.map(function (item, index) {
return (react_1.default.createElement("li", { key: index, className: cx('AppBcn-item') }, item.path ? (react_1.default.createElement("a", { href: item.path, onClick: _this.handleNavClick }, item.label)) : (item.label)));
}))) : null,
render('page', store.schema, {
key: ((_a = store.activePage) === null || _a === void 0 ? void 0 : _a.id) + "-" + store.schemaKey,
data: store.pageData
}))) : store.pages && !store.activePage ? (react_1.default.createElement(components_1.NotFound, null,
react_1.default.createElement("div", { className: "text-center" }, "\u9875\u9762\u4E0D\u5B58\u5728"))) : null,
react_1.default.createElement(components_1.Spinner, { overlay: true, show: store.loading || !store.pages, size: "lg" })));
};
var _a;
App.propsList = [
'brandName',
'logo',
'header',
'asideBefore',
'asideAfter',
'pages',
'footer'
];
App.defaultProps = {};
(0, tslib_1.__decorate)([
helper_1.autobind,
(0, tslib_1.__metadata)("design:type", Function),
(0, tslib_1.__metadata)("design:paramtypes", [typeof (_a = typeof react_1.default !== "undefined" && react_1.default.MouseEvent) === "function" ? _a : Object]),
(0, tslib_1.__metadata)("design:returntype", void 0)
], App.prototype, "handleNavClick", null);
return App;
}(react_1.default.Component));
exports.default = App;
var AppRenderer = /** @class */ (function (_super) {
(0, tslib_1.__extends)(AppRenderer, _super);
function AppRenderer(props, context) {
var _this = _super.call(this, props) || this;
var scoped = context;
scoped.registerComponent(_this);
return _this;
}
AppRenderer.prototype.componentWillUnmount = function () {
var scoped = this.context;
scoped.unRegisterComponent(this);
_super.prototype.componentWillUnmount.call(this);
};
var _b;
AppRenderer.contextType = Scoped_1.ScopedContext;
AppRenderer = (0, tslib_1.__decorate)([
(0, factory_1.Renderer)({
type: 'app',
storeType: app_1.AppStore.name
}),
(0, tslib_1.__metadata)("design:paramtypes", [Object, typeof (_b = typeof Scoped_1.IScopedContext !== "undefined" && Scoped_1.IScopedContext) === "function" ? _b : Object])
], AppRenderer);
return AppRenderer;
}(App));
exports.AppRenderer = AppRenderer;
//# sourceMappingURL=./renderers/App.js.map