UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

705 lines (704 loc) 39.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.KVControlRenderer = exports.ComboControlRenderer = void 0; var tslib_1 = require("tslib"); var react_1 = (0, tslib_1.__importDefault)(require("react")); var react_dom_1 = require("react-dom"); var Item_1 = require("./Item"); var combo_1 = require("../../store/combo"); var Tabs_1 = tslib_1.__importStar(require("../../components/Tabs")); var helper_1 = require("../../utils/helper"); var sortablejs_1 = (0, tslib_1.__importDefault)(require("sortablejs")); var tpl_1 = require("../../utils/tpl"); var find_1 = (0, tslib_1.__importDefault)(require("lodash/find")); var Select_1 = (0, tslib_1.__importDefault)(require("../../components/Select")); var tpl_builtin_1 = require("../../utils/tpl-builtin"); var api_1 = require("../../utils/api"); var components_1 = require("../../components"); var memoize_1 = (0, tslib_1.__importDefault)(require("lodash/memoize")); var icons_1 = require("../../components/icons"); var mobx_state_tree_1 = require("mobx-state-tree"); function pickVars(vars, fields) { return fields.reduce(function (data, key) { data[key] = (0, tpl_builtin_1.resolveVariable)(key, vars); return data; }, {}); } var ComboControl = /** @class */ (function (_super) { (0, tslib_1.__extends)(ComboControl, _super); function ComboControl(props) { var _this = _super.call(this, props) || this; _this.subForms = []; _this.subFormDefaultValues = []; _this.keys = []; _this.toDispose = []; _this.id = (0, helper_1.guid)(); _this.refsMap = {}; _this.makeFormRef = (0, memoize_1.default)(function (index) { return function (ref) { return _this.formRef(ref, index); }; }); _this.memoizedFormatValue = (0, memoize_1.default)(function (strictMode, syncFields, value, index, data) { return (0, helper_1.createObject)((0, helper_1.extendObject)(data, (0, tslib_1.__assign)({ index: index, __index: index }, data)), (0, tslib_1.__assign)((0, tslib_1.__assign)({}, value), (Array.isArray(syncFields) ? pickVars(data, syncFields) : null))); }, function (strictMode, syncFields, value, index, data) { return Array.isArray(syncFields) ? JSON.stringify([value, index, data, pickVars(data, syncFields)]) : strictMode ? JSON.stringify([value, index]) : JSON.stringify([value, index, data]); }); _this.handleChange = _this.handleChange.bind(_this); _this.handleSingleFormChange = _this.handleSingleFormChange.bind(_this); _this.handleSingleFormInit = _this.handleSingleFormInit.bind(_this); _this.handleFormInit = _this.handleFormInit.bind(_this); _this.handleAction = _this.handleAction.bind(_this); _this.addItem = _this.addItem.bind(_this); _this.removeItem = _this.removeItem.bind(_this); _this.dragTipRef = _this.dragTipRef.bind(_this); _this.flush = _this.flush.bind(_this); _this.handleComboTypeChange = _this.handleComboTypeChange.bind(_this); _this.defaultValue = (0, tslib_1.__assign)({}, props.scaffold); var store = props.store, value = props.value, multiple = props.multiple, minLength = props.minLength, maxLength = props.maxLength, formItem = props.formItem, addHook = props.addHook; store.config({ multiple: multiple, minLength: minLength, maxLength: maxLength, length: _this.getValueAsArray(props).length }); formItem && (0, mobx_state_tree_1.isAlive)(formItem) && formItem.setSubStore(store); addHook && _this.toDispose.push(addHook(_this.flush, 'flush')); return _this; } ComboControl.prototype.componentDidUpdate = function (prevProps) { var props = this.props; if ((0, helper_1.anyChanged)(['minLength', 'maxLength', 'value'], prevProps, props)) { var store = props.store, minLength = props.minLength, maxLength = props.maxLength, multiple = props.multiple; var values_1 = this.getValueAsArray(props); store.config({ multiple: multiple, minLength: minLength, maxLength: maxLength, length: values_1.length }); if (store.activeKey >= values_1.length) { store.setActiveKey(Math.max(0, values_1.length - 1)); } // combo 进来了新的值,且这次 form 初始化时带来的新值变化,但是之前的值已经 onInit 过了 // 所以,之前 onInit 设置进去的初始值是过时了的。这个时候修复一下。 if (props.value !== prevProps.value && !prevProps.formInited && this.subFormDefaultValues.length) { this.subFormDefaultValues = this.subFormDefaultValues.map(function (item, index) { return (0, tslib_1.__assign)((0, tslib_1.__assign)({}, item), { values: values_1[index] }); }); } } }; ComboControl.prototype.componentWillUnmount = function () { var _a, _b, _c, _d; var formItem = this.props.formItem; formItem && (0, mobx_state_tree_1.isAlive)(formItem) && formItem.setSubStore(null); this.toDispose.forEach(function (fn) { return fn(); }); this.toDispose = []; (_b = (_a = this.memoizedFormatValue.cache).clear) === null || _b === void 0 ? void 0 : _b.call(_a); (_d = (_c = this.makeFormRef.cache).clear) === null || _d === void 0 ? void 0 : _d.call(_c); }; ComboControl.prototype.getValueAsArray = function (props) { if (props === void 0) { props = this.props; } var flat = props.flat, joinValues = props.joinValues, delimiter = props.delimiter; var value = props.value; if (joinValues && flat && typeof value === 'string') { value = value.split(delimiter || ','); } else if (!Array.isArray(value)) { value = []; } else { value = value.concat(); } return value; }; ComboControl.prototype.addItemWith = function (condition) { var _a = this.props, flat = _a.flat, joinValues = _a.joinValues, delimiter = _a.delimiter, scaffold = _a.scaffold, disabled = _a.disabled, submitOnChange = _a.submitOnChange; if (disabled) { return; } var value = this.getValueAsArray(); value.push(flat ? condition.scaffold || scaffold || '' : (0, tslib_1.__assign)({}, (condition.scaffold || scaffold))); this.keys.push((0, helper_1.guid)()); if (flat && joinValues) { value = value.join(delimiter || ','); } this.props.onChange(value, submitOnChange, true); }; ComboControl.prototype.addItem = function () { var _a = this.props, flat = _a.flat, joinValues = _a.joinValues, delimiter = _a.delimiter, scaffold = _a.scaffold, disabled = _a.disabled, submitOnChange = _a.submitOnChange; if (disabled) { return; } var value = this.getValueAsArray(); value.push(flat ? scaffold || '' : (0, tslib_1.__assign)({}, scaffold)); this.keys.push((0, helper_1.guid)()); if (flat && joinValues) { value = value.join(delimiter || ','); } this.props.onChange(value, submitOnChange, true); }; ComboControl.prototype.removeItem = function (key) { return (0, tslib_1.__awaiter)(this, void 0, void 0, function () { var _a, flat, joinValues, delimiter, disabled, deleteApi, deleteConfirmText, data, env, __, value, ctx, confirmed, result; return (0, tslib_1.__generator)(this, function (_b) { switch (_b.label) { case 0: _a = this.props, flat = _a.flat, joinValues = _a.joinValues, delimiter = _a.delimiter, disabled = _a.disabled, deleteApi = _a.deleteApi, deleteConfirmText = _a.deleteConfirmText, data = _a.data, env = _a.env, __ = _a.translate; if (disabled) { return [2 /*return*/]; } value = this.getValueAsArray(); ctx = (0, helper_1.createObject)(data, value[key]); if (!(0, api_1.isEffectiveApi)(deleteApi, ctx)) return [3 /*break*/, 3]; return [4 /*yield*/, env.confirm(deleteConfirmText ? (0, tpl_1.filter)(deleteConfirmText, ctx) : __('deleteConfirm'))]; 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', __('deleteFailed')); return [2 /*return*/]; } _b.label = 3; case 3: value.splice(key, 1); this.keys.splice(key, 1); if (flat && joinValues) { value = value.join(delimiter || ','); } this.props.onChange(value); return [2 /*return*/]; } }); }); }; ComboControl.prototype.handleChange = function (values, diff, _a) { var index = _a.index; var _b = this.props, flat = _b.flat, store = _b.store, joinValues = _b.joinValues, delimiter = _b.delimiter, disabled = _b.disabled, submitOnChange = _b.submitOnChange; if (disabled) { return; } var value = this.getValueAsArray(); value[index] = flat ? values.flat : (0, tslib_1.__assign)({}, values); if (flat && joinValues) { value = value.join(delimiter || ','); } this.props.onChange(value, submitOnChange, true); store.forms.forEach(function (form) { return (0, mobx_state_tree_1.isAlive)(form) && form.items.forEach(function (item) { return item.unique && item.syncOptions(undefined, form.data); }); }); }; ComboControl.prototype.handleSingleFormChange = function (values) { this.props.onChange((0, tslib_1.__assign)({}, values), this.props.submitOnChange, true); }; ComboControl.prototype.handleFormInit = function (values, _a) { var index = _a.index; var _b = this.props, syncDefaultValue = _b.syncDefaultValue, flat = _b.flat, joinValues = _b.joinValues, delimiter = _b.delimiter, formInited = _b.formInited, onChange = _b.onChange, submitOnChange = _b.submitOnChange, setPrinstineValue = _b.setPrinstineValue; this.subFormDefaultValues.push({ index: index, values: values, setted: false }); if (syncDefaultValue === false || this.subFormDefaultValues.length !== this.subForms.length) { return; } var value = this.getValueAsArray(); var isModified = false; this.subFormDefaultValues = this.subFormDefaultValues.map(function (_a) { var index = _a.index, values = _a.values, setted = _a.setted; var newValue = flat ? values.flat : (0, tslib_1.__assign)({}, values); if (!setted && (0, helper_1.isObjectShallowModified)(value[index], newValue)) { value[index] = flat ? values.flat : (0, tslib_1.__assign)({}, values); isModified = true; } return { index: index, values: values, setted: true }; }); if (!isModified) { return; } if (flat && joinValues) { value = value.join(delimiter || ','); } formInited ? onChange(value, submitOnChange, true) : setPrinstineValue(value); }; ComboControl.prototype.handleSingleFormInit = function (values) { var _a = this.props, syncDefaultValue = _a.syncDefaultValue, setPrinstineValue = _a.setPrinstineValue, value = _a.value, nullable = _a.nullable; if (syncDefaultValue !== false && !nullable && (0, helper_1.isObjectShallowModified)(value, values) && setPrinstineValue) { setPrinstineValue((0, tslib_1.__assign)({}, values)); } }; ComboControl.prototype.handleAction = function (action) { var onAction = this.props.onAction; if (action.actionType === 'delete') { action.index !== void 0 && this.removeItem(action.index); return; } onAction && onAction.apply(null, arguments); }; ComboControl.prototype.validate = function () { var _a = this.props, value = _a.value, minLength = _a.minLength, maxLength = _a.maxLength, messages = _a.messages, nullable = _a.nullable, __ = _a.translate; if (minLength && (!Array.isArray(value) || value.length < minLength)) { return __((messages && messages.minLengthValidateFailed) || 'Combo.minLength', { minLength: minLength }); } else if (maxLength && Array.isArray(value) && value.length > maxLength) { return __((messages && messages.maxLengthValidateFailed) || 'Combo.maxLength', { maxLength: maxLength }); } else if (this.subForms.length && (!nullable || value)) { return Promise.all(this.subForms.map(function (item) { return item.validate(); })).then(function (values) { if (~values.indexOf(false)) { return __((messages && messages.validateFailed) || 'validateFailed'); } return; }); } }; ComboControl.prototype.flush = function () { this.subForms.forEach(function (form) { return form.flush(); }); }; ComboControl.prototype.dragTipRef = function (ref) { if (!this.dragTip && ref) { this.initDragging(); } else if (this.dragTip && !ref) { this.destroyDragging(); } this.dragTip = ref; }; ComboControl.prototype.initDragging = function () { var _this = this; var ns = this.props.classPrefix; var submitOnChange = this.props.submitOnChange; var dom = (0, react_dom_1.findDOMNode)(this); this.sortable = new sortablejs_1.default(dom.querySelector("." + ns + "Combo-items"), { group: "combo-" + this.id, animation: 150, handle: "." + ns + "Combo-itemDrager", ghostClass: ns + "Combo-item--dragging", onEnd: function (e) { // 没有移动 if (e.newIndex === e.oldIndex) { return; } // 换回来 var parent = e.to; if (e.oldIndex < parent.childNodes.length - 1) { parent.insertBefore(e.item, parent.childNodes[e.oldIndex]); } else { parent.appendChild(e.item); } var value = _this.props.value; if (!Array.isArray(value)) { return; } var newValue = value.concat(); newValue.splice(e.newIndex, 0, newValue.splice(e.oldIndex, 1)[0]); _this.keys.splice(e.newIndex, 0, _this.keys.splice(e.oldIndex, 1)[0]); _this.props.onChange(newValue, submitOnChange, true); } }); }; ComboControl.prototype.destroyDragging = function () { this.sortable && this.sortable.destroy(); }; ComboControl.prototype.formRef = function (ref, index) { if (index === void 0) { index = 0; } if (ref) { while (ref && ref.getWrappedInstance) { ref = ref.getWrappedInstance(); } this.subForms[index] = ref; this.refsMap[index] = ref; } else { var form_1 = this.refsMap[index]; this.subForms = this.subForms.filter(function (item) { return item !== form_1; }); this.subFormDefaultValues = this.subFormDefaultValues.filter(function (_a) { var dIndex = _a.index; return dIndex !== index; }); delete this.refsMap[index]; } }; ComboControl.prototype.formatValue = function (value, index) { if (index === void 0) { index = -1; } var _a = this.props, flat = _a.flat, data = _a.data, strictMode = _a.strictMode, syncFields = _a.syncFields; if (flat) { value = { flat: value }; } value = value || this.defaultValue; return this.memoizedFormatValue(strictMode !== false, syncFields, value, index, data); }; ComboControl.prototype.pickCondition = function (value) { var conditions = this.props.conditions; return (0, find_1.default)(conditions, function (item) { return item.test && (0, tpl_1.evalExpression)(item.test, value); }); }; ComboControl.prototype.handleComboTypeChange = function (index, selection) { var _a = this.props, multiple = _a.multiple, onChange = _a.onChange, value = _a.value, flat = _a.flat, submitOnChange = _a.submitOnChange; var conditions = this.props .conditions; var condition = (0, find_1.default)(conditions, function (item) { return item.label === selection.label; }); if (!condition) { return; } if (multiple) { var newValue = this.getValueAsArray(); newValue.splice(index, 1, (0, tslib_1.__assign)({}, (0, tpl_builtin_1.dataMapping)(condition.scaffold || {}, newValue[index]))); // todo 支持 flat onChange(newValue, submitOnChange, true); } else { onChange((0, tslib_1.__assign)({}, (0, tpl_builtin_1.dataMapping)(condition.scaffold || {}, value)), submitOnChange, true); } }; ComboControl.prototype.handleTabSelect = function (key) { var store = this.props.store; store.setActiveKey(key); }; ComboControl.prototype.setNull = function (e) { e.preventDefault(); var onChange = this.props.onChange; onChange(null); Array.isArray(this.subForms) && this.subForms.forEach(function (subForm) { subForm.clearErrors(); }); }; ComboControl.prototype.renderPlaceholder = function () { var _a = this.props, placeholder = _a.placeholder, __ = _a.translate; return (react_1.default.createElement("span", { className: "text-muted" }, __(placeholder || 'placeholder.noData'))); }; ComboControl.prototype.renderTabsMode = function () { var _this = this; var _a = this.props, ns = _a.classPrefix, cx = _a.classnames, tabsStyle = _a.tabsStyle, formClassName = _a.formClassName, render = _a.render, disabled = _a.disabled, store = _a.store, flat = _a.flat, subFormMode = _a.subFormMode, addButtonText = _a.addButtonText, addable = _a.addable, removable = _a.removable, typeSwitchable = _a.typeSwitchable, itemRemovableOn = _a.itemRemovableOn, delimiter = _a.delimiter, canAccessSuperData = _a.canAccessSuperData, addIcon = _a.addIcon, deleteIcon = _a.deleteIcon, tabsLabelTpl = _a.tabsLabelTpl, conditions = _a.conditions, changeImmediately = _a.changeImmediately, __ = _a.translate; var items = this.props.items; var value = this.props.value; if (flat && typeof value === 'string') { value = value.split(delimiter || ','); } var finnalRemovable = store.removable !== false && // minLength ? !disabled && // 控件自身是否禁用 removable !== false; // 是否可以删除 if (!Array.isArray(value)) { return this.renderPlaceholder(); } // todo 支持拖拽排序。 return (react_1.default.createElement(Tabs_1.default, { className: 'ComboTabs', mode: tabsStyle, activeKey: store.activeKey, onSelect: this.handleTabSelect, additionBtns: !disabled ? (react_1.default.createElement("li", { className: cx("Tabs-link ComboTabs-addLink") }, store.addable && addable !== false ? (Array.isArray(conditions) && conditions.length ? (render('add-button', { type: 'dropdown-button', icon: addIcon ? (react_1.default.createElement(icons_1.Icon, { icon: "plus", className: "icon" })) : (''), label: __(addButtonText || 'Combo.add'), level: 'info', size: 'sm', closeOnClick: true }, { buttons: conditions.map(function (item) { return ({ label: item.label, onClick: function (e) { _this.addItemWith(item); return false; } }); }) })) : (react_1.default.createElement("a", { onClick: this.addItem, "data-position": "left", "data-tooltip": __('Combo.add') }, addIcon ? react_1.default.createElement(icons_1.Icon, { icon: "plus", className: "icon" }) : null, react_1.default.createElement("span", null, __(addButtonText || 'Combo.add'))))) : null)) : null }, value.map(function (value, index) { var data = _this.formatValue(value, index); var condition = null; var toolbar = undefined; if (finnalRemovable && // 表达式判断单条是否可删除 (!itemRemovableOn || (0, tpl_1.evalExpression)(itemRemovableOn, value) !== false)) { toolbar = (react_1.default.createElement("div", { onClick: _this.removeItem.bind(_this, index), key: "remove", className: cx("Combo-tab-delBtn " + (!store.removable ? 'is-disabled' : '')), "data-tooltip": __('delete'), "data-position": "bottom" }, deleteIcon ? (react_1.default.createElement("i", { className: deleteIcon })) : (react_1.default.createElement(icons_1.Icon, { icon: "status-close", className: "icon" })))); } if (Array.isArray(conditions) && conditions.length) { condition = _this.pickCondition(data); items = condition ? condition.items : undefined; } var finnalControls = flat && items ? [ (0, tslib_1.__assign)((0, tslib_1.__assign)({}, (items && items[0])), { name: 'flat' }) ] : items; var hasUnique = Array.isArray(finnalControls) && finnalControls.some(function (item) { return item.unique; }); return (react_1.default.createElement(Tabs_1.Tab, { title: (0, tpl_1.filter)(tabsLabelTpl || __('{{index}}', { index: data.index + 1 }), data), key: _this.keys[index] || (_this.keys[index] = (0, helper_1.guid)()), toolbar: toolbar, eventKey: index, // 不能按需渲染,因为 unique 会失效。 mountOnEnter: !hasUnique, unmountOnExit: false }, condition && typeSwitchable !== false ? (react_1.default.createElement("div", { className: cx('Combo-itemTag') }, react_1.default.createElement("label", null, __('Combo.type')), react_1.default.createElement(Select_1.default, { onChange: _this.handleComboTypeChange.bind(_this, index), options: conditions.map(function (item) { return ({ label: item.label, value: item.label }); }), value: condition.label, clearable: false }))) : null, react_1.default.createElement("div", { className: cx("Combo-itemInner") }, finnalControls ? (render("multiple/" + index, { type: 'form', body: finnalControls, wrapperComponent: 'div', wrapWithPanel: false, mode: subFormMode, className: cx("Combo-form", formClassName) }, { index: index, disabled: disabled, data: data, onChange: _this.handleChange, onInit: _this.handleFormInit, onAction: _this.handleAction, ref: _this.makeFormRef(index), canAccessSuperData: canAccessSuperData, lazyChange: changeImmediately ? false : true, formLazyChange: false, value: undefined, formItemValue: undefined, formStore: undefined })) : (react_1.default.createElement(components_1.Alert2, { level: "warning", className: "m-b-none" }, __('Combo.invalidData')))))); }))); }; ComboControl.prototype.renderMultipe = function () { var _this = this; if (this.props.tabsMode) { return this.renderTabsMode(); } var _a = this.props, ns = _a.classPrefix, cx = _a.classnames, formClassName = _a.formClassName, render = _a.render, multiLine = _a.multiLine, addButtonClassName = _a.addButtonClassName, disabled = _a.disabled, store = _a.store, flat = _a.flat, subFormMode = _a.subFormMode, draggable = _a.draggable, draggableTip = _a.draggableTip, addButtonText = _a.addButtonText, addable = _a.addable, removable = _a.removable, typeSwitchable = _a.typeSwitchable, itemRemovableOn = _a.itemRemovableOn, delimiter = _a.delimiter, canAccessSuperData = _a.canAccessSuperData, addIcon = _a.addIcon, dragIcon = _a.dragIcon, deleteIcon = _a.deleteIcon, noBorder = _a.noBorder, conditions = _a.conditions, lazyLoad = _a.lazyLoad, changeImmediately = _a.changeImmediately, placeholder = _a.placeholder, __ = _a.translate; var items = this.props.items; var value = this.props.value; if (flat && typeof value === 'string') { value = value.split(delimiter || ','); } var finnalRemovable = store.removable !== false && // minLength ? !disabled && // 控件自身是否禁用 removable !== false; // 是否可以删除 return (react_1.default.createElement("div", { className: cx("Combo Combo--multi", multiLine ? "Combo--ver" : "Combo--hor", noBorder ? "Combo--noBorder" : '', disabled ? 'is-disabled' : '', !disabled && draggable && Array.isArray(value) && value.length > 1 ? 'is-draggable' : '') }, react_1.default.createElement("div", { className: cx("Combo-items") }, Array.isArray(value) && value.length ? (value.map(function (value, index, thelist) { var delBtn = null; if (finnalRemovable && // 表达式判断单条是否可删除 (!itemRemovableOn || (0, tpl_1.evalExpression)(itemRemovableOn, value) !== false)) { delBtn = (react_1.default.createElement("a", { onClick: _this.removeItem.bind(_this, index), key: "remove", className: cx("Combo-delBtn " + (!store.removable ? 'is-disabled' : '')), "data-tooltip": __('delete'), "data-position": "bottom" }, deleteIcon ? (react_1.default.createElement("i", { className: deleteIcon })) : (react_1.default.createElement(icons_1.Icon, { icon: "status-close", className: "icon" })))); } var data = _this.formatValue(value, index); var condition = null; if (Array.isArray(conditions) && conditions.length) { condition = _this.pickCondition(data); items = condition ? condition.items : undefined; } var finnalControls = flat && items ? [ (0, tslib_1.__assign)((0, tslib_1.__assign)({}, (items && items[0])), { name: 'flat' }) ] : items; return (react_1.default.createElement("div", { className: cx("Combo-item"), key: _this.keys[index] || (_this.keys[index] = (0, helper_1.guid)()) }, !disabled && draggable && thelist.length > 1 ? (react_1.default.createElement("div", { className: cx('Combo-itemDrager') }, react_1.default.createElement("a", { key: "drag", "data-tooltip": __('Combo.dragDropSort'), "data-position": "bottom" }, dragIcon ? (react_1.default.createElement("i", { className: dragIcon })) : (react_1.default.createElement(icons_1.Icon, { icon: "drag-bar", className: "icon" }))))) : null, condition && typeSwitchable !== false ? (react_1.default.createElement("div", { className: cx('Combo-itemTag') }, react_1.default.createElement("label", null, __('Combo.type')), react_1.default.createElement(Select_1.default, { onChange: _this.handleComboTypeChange.bind(_this, index), options: conditions.map(function (item) { return ({ label: item.label, value: item.label }); }), value: condition.label, clearable: false }))) : null, react_1.default.createElement("div", { className: cx("Combo-itemInner") }, finnalControls ? (render("multiple/" + index, { type: 'form', body: finnalControls, wrapperComponent: 'div', wrapWithPanel: false, mode: multiLine ? subFormMode : 'row', className: cx("Combo-form", formClassName) }, { index: index, disabled: disabled, data: data, onChange: _this.handleChange, onInit: _this.handleFormInit, onAction: _this.handleAction, ref: _this.makeFormRef(index), lazyChange: changeImmediately ? false : true, formLazyChange: false, lazyLoad: lazyLoad, canAccessSuperData: canAccessSuperData, value: undefined, formItemValue: undefined, formStore: undefined })) : (react_1.default.createElement(components_1.Alert2, { level: "warning", className: "m-b-none" }, __('Combo.invalidData')))), delBtn)); })) : placeholder ? (react_1.default.createElement("div", { className: cx("Combo-placeholder") }, __(placeholder))) : null), !disabled ? (react_1.default.createElement("div", { className: cx("Combo-toolbar") }, store.addable && addable !== false ? (Array.isArray(conditions) && conditions.length ? (render('add-button', { type: 'dropdown-button', label: __(addButtonText || 'Combo.add'), level: 'info', size: 'sm', closeOnClick: true }, { buttons: conditions.map(function (item) { return ({ label: item.label, onClick: function (e) { _this.addItemWith(item); return false; } }); }) })) : (react_1.default.createElement("button", { type: "button", onClick: this.addItem, className: cx("Button Combo-addBtn", addButtonClassName), "data-tooltip": __('Combo.add') }, addIcon ? react_1.default.createElement(icons_1.Icon, { icon: "plus", className: "icon" }) : null, react_1.default.createElement("span", null, __(addButtonText || 'Combo.add'))))) : null, draggable ? (react_1.default.createElement("span", { className: cx("Combo-dragableTip"), ref: this.dragTipRef }, Array.isArray(value) && value.length > 1 ? __(draggableTip) : '')) : null)) : null)); }; ComboControl.prototype.renderSingle = function () { var _a = this.props, conditions = _a.conditions, cx = _a.classnames, render = _a.render, value = _a.value, multiLine = _a.multiLine, formClassName = _a.formClassName, canAccessSuperData = _a.canAccessSuperData, noBorder = _a.noBorder, disabled = _a.disabled, typeSwitchable = _a.typeSwitchable, nullable = _a.nullable, __ = _a.translate; var items = this.props.items; var data = (0, helper_1.isObject)(value) ? this.formatValue(value) : this.defaultValue; var condition = null; if (Array.isArray(conditions) && conditions.length) { condition = this.pickCondition(data); items = condition ? condition.items : undefined; } return (react_1.default.createElement("div", { className: cx("Combo Combo--single", multiLine ? "Combo--ver" : "Combo--hor", noBorder ? "Combo--noBorder" : '', disabled ? 'is-disabled' : '') }, react_1.default.createElement("div", { className: cx("Combo-item") }, condition && typeSwitchable !== false ? (react_1.default.createElement("div", { className: cx('Combo-itemTag') }, react_1.default.createElement("label", null, __('Combo.type')), react_1.default.createElement(Select_1.default, { onChange: this.handleComboTypeChange.bind(this, 0), options: conditions.map(function (item) { return ({ label: item.label, value: item.label }); }), value: condition.label, clearable: false }))) : null, react_1.default.createElement("div", { className: cx("Combo-itemInner") }, items ? (render('single', { type: 'form', body: items, wrapperComponent: 'div', wrapWithPanel: false, mode: multiLine ? 'normal' : 'row', className: cx("Combo-form", formClassName) }, { disabled: disabled, data: data, onChange: this.handleSingleFormChange, ref: this.makeFormRef(0), onInit: this.handleSingleFormInit, canAccessSuperData: canAccessSuperData, formStore: undefined })) : (react_1.default.createElement(components_1.Alert2, { level: "warning", className: "m-b-none" }, __('Combo.invalidData'))))), value && nullable ? (react_1.default.createElement("a", { className: cx('Combo-setNullBtn'), href: "#", onClick: this.setNull }, __('clear'))) : null)); }; ComboControl.prototype.render = function () { var _a = this.props, formInited = _a.formInited, multiple = _a.multiple, className = _a.className, ns = _a.classPrefix, cx = _a.classnames, disabled = _a.disabled; return formInited || typeof formInited === 'undefined' ? (react_1.default.createElement("div", { className: cx("ComboControl", className) }, multiple ? this.renderMultipe() : this.renderSingle())) : null; }; var _a; ComboControl.defaultProps = { minLength: 0, maxLength: 0, multiple: false, multiLine: false, addButtonClassName: '', formClassName: '', subFormMode: 'normal', draggableTip: '', addButtonText: 'Combo.add', canAccessSuperData: false, addIcon: true, dragIcon: '', deleteIcon: '', tabsMode: false, tabsStyle: '', placeholder: 'placeholder.empty' }; ComboControl.propsList = [ 'minLength', 'maxLength', 'multiple', 'multiLine', 'addButtonClassName', 'subFormMode', 'draggableTip', 'addButtonText', 'draggable', 'scaffold', 'canAccessSuperData', 'addIcon', 'dragIcon', 'deleteIcon', 'noBorder', 'conditions', 'tabsMode', 'tabsStyle', 'lazyLoad', 'changeImmediately', 'strictMode', 'items', 'conditions', 'messages', 'formStore' ]; (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [Number]), (0, tslib_1.__metadata)("design:returntype", void 0) ], ComboControl.prototype, "handleTabSelect", null); (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) ], ComboControl.prototype, "setNull", null); return ComboControl; }(react_1.default.Component)); exports.default = ComboControl; var ComboControlRenderer = /** @class */ (function (_super) { (0, tslib_1.__extends)(ComboControlRenderer, _super); function ComboControlRenderer() { return _super !== null && _super.apply(this, arguments) || this; } ComboControlRenderer = (0, tslib_1.__decorate)([ (0, Item_1.FormItem)({ type: 'combo', storeType: combo_1.ComboStore.name, extendsData: false }) ], ComboControlRenderer); return ComboControlRenderer; }(ComboControl)); exports.ComboControlRenderer = ComboControlRenderer; var KVControlRenderer = /** @class */ (function (_super) { (0, tslib_1.__extends)(KVControlRenderer, _super); function KVControlRenderer() { return _super !== null && _super.apply(this, arguments) || this; } KVControlRenderer = (0, tslib_1.__decorate)([ (0, Item_1.FormItem)({ type: 'input-kv', storeType: combo_1.ComboStore.name, extendsData: false }) ], KVControlRenderer); return KVControlRenderer; }(ComboControl)); exports.KVControlRenderer = KVControlRenderer; //# sourceMappingURL=./renderers/Form/Combo.js.map