fastlion-amis
Version:
一种MIS页面生成工具
251 lines (250 loc) • 13.4 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RootRenderer = void 0;
var tslib_1 = require("tslib");
var mobx_react_1 = require("mobx-react");
var react_1 = (0, tslib_1.__importDefault)(require("react"));
var Alert2_1 = (0, tslib_1.__importDefault)(require("./components/Alert2"));
var Root_1 = require("./Root");
var Scoped_1 = require("./Scoped");
var root_1 = require("./store/root");
var helper_1 = require("./utils/helper");
var tpl_1 = require("./utils/tpl");
var qs_1 = (0, tslib_1.__importDefault)(require("qs"));
var pick_1 = (0, tslib_1.__importDefault)(require("lodash/pick"));
var mapValues_1 = (0, tslib_1.__importDefault)(require("lodash/mapValues"));
var RootRenderer = /** @class */ (function (_super) {
(0, tslib_1.__extends)(RootRenderer, _super);
function RootRenderer(props) {
var _this = _super.call(this, props) || this;
_this.store = props.rootStore.addStore({
id: (0, helper_1.guid)(),
path: _this.props.$path,
storeType: root_1.RootStore.name,
parentId: ''
});
_this.store.initData(props.data);
_this.store.updateLocation(props.location);
(0, helper_1.bulkBindFunctions)(_this, [
'handleAction',
'handleDialogConfirm',
'handleDialogClose',
'handleDrawerConfirm',
'handleDrawerClose',
'handlePageVisibilityChange'
]);
return _this;
}
RootRenderer.prototype.componentDidMount = function () {
document.addEventListener('visibilitychange', this.handlePageVisibilityChange);
};
RootRenderer.prototype.componentDidUpdate = function (prevProps) {
var props = this.props;
if (props.data !== prevProps.data) {
this.store.initData(props.data);
}
if (props.location !== prevProps.location) {
this.store.updateLocation(props.location);
}
};
RootRenderer.prototype.componentDidCatch = function (error, errorInfo) {
this.store.setRuntimeError(error, errorInfo);
};
RootRenderer.prototype.componentWillUnmount = function () {
this.props.rootStore.removeStore(this.store);
document.removeEventListener('visibilitychange', this.handlePageVisibilityChange);
};
RootRenderer.prototype.handlePageVisibilityChange = function () {
var env = this.props.env;
if (document.visibilityState === 'hidden') {
env === null || env === void 0 ? void 0 : env.tracker({
eventType: 'pageHidden'
});
}
else if (document.visibilityState === 'visible') {
env === null || env === void 0 ? void 0 : env.tracker({
eventType: 'pageVisible'
});
}
};
RootRenderer.prototype.handleAction = function (e, action, ctx, throwErrors, delegate) {
if (throwErrors === void 0) { throwErrors = false; }
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
var _a, env, messages, onAction, store, onActionRes, scoped, mailTo, mailInfo, mailStr, mailto;
var _this = this;
return (0, tslib_1.__generator)(this, function (_b) {
switch (_b.label) {
case 0:
_a = this.props, env = _a.env, messages = _a.messages, onAction = _a.onAction;
store = this.store;
return [4 /*yield*/, (onAction === null || onAction === void 0 ? void 0 : onAction(e, action, ctx, throwErrors, delegate || this.context))];
case 1:
onActionRes = _b.sent();
if (onActionRes === false) {
return [2 /*return*/];
}
scoped = delegate || this.context;
if (action.actionType === 'reload') {
action.target && scoped.reload(action.target, ctx);
}
else if (action.target) {
action.target.split(',').forEach(function (name) {
var target = scoped.getComponentByName(name);
target &&
target.doAction &&
target.doAction((0, tslib_1.__assign)((0, tslib_1.__assign)({}, action), { target: undefined }), ctx);
});
}
else if (action.actionType === 'url' ||
action.actionType === 'link' ||
action.actionType === 'jump') {
if (!env || !env.jumpTo) {
throw new Error('env.jumpTo is required!');
}
env.jumpTo((0, tpl_1.filter)((action.to || action.url || action.link), ctx, '| raw'), action, ctx);
}
else if (action.actionType === 'email') {
mailTo = (0, tpl_1.filter)(action.to, ctx);
mailInfo = (0, mapValues_1.default)((0, pick_1.default)(action, 'to', 'cc', 'bcc', 'subject', 'body'), function (val) { return (0, tpl_1.filter)(val, ctx); });
mailStr = qs_1.default.stringify(mailInfo);
mailto = "mailto:" + mailTo + "?" + mailStr;
window.open(mailto);
}
else if (action.actionType === 'dialog') {
store.setCurrentAction(action);
store.openDialog(ctx);
}
else if (action.actionType === 'drawer') {
store.setCurrentAction(action);
store.openDrawer(ctx);
}
else if (action.actionType === 'ajax') {
store.setCurrentAction(action);
store
.saveRemote(action.api, ctx, {
successMessage: (action.messages && action.messages.success) ||
(messages && messages.saveSuccess),
errorMessage: (action.messages && action.messages.failed) ||
(messages && messages.saveSuccess)
})
.then(function (res) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () {
var data, redirect;
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0:
data = (0, helper_1.createObject)(ctx, res);
if (!(action.feedback && (0, helper_1.isVisible)(action.feedback, store.data))) return [3 /*break*/, 2];
return [4 /*yield*/, this.openFeedback(action.feedback, store.data)];
case 1:
_a.sent();
_a.label = 2;
case 2:
redirect = action.redirect && (0, tpl_1.filter)(action.redirect, store.data);
redirect && env.jumpTo(redirect, action);
action.reload &&
this.reloadTarget(delegate || this.context, action.reload, (0, tslib_1.__assign)((0, tslib_1.__assign)({}, store.data), ctx));
return [2 /*return*/];
}
});
}); })
.catch(function () { });
}
else if (action.actionType === 'copy' &&
(action.content || action.copy)) {
env.copy &&
env.copy((0, tpl_1.filter)(action.content || action.copy, ctx, '| raw'), {
format: action.copyFormat
});
}
return [2 /*return*/];
}
});
});
};
RootRenderer.prototype.handleDialogConfirm = function (values, action) {
var args = [];
for (var _i = 2; _i < arguments.length; _i++) {
args[_i - 2] = arguments[_i];
}
var store = this.store;
if (action.mergeData && values.length === 1 && values[0]) {
store.updateData(values[0]);
}
var dialog = store.action.dialog;
if (dialog &&
dialog.onConfirm &&
dialog.onConfirm.apply(dialog, (0, tslib_1.__spreadArray)([values, action], args, false)) === false) {
return;
}
store.closeDialog(true);
};
RootRenderer.prototype.handleDialogClose = function (confirmed) {
if (confirmed === void 0) { confirmed = false; }
var store = this.store;
store.closeDialog(confirmed);
};
RootRenderer.prototype.handleDrawerConfirm = function (values, action) {
var args = [];
for (var _i = 2; _i < arguments.length; _i++) {
args[_i - 2] = arguments[_i];
}
var store = this.store;
if (action.mergeData && values.length === 1 && values[0]) {
store.updateData(values[0]);
}
var dialog = store.action.dialog;
if (dialog &&
dialog.onConfirm &&
dialog.onConfirm.apply(dialog, (0, tslib_1.__spreadArray)([values, action], args, false)) === false) {
return;
}
store.closeDrawer();
};
RootRenderer.prototype.handleDrawerClose = function () {
var store = this.store;
store.closeDrawer();
};
RootRenderer.prototype.openFeedback = function (dialog, ctx) {
var _this = this;
return new Promise(function (resolve) {
var store = _this.store;
store.setCurrentAction({
type: 'button',
actionType: 'dialog',
dialog: dialog
});
store.openDialog(ctx, undefined, function (confirmed) {
resolve(confirmed);
});
});
};
RootRenderer.prototype.reloadTarget = function (scoped, target, data) {
scoped.reload(target, data);
};
RootRenderer.prototype.render = function () {
var _a;
var _b = this.props, pathPrefix = _b.pathPrefix, schema = _b.schema, rest = (0, tslib_1.__rest)(_b, ["pathPrefix", "schema"]);
var store = this.store;
if (store.runtimeError) {
return (react_1.default.createElement(Alert2_1.default, { level: "danger" },
react_1.default.createElement("h3", null, (_a = this.store.runtimeError) === null || _a === void 0 ? void 0 : _a.toString()),
react_1.default.createElement("pre", null,
react_1.default.createElement("code", null, this.store.runtimeErrorStack.componentStack))));
}
return (react_1.default.createElement(react_1.default.Fragment, null,
(0, Root_1.renderChild)(pathPrefix, schema, (0, tslib_1.__assign)((0, tslib_1.__assign)({}, rest), { data: this.store.downStream, onAction: this.handleAction })),
store.error ? (react_1.default.createElement(Alert2_1.default, { level: "danger", showCloseButton: true, onClose: store.clearMessage }, store.msg)) : null,
(0, Root_1.renderChild)('dialog', (0, tslib_1.__assign)((0, tslib_1.__assign)({}, (store.action &&
store.action.dialog)), { type: 'dialog' }), (0, tslib_1.__assign)((0, tslib_1.__assign)({}, rest), { key: 'dialog', data: store.dialogData, onConfirm: this.handleDialogConfirm, onClose: this.handleDialogClose, show: store.dialogOpen, onAction: this.handleAction })),
(0, Root_1.renderChild)('drawer', (0, tslib_1.__assign)((0, tslib_1.__assign)({}, (store.action &&
store.action.drawer)), { type: 'drawer' }), (0, tslib_1.__assign)((0, tslib_1.__assign)({}, rest), { key: 'drawer', data: store.drawerData, onConfirm: this.handleDrawerConfirm, onClose: this.handleDrawerClose, show: store.drawerOpen, onAction: this.handleAction }))));
};
RootRenderer.contextType = Scoped_1.ScopedContext;
RootRenderer = (0, tslib_1.__decorate)([
mobx_react_1.observer,
(0, tslib_1.__metadata)("design:paramtypes", [Object])
], RootRenderer);
return RootRenderer;
}(react_1.default.Component));
exports.RootRenderer = RootRenderer;
//# sourceMappingURL=./RootRenderer.js.map