UNPKG

amis

Version:

一种MIS页面生成工具

178 lines (177 loc) 8.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SubFormControlRenderer = void 0; var tslib_1 = require("tslib"); var react_1 = tslib_1.__importDefault(require("react")); var Item_1 = require("./Item"); var classnames_1 = tslib_1.__importDefault(require("classnames")); var omit_1 = tslib_1.__importDefault(require("lodash/omit")); var pick_1 = tslib_1.__importDefault(require("lodash/pick")); var helper_1 = require("../../utils/helper"); var icons_1 = require("../../components/icons"); var dom; var stripTag = function (value) { if (!value) { return value; } dom = dom || document.createElement('div'); dom.innerHTML = value; return dom.innerText; }; var SubFormControl = /** @class */ (function (_super) { tslib_1.__extends(SubFormControl, _super); function SubFormControl(props) { var _this = _super.call(this, props) || this; _this.state = { openedIndex: -1, optionIndex: -1 }; _this.addItem = _this.addItem.bind(_this); _this.removeItem = _this.removeItem.bind(_this); _this.open = _this.open.bind(_this); _this.close = _this.close.bind(_this); _this.handleDialogConfirm = _this.handleDialogConfirm.bind(_this); return _this; } SubFormControl.prototype.addItem = function () { var value = this.props.value; if (!Array.isArray(value)) { value = []; } else { value = value.concat(); } value.push({}); this.props.onChange(value); }; SubFormControl.prototype.removeItem = function (key, e) { e.stopPropagation(); e.preventDefault(); var value = this.props.value; if (!Array.isArray(value)) { return; } value = value.concat(); value.splice(key, 1); this.props.onChange(value); }; SubFormControl.prototype.open = function (index) { if (index === void 0) { index = 0; } this.setState({ openedIndex: index }); }; SubFormControl.prototype.close = function () { this.setState({ openedIndex: -1 }); }; SubFormControl.prototype.handleDialogConfirm = function (values) { var _a = this.props, multiple = _a.multiple, onChange = _a.onChange, value = _a.value; if (multiple) { var newValue = Array.isArray(value) ? value.concat() : []; newValue[this.state.openedIndex] = tslib_1.__assign(tslib_1.__assign({}, newValue[this.state.openedIndex]), values[0]); onChange(newValue); } else { onChange(tslib_1.__assign(tslib_1.__assign({}, value), values[0])); } this.close(); }; SubFormControl.prototype.buildDialogSchema = function () { var form = this.props.form; var dialogProps = [ 'title', 'actions', 'name', 'size', 'closeOnEsc', 'showCloseButton', 'bodyClassName', 'type' ]; return tslib_1.__assign(tslib_1.__assign({}, pick_1.default(form, dialogProps)), { type: 'dialog', body: tslib_1.__assign({ type: 'form' }, omit_1.default(form, dialogProps)) }); }; SubFormControl.prototype.renderMultipe = function () { var _this = this; var _a = this.props, ns = _a.classPrefix, addButtonClassName = _a.addButtonClassName, editButtonClassName = _a.editButtonClassName, disabled = _a.disabled, labelField = _a.labelField, value = _a.value, btnLabel = _a.btnLabel, render = _a.render, data = _a.data, __ = _a.translate; return [ react_1.default.createElement("div", { className: ns + "SubForm-values", key: "values" }, Array.isArray(value) ? value.map(function (value, key) { return (react_1.default.createElement("div", { className: classnames_1.default(ns + "SubForm-value", { 'is-disabled': disabled }, editButtonClassName), key: key }, react_1.default.createElement("span", { "data-tooltip": __('delete'), "data-position": "bottom", className: ns + "Select-valueIcon", onClick: _this.removeItem.bind(_this, key) }, "\u00D7"), react_1.default.createElement("span", { onClick: _this.open.bind(_this, key), className: ns + "SubForm-valueLabel", "data-tooltip": __('SubForm.editDetail'), "data-position": "bottom" }, (value && labelField && value[labelField] && stripTag(value[labelField])) || render('label', { type: 'tpl', tpl: __(btnLabel) }, { data: helper_1.createObject(data, value) })))); }) : null), react_1.default.createElement("button", { key: "add", type: "button", onClick: this.addItem, className: classnames_1.default(ns + "Button " + ns + "SubForm-addBtn", addButtonClassName), disabled: disabled, "data-tooltip": __('Combo.add') }, react_1.default.createElement(icons_1.Icon, { icon: "plus", className: "icon" }), react_1.default.createElement("span", null, __('Combo.add'))) ]; }; SubFormControl.prototype.renderSingle = function () { var _a = this.props, ns = _a.classPrefix, btnClassName = _a.btnClassName, disabled = _a.disabled, value = _a.value, labelField = _a.labelField, btnLabel = _a.btnLabel, render = _a.render, data = _a.data, __ = _a.translate; return (react_1.default.createElement("div", { className: ns + "SubForm-values", key: "values" }, react_1.default.createElement("div", { className: classnames_1.default(ns + "SubForm-value", { 'is-disabled': disabled }, btnClassName), onClick: this.open.bind(this, 0), "data-tooltip": __('SubForm.editDetail'), "data-position": "bottom" }, react_1.default.createElement("span", { className: ns + "SubForm-valueLabel" }, (value && labelField && value[labelField] && stripTag(value[labelField])) || render('label', { type: 'tpl', tpl: __(btnLabel) }, { data: helper_1.createObject(data, value) }))))); }; SubFormControl.prototype.render = function () { var _a = this.props, multiple = _a.multiple, ns = _a.classPrefix, className = _a.className, render = _a.render, value = _a.value, data = _a.data; var openedIndex = this.state.openedIndex; return (react_1.default.createElement("div", { className: classnames_1.default(ns + "SubFormControl", className) }, multiple ? this.renderMultipe() : this.renderSingle(), render("dalog/" + openedIndex, this.buildDialogSchema(), { show: openedIndex !== -1, onClose: this.close, onConfirm: this.handleDialogConfirm, data: helper_1.createObject(data, (multiple ? Array.isArray(value) && value[openedIndex] : value) || {}) }))); }; SubFormControl.defaultProps = { minLength: 0, maxLength: 0, multiple: false, btnClassName: '', addButtonClassName: '', editButtonClassName: '', labelField: 'label', btnLabel: 'SubForm.button' }; return SubFormControl; }(react_1.default.PureComponent)); exports.default = SubFormControl; var SubFormControlRenderer = /** @class */ (function (_super) { tslib_1.__extends(SubFormControlRenderer, _super); function SubFormControlRenderer() { return _super !== null && _super.apply(this, arguments) || this; } SubFormControlRenderer = tslib_1.__decorate([ Item_1.FormItem({ type: 'form', sizeMutable: false }) ], SubFormControlRenderer); return SubFormControlRenderer; }(SubFormControl)); exports.SubFormControlRenderer = SubFormControlRenderer; //# sourceMappingURL=./renderers/Form/SubForm.js.map