amis
Version:
一种MIS页面生成工具
241 lines (240 loc) • 13.2 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var react_1 = tslib_1.__importDefault(require("react"));
var classnames_1 = tslib_1.__importDefault(require("classnames"));
var Tree_1 = tslib_1.__importDefault(require("../../components/Tree"));
var Options_1 = require("./Options");
var helper_1 = require("../../utils/helper");
var types_1 = require("../../types");
var api_1 = require("../../utils/api");
var tpl_1 = require("../../utils/tpl");
var Checkboxes_1 = require("../../components/Checkboxes");
var components_1 = require("../../components");
var TreeControl = /** @class */ (function (_super) {
tslib_1.__extends(TreeControl, _super);
function TreeControl() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.state = {
isAddModalOpened: false,
isEditModalOpened: false,
parent: null,
prev: null,
data: null
};
return _this;
}
TreeControl.prototype.reload = function () {
var reload = this.props.reloadOptions;
reload && reload();
};
TreeControl.prototype.handleAdd = function (values) {
this.saveRemote(values, 'add');
};
TreeControl.prototype.handleAddModalConfirm = function (values, action, ctx, components) {
this.saveRemote(tslib_1.__assign(tslib_1.__assign({}, values), { parent: this.state.parent }), 'add');
this.closeAddDialog();
};
TreeControl.prototype.handleEdit = function (values) {
this.saveRemote(values, 'edit');
};
TreeControl.prototype.handleEditModalConfirm = function (values, action, ctx, components) {
this.saveRemote(tslib_1.__assign(tslib_1.__assign({}, values), { prev: this.state.prev }), 'edit');
this.closeEditDialog();
};
TreeControl.prototype.saveRemote = function (item, type) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _a, addApi, editApi, data, env, remote;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = this.props, addApi = _a.addApi, editApi = _a.editApi, data = _a.data, env = _a.env;
remote = null;
if (!(type == 'add' && api_1.isEffectiveApi(addApi, helper_1.createObject(data, item)))) return [3 /*break*/, 2];
return [4 /*yield*/, env.fetcher(addApi, helper_1.createObject(data, item))];
case 1:
remote = _b.sent();
return [3 /*break*/, 4];
case 2:
if (!(type == 'edit' && api_1.isEffectiveApi(editApi, helper_1.createObject(data, item)))) return [3 /*break*/, 4];
return [4 /*yield*/, env.fetcher(editApi, helper_1.createObject(data, item))];
case 3:
remote = _b.sent();
_b.label = 4;
case 4:
if (remote && !remote.ok) {
env.notify('error', remote.msg || '保存失败');
return [2 /*return*/];
}
this.reload();
return [2 /*return*/];
}
});
});
};
TreeControl.prototype.handleRemove = function (item) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _a, deleteConfirmText, deleteApi, data, env, ctx, confirmed, result;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = this.props, deleteConfirmText = _a.deleteConfirmText, deleteApi = _a.deleteApi, data = _a.data, env = _a.env;
ctx = helper_1.createObject(data, item);
if (!api_1.isEffectiveApi(deleteApi, ctx)) return [3 /*break*/, 3];
return [4 /*yield*/, env.confirm(deleteConfirmText ? tpl_1.filter(deleteConfirmText, ctx) : '确认要删除?')];
case 1:
confirmed = _b.sent();
if (!confirmed) {
return [2 /*return*/];
}
return [4 /*yield*/, env.fetcher(deleteApi, ctx)];
case 2:
result = _b.sent();
if (!result.ok) {
env.notify('error', result.msg || '删除失败');
return [2 /*return*/];
}
this.reload();
_b.label = 3;
case 3: return [2 /*return*/];
}
});
});
};
TreeControl.prototype.openAddDialog = function (parent) {
var data = this.props.data;
this.setState({
isAddModalOpened: true,
data: helper_1.createObject(data, parent ? parent : {}),
parent: parent
});
};
TreeControl.prototype.closeAddDialog = function () {
this.setState({
isAddModalOpened: false,
parent: null
});
};
TreeControl.prototype.openEditDialog = function (prev) {
var data = this.props.data;
this.setState({
isEditModalOpened: true,
data: helper_1.createObject(data, prev),
prev: prev
});
};
TreeControl.prototype.closeEditDialog = function () {
this.setState({
isEditModalOpened: false,
prev: null
});
};
TreeControl.prototype.render = function () {
var _a = this.props, className = _a.className, ns = _a.classPrefix, value = _a.value, onChange = _a.onChange, disabled = _a.disabled, joinValues = _a.joinValues, extractValue = _a.extractValue, delimiter = _a.delimiter, placeholder = _a.placeholder, options = _a.options, inline = _a.inline, multiple = _a.multiple, valueField = _a.valueField, initiallyOpen = _a.initiallyOpen, unfoldedLevel = _a.unfoldedLevel, withChildren = _a.withChildren, onlyChildren = _a.onlyChildren, loading = _a.loading, hideRoot = _a.hideRoot, rootLabel = _a.rootLabel, cascade = _a.cascade, rootValue = _a.rootValue, showIcon = _a.showIcon, showRadio = _a.showRadio, render = _a.render, addMode = _a.addMode, addApi = _a.addApi, addDialog = _a.addDialog, editMode = _a.editMode, editApi = _a.editApi, editDialog = _a.editDialog, deleteApi = _a.deleteApi;
var data = this.state.data;
return (react_1.default.createElement("div", { className: classnames_1.default(ns + "TreeControl", className) },
react_1.default.createElement(components_1.Spinner, { size: "sm", key: "info", show: loading }),
loading ? null : (react_1.default.createElement(Tree_1.default, { classPrefix: ns, valueField: valueField, disabled: disabled, onChange: onChange, joinValues: joinValues, extractValue: extractValue, delimiter: delimiter, placeholder: placeholder, data: options, multiple: multiple, initiallyOpen: initiallyOpen, unfoldedLevel: unfoldedLevel, withChildren: withChildren, onlyChildren: onlyChildren, hideRoot: hideRoot, rootLabel: rootLabel, rootValue: rootValue, showIcon: showIcon, showRadio: showRadio, cascade: cascade, foldedField: "collapsed", value: value || '', nameField: "label", selfDisabledAffectChildren: false, addMode: addMode, addable: api_1.isEffectiveApi(addApi), onAdd: this.handleAdd, openAddDialog: this.openAddDialog, editMode: editMode, editable: api_1.isEffectiveApi(editApi), onEdit: this.handleEdit, openEditDialog: this.openEditDialog, onRemove: this.handleRemove, removable: api_1.isEffectiveApi(deleteApi) })),
addMode &&
render('modal', tslib_1.__assign({ type: 'dialog' }, addDialog), {
key: 'addModal',
data: data,
onConfirm: this.handleAddModalConfirm,
onClose: this.closeAddDialog,
show: this.state.isAddModalOpened
}),
editMode &&
render('modal', tslib_1.__assign({ type: 'dialog' }, editDialog), {
key: 'editModal',
data: data,
onConfirm: this.handleEditModalConfirm,
onClose: this.closeEditDialog,
show: this.state.isEditModalOpened
})));
};
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
TreeControl.defaultProps = {
placeholder: '选项加载中...',
multiple: false,
hideRoot: false,
rootLabel: '顶级',
rootValue: '',
showIcon: true
};
tslib_1.__decorate([
helper_1.autobind,
tslib_1.__metadata("design:type", Function),
tslib_1.__metadata("design:paramtypes", [typeof (_a = typeof types_1.PlainObject !== "undefined" && types_1.PlainObject) === "function" ? _a : Object]),
tslib_1.__metadata("design:returntype", void 0)
], TreeControl.prototype, "handleAdd", null);
tslib_1.__decorate([
helper_1.autobind,
tslib_1.__metadata("design:type", Function),
tslib_1.__metadata("design:paramtypes", [typeof (_b = typeof Array !== "undefined" && Array) === "function" ? _b : Object, typeof (_c = typeof types_1.Action !== "undefined" && types_1.Action) === "function" ? _c : Object, Object, typeof (_d = typeof Array !== "undefined" && Array) === "function" ? _d : Object]),
tslib_1.__metadata("design:returntype", void 0)
], TreeControl.prototype, "handleAddModalConfirm", null);
tslib_1.__decorate([
helper_1.autobind,
tslib_1.__metadata("design:type", Function),
tslib_1.__metadata("design:paramtypes", [typeof (_e = typeof types_1.PlainObject !== "undefined" && types_1.PlainObject) === "function" ? _e : Object]),
tslib_1.__metadata("design:returntype", void 0)
], TreeControl.prototype, "handleEdit", null);
tslib_1.__decorate([
helper_1.autobind,
tslib_1.__metadata("design:type", Function),
tslib_1.__metadata("design:paramtypes", [typeof (_f = typeof Array !== "undefined" && Array) === "function" ? _f : Object, typeof (_g = typeof types_1.Action !== "undefined" && types_1.Action) === "function" ? _g : Object, Object, typeof (_h = typeof Array !== "undefined" && Array) === "function" ? _h : Object]),
tslib_1.__metadata("design:returntype", void 0)
], TreeControl.prototype, "handleEditModalConfirm", null);
tslib_1.__decorate([
helper_1.autobind,
tslib_1.__metadata("design:type", Function),
tslib_1.__metadata("design:paramtypes", [Object, String]),
tslib_1.__metadata("design:returntype", Promise)
], TreeControl.prototype, "saveRemote", null);
tslib_1.__decorate([
helper_1.autobind,
tslib_1.__metadata("design:type", Function),
tslib_1.__metadata("design:paramtypes", [Object]),
tslib_1.__metadata("design:returntype", Promise)
], TreeControl.prototype, "handleRemove", null);
tslib_1.__decorate([
helper_1.autobind,
tslib_1.__metadata("design:type", Function),
tslib_1.__metadata("design:paramtypes", [typeof (_j = typeof Checkboxes_1.Option !== "undefined" && Checkboxes_1.Option) === "function" ? _j : Object]),
tslib_1.__metadata("design:returntype", void 0)
], TreeControl.prototype, "openAddDialog", null);
tslib_1.__decorate([
helper_1.autobind,
tslib_1.__metadata("design:type", Function),
tslib_1.__metadata("design:paramtypes", []),
tslib_1.__metadata("design:returntype", void 0)
], TreeControl.prototype, "closeAddDialog", null);
tslib_1.__decorate([
helper_1.autobind,
tslib_1.__metadata("design:type", Function),
tslib_1.__metadata("design:paramtypes", [typeof (_k = typeof Checkboxes_1.Option !== "undefined" && Checkboxes_1.Option) === "function" ? _k : Object]),
tslib_1.__metadata("design:returntype", void 0)
], TreeControl.prototype, "openEditDialog", null);
tslib_1.__decorate([
helper_1.autobind,
tslib_1.__metadata("design:type", Function),
tslib_1.__metadata("design:paramtypes", []),
tslib_1.__metadata("design:returntype", void 0)
], TreeControl.prototype, "closeEditDialog", null);
return TreeControl;
}(react_1.default.Component));
exports.default = TreeControl;
var TreeControlRenderer = /** @class */ (function (_super) {
tslib_1.__extends(TreeControlRenderer, _super);
function TreeControlRenderer() {
return _super !== null && _super.apply(this, arguments) || this;
}
TreeControlRenderer = tslib_1.__decorate([
Options_1.OptionsControl({
type: 'tree'
})
], TreeControlRenderer);
return TreeControlRenderer;
}(TreeControl));
exports.TreeControlRenderer = TreeControlRenderer;
//# sourceMappingURL=./renderers/Form/Tree.js.map