UNPKG

choerodon-ui

Version:

An enterprise-class UI design language and React-based implementation

1,678 lines (1,384 loc) 50.6 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"]; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _tslib = require("tslib"); var _mobx = require("mobx"); var _raf = _interopRequireDefault(require("raf")); var _isString = _interopRequireDefault(require("lodash/isString")); var _isEqual = _interopRequireDefault(require("lodash/isEqual")); var _isObject = _interopRequireDefault(require("lodash/isObject")); var _merge = _interopRequireDefault(require("lodash/merge")); var _utils = require("../utils"); var _DataSet = _interopRequireDefault(require("./DataSet")); var _Validator = _interopRequireDefault(require("../validator/Validator")); var _enum = require("./enum"); var _LookupCodeStore = _interopRequireDefault(require("../stores/LookupCodeStore")); var _LovCodeStore = _interopRequireDefault(require("../stores/LovCodeStore")); var _AttachmentStore = _interopRequireDefault(require("../stores/AttachmentStore")); var _localeContext = _interopRequireDefault(require("../locale-context")); var _utils2 = require("./utils"); var _utils3 = require("../axios/utils"); var _utils4 = require("../stores/utils"); var _AttachmentFile = _interopRequireDefault(require("./AttachmentFile")); var _iteratorHelper = require("../iterator-helper"); var _treeHelper = require("../tree-helper"); var _LookupCache = _interopRequireDefault(require("./LookupCache")); function isEqualDynamicProps(oldProps, newProps) { if (newProps === oldProps) { return true; } if ((0, _isObject["default"])(newProps) && (0, _isObject["default"])(oldProps)) { var newKeys = Object.keys(newProps); var length = newKeys.length; if (length) { if (length !== Object.keys(oldProps).length) { return false; } return newKeys.every(function (key) { var value = newProps[key]; var oldValue = oldProps[key]; if (oldValue === value) { return true; } if (typeof value === 'function' && typeof oldValue === 'function') { return value.toString() === oldValue.toString(); } return (0, _isEqual["default"])(oldValue, value); }); } } return (0, _isEqual["default"])(newProps, oldProps); } function getPropsFromLovConfig(lovCode, propsName) { var props = {}; if (lovCode) { var config = _LovCodeStore["default"].getConfig(lovCode); if (config) { propsName.forEach(function (name) { var value = config[name]; if (value) { props[name] = value; } }); } } return props; } var LOOKUP_SIDE_EFFECT_KEYS = ['type', 'lookupUrl', 'lookupCode', 'lookupAxiosConfig', 'lovCode', 'lovQueryAxiosConfig', 'lovPara', 'cascadeMap', 'lovQueryUrl', 'optionsProps']; var LOV_SIDE_EFFECT_KEYS = ['lovCode', 'lovDefineAxiosConfig', 'lovDefineUrl', 'optionsProps']; var LOOKUP_DATA = 'lookupData'; function getLookupToken(field, record) { if (record) { var lookupTokens = record.lookupTokens; if (lookupTokens) { var name = field.name; if (lookupTokens.has(name)) { return lookupTokens.get(name); } } if (field.record) { var dsField = record.dataSet.getField(field.name); return dsField && dsField.lookupToken; } } return field.lookupToken; } function setLookupToken(field, token, record) { if (record) { if (token !== undefined || record.lookupTokens) { var lookupTokens = (0, _utils2.getIf)(record, 'lookupTokens', function () { return _mobx.observable.map(); }); lookupTokens.set(field.name, token); } } else if (token !== field.lookupToken) { field.lookupToken = token; } } function combineWithOldLookupData(lookup, field, record) { var lookupData = field.get(LOOKUP_DATA, record); if (lookupData) { var valueField = field.get('valueField', record); var others = lookupData.filter(function (data) { return lookup.every(function (item) { return item[valueField] !== data[valueField]; }); }); if (others.length) { return others.concat(lookup.slice()); } } return lookup; } var defaultProps = { type: _enum.FieldType.auto, required: false, readOnly: false, disabled: false, group: false, textField: _utils2.defaultTextField, valueField: _utils2.defaultValueField, trueValue: true, falseValue: false, trim: _enum.FieldTrim.both }; var Field = /*#__PURE__*/function () { function Field() { var _this = this; var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var dataSet = arguments.length > 1 ? arguments[1] : undefined; var record = arguments.length > 2 ? arguments[2] : undefined; (0, _classCallCheck2["default"])(this, Field); (0, _mobx.runInAction)(function () { _this.dataSet = dataSet; _this.record = record; _this.props = _mobx.observable.map(props); if (!props.options) { var dynamicProps = props.dynamicProps, computedProps = props.computedProps; if (typeof dynamicProps === 'function') { _this.hasLookupSideEffects = true; _this.hasLovSideEffects = true; } else { var keys = Object.keys((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, computedProps), dynamicProps)); if (keys.length) { _this.hasLookupSideEffects = keys.some(function (key) { return LOOKUP_SIDE_EFFECT_KEYS.includes(key); }); _this.hasLovSideEffects = keys.some(function (key) { return LOV_SIDE_EFFECT_KEYS.includes(key); }); } } if (record) { var dsField = dataSet.getField(props.name); if (dsField) { if (!_this.hasLookupSideEffects) { _this.hasLookupSideEffects = dsField.hasLookupSideEffects; } if (!_this.hasLovSideEffects) { _this.hasLovSideEffects = dsField.hasLovSideEffects; } } _this.processForLookupAndLovConfig(record); } else { (0, _raf["default"])(function () { _this.fetchLookup(); _this.fetchLovConfig(); }); } } }); } (0, _createClass2["default"])(Field, [{ key: "attachments", get: function get() { return this.getAttachments(); }, set: function set(attachments) { this.setAttachments(attachments); } }, { key: "attachmentCount", get: function get() { return this.getAttachmentCount(); }, set: function set(count) { this.setAttachmentCount(count); } }, { key: "pristineProps", get: function get() { return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, this.props.toPOJO()), this.dirtyProps); }, set: function set(props) { var _this2 = this; (0, _mobx.runInAction)(function () { var dirtyProps = _this2.dirtyProps; if (dirtyProps) { var newProps = {}; var dirtyKeys = Object.keys(dirtyProps); if (dirtyKeys.length) { dirtyKeys.forEach(function (key) { var item = _this2.props.get(key); newProps[key] = item; if ((0, _utils.isSame)(item, props[key])) { delete dirtyProps[key]; } else { dirtyProps[key] = props[key]; } }); } _this2.props.replace((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, props), newProps)); } else { _this2.props.replace(props); } }); } }, { key: "lookup", get: function get() { return this.getLookup(); } }, { key: "options", get: function get() { return this.getOptions(); } }, { key: "dirty", get: function get() { return this.isDirty(); } }, { key: "name", get: function get() { return this.props.get('name'); } }, { key: "order", get: function get() { return this.get('order'); }, set: function set(order) { this.set('order', order); } }, { key: "valid", get: function get() { return this.isValid(); } }, { key: "validationMessage", get: function get() { return this.getValidationMessage(); } }, { key: "processForLookupAndLovConfig", value: function processForLookupAndLovConfig(record) { var _this3 = this; var hasLovSideEffects = this.hasLovSideEffects, hasLookupSideEffects = this.hasLookupSideEffects; if (hasLovSideEffects || hasLookupSideEffects) { (0, _raf["default"])(function () { if (hasLookupSideEffects) { _this3.fetchLookup(undefined, record); } if (hasLovSideEffects) { _this3.fetchLovConfig(record); } }); } } }, { key: "isDirty", value: function isDirty() { var record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.record; if (record) { var name = this.name; var dirtyData = record.dirtyData; if (dirtyData && dirtyData.size) { var chainFieldName = (0, _utils2.getChainFieldName)(record, name); if (dirtyData.has(chainFieldName) || (0, _iteratorHelper.iteratorSome)(dirtyData.keys(), function (key) { return chainFieldName.startsWith("".concat(key, ".")); })) { return true; } if (this.get('type', record) === _enum.FieldType.intl) { var tlsKey = this.dataSet.getConfig('tlsKey'); if (record.get(tlsKey) && Object.keys(_localeContext["default"].supports).some(function (lang) { return dirtyData.has((0, _utils2.getChainFieldName)(record, "".concat(tlsKey, ".").concat(name, ".").concat(lang))); })) { return true; } } } } return false; } /** * 获取所有属性 * @return 属性对象 */ }, { key: "getProps", value: function getProps() { var record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.record; var dsField = this.findDataSetField(); var lovCode = this.get('lovCode', record); return (0, _merge["default"])({ lookupUrl: this.dataSet.getConfig('lookupUrl') }, defaultProps, getPropsFromLovConfig(lovCode, ['textField', 'valueField']), dsField && dsField.props.toPOJO(), this.props.toPOJO()); } /** * 根据属性名获取属性值 * @param propsName 属性名 * @return {any} */ }, { key: "get", value: function get(propsName) { var record = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.record; var prop = this.getProp(propsName, record); if (prop !== undefined) { return prop; } return defaultProps[propsName]; } }, { key: "getProp", value: function getProp(propsName) { var _this4 = this; var record = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.record; if (record && !this.record) { var recordField = record.ownerFields.get(this.name); if (recordField) { var recordProp = recordField.getProp(propsName); if (recordProp !== undefined) { return recordProp; } } } if (!['computedProps', 'dynamicProps'].includes(propsName)) { var computedPropsMap = record ? (0, _utils2.getIf)(record, 'computedFieldProps', function () { return new Map(); }) : (0, _utils2.getIf)(this, 'computedProps', function () { return new Map(); }); var computedKey = "__".concat(this.name, "$").concat(propsName, "__"); var computedProp = computedPropsMap.get(computedKey); if (computedProp) { var computedValue = computedProp.get(); if (computedValue !== undefined) { return computedValue; } } else { var computedProps = this.get('computedProps', record); if (computedProps) { var newComputedProp = (0, _mobx.computed)(function () { var computProp = computedProps[propsName]; if (typeof computProp === 'function') { var prop = _this4.executeDynamicProps(computProp, propsName, record); if (prop !== undefined) { _this4.checkDynamicProp(propsName, prop, record); return prop; } } }, { name: computedKey, context: record || this }); computedPropsMap.set(computedKey, newComputedProp); var _computedValue = newComputedProp.get(); if (_computedValue !== undefined) { return _computedValue; } } } var dynamicProps = this.get('dynamicProps', record); if (dynamicProps) { if (typeof dynamicProps === 'function') { (0, _utils.warning)(false, " The dynamicProps hook will be deprecated. Please use dynamicProps map.\n For e.g,\n Bad case:\n dynamicProps({ record }) {\n return {\n bind: record.get('xx'),\n label: record.get('yy'),\n }\n }\n Good case:\n dynamicProps = {\n bind({ record }) {\n return record.get('xx')\n },\n label({ record }) {\n return record.get('yy'),\n }\n }"); var props = this.executeDynamicProps(dynamicProps, propsName, record); if (props && propsName in props) { var prop = props[propsName]; this.checkDynamicProp(propsName, prop, record); return prop; } } else { var dynamicProp = dynamicProps[propsName]; if (typeof dynamicProp === 'function') { var _prop = this.executeDynamicProps(dynamicProp, propsName, record); if (_prop !== undefined) { this.checkDynamicProp(propsName, _prop, record); return _prop; } } } this.checkDynamicProp(propsName, undefined, record); } } var value = this.props.get(propsName); if (value !== undefined) { return value; } if (propsName === 'lookup') { var dataSet = this.dataSet; var lookupToken = getLookupToken(this, record); var lookupCaches = dataSet.lookupCaches; if (lookupToken && lookupCaches) { var lookup = lookupCaches.get(lookupToken); if (lookup) { var items = lookup.items; if (items) { return items; } } return undefined; } } var dsField = this.findDataSetField(); if (dsField) { var dsValue = dsField.getProp(propsName); if (dsValue !== undefined) { return dsValue; } } if (propsName === 'textField' || propsName === 'valueField') { var lovCode = this.get('lovCode', record); var lovProp = getPropsFromLovConfig(lovCode, [propsName])[propsName]; if (lovProp) { return lovProp; } } if (propsName === 'lookupUrl') { return this.dataSet.getConfig('lookupUrl'); } if (['min', 'max'].includes(propsName)) { if (this.get('type', record) === _enum.FieldType.number) { if (propsName === 'max') { return Infinity; } return -Infinity; } } return undefined; } /** * 设置属性值 * @param propsName 属性名 * @param value 属性值 * @return {any} */ }, { key: "set", value: function set(propsName, value) { var _this5 = this; var record = this.record, name = this.name; if (record) { var recordField = record.ownerFields.get(name); if (recordField) { if (recordField !== this) { recordField.set(propsName, value); return recordField; } } else { record.ownerFields.set(name, this); } } var oldValue = this.get(propsName); if (!isEqualDynamicProps((0, _mobx.toJS)(oldValue), value)) { var dirtyProps = (0, _utils2.getIf)(this, 'dirtyProps', {}); if (!(propsName in dirtyProps)) { (0, _mobx.set)(dirtyProps, propsName, oldValue); } else if ((0, _utils.isSame)((0, _mobx.toJS)(dirtyProps[propsName]), value)) { (0, _mobx.remove)(dirtyProps, propsName); } this.props.set(propsName, value); var dataSet = this.dataSet; dataSet.fireEvent(_enum.DataSetEvents.fieldChange, { dataSet: dataSet, record: record, name: name, field: this, propsName: propsName, value: value, oldValue: oldValue }); this.handlePropChange(propsName, value, oldValue, record); if (!record) { dataSet.forEach(function (r) { var recordField = r.ownerFields.get(name); if (!recordField || !recordField.props.has(propsName)) { _this5.handlePropChange(propsName, value, oldValue, r); } }); } } return this; } }, { key: "replace", value: function replace() { var _this6 = this; var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var p = (0, _objectSpread2["default"])({}, props); this.props.forEach(function (_v, key) { if (![LOOKUP_DATA, 'name'].includes(key)) { _this6.set(key, props[key]); } delete p[key]; }); return this.merge(p); } }, { key: "merge", value: function merge(props) { var _this7 = this; Object.keys(props).forEach(function (key) { if (key !== 'name') { _this7.set(key, props[key]); } }); return this; } }, { key: "getLookup", value: function getLookup() { var record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.record; var lookupToken = getLookupToken(this, record); var lookupCaches = this.dataSet.lookupCaches; if (lookupToken && lookupCaches) { var lookup = lookupCaches.get(lookupToken); if (lookup) { var items = lookup.items; if (items) { return combineWithOldLookupData(items, this, record); } } } } /** * 根据lookup值获取lookup对象 * @param value lookup值 * @return {object} */ }, { key: "getLookupData", value: function getLookupData(value) { var record = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.record; value = value === undefined ? this.getValue(record) : value; var valueField = this.get('valueField', record); var data = {}; var lookup = this.getLookup(record); if (lookup) { return lookup.find(function (obj) { return (0, _utils.isSameLike)((0, _mobx.get)(obj, valueField), value); }) || data; } return data; } }, { key: "getValue", value: function getValue() { var record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.record; var r = record || this.dataSet.current; if (r) { return r.get(this.name); } } /** * 可以根据lookup值获取含义 * @param value lookup值 * @param boolean showValueIfNotFound * @return {string} */ }, { key: "getLookupText", value: function getLookupText(value, showValueIfNotFound) { var record = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.record; value = value === undefined ? this.getValue(record) : value; var textField = this.get('textField', record); var valueField = this.get('valueField', record); var lookup = this.getLookup(record); if (lookup) { var optionsProps = this.get('optionsProps', record); var found; if (optionsProps && optionsProps.childrenField) { found = (0, _treeHelper.treeFind)(lookup, function (node) { return (0, _utils.isSameLike)((0, _mobx.get)(node, valueField), value); }, optionsProps.childrenField); } else { found = lookup.find(function (obj) { return (0, _utils.isSameLike)((0, _mobx.get)(obj, valueField), value); }); } if (found) { return (0, _mobx.get)(found, textField); } if (showValueIfNotFound) { return value; } return undefined; } } /** * 可以根据options值获取含义 * @param value opions值 * @param boolean showValueIfNotFound * @return {string} */ }, { key: "getOptionsText", value: function getOptionsText(value, showValueIfNotFound) { var record = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.record; value = value === undefined ? this.getValue(record) : value; var textField = this.get('textField', record); var valueField = this.get('valueField', record); var options = this.getOptions(record); if (options) { var found = options.find(function (item) { return (0, _utils.isSameLike)(item.get(valueField), value); }); if (found) { return found.get(textField); } if (showValueIfNotFound) { return value; } return undefined; } } /** * 根据lookup值获取lookup含义 * @param value lookup值 * @param boolean showValueIfNotFound * @return {string} */ }, { key: "getText", value: function getText(value, showValueIfNotFound) { var record = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.record; value = value === undefined ? this.getValue(record) : value; var lookup = this.getLookup(record); if (lookup && !(0, _isObject["default"])(value)) { return this.getLookupText(value, showValueIfNotFound, record); } var options = this.get('options', record); var textField = this.get('textField', record); if (options) { var valueField = this.get('valueField', record); var found = options.find(function (item) { return (0, _utils.isSameLike)(item.get(valueField), value); }); if (found) { return found.get(textField); } } if (textField && (0, _isObject["default"])(value)) { if ((0, _mobx.isObservableObject)(value)) { return (0, _mobx.get)(value, textField); } return value[textField]; } return value; } }, { key: "setOptions", value: function setOptions(options) { this.set('options', options); } }, { key: "getOptions", value: function getOptions() { var _this8 = this; var record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.record; var options = this.get('options', record); if (options) { return options; } var name = this.name; var computedOptionsMap = record ? (0, _utils2.getIf)(record, 'computedFieldOptions', function () { return new Map(); }) : undefined; var computedOptions = computedOptionsMap ? computedOptionsMap.get(name) : this.computedOptions; if (computedOptions) { return computedOptions.get(); } var newComputedOptions = (0, _mobx.computed)(function () { var optionsProps = _this8.get('optionsProps', record); var lovCode = _this8.get('lovCode', record); if (lovCode) { var type = _this8.get('type', record); if (type === _enum.FieldType.object || type === _enum.FieldType.auto) { return _LovCodeStore["default"].getLovDataSet(lovCode, _this8, optionsProps, record); } } // 确保 lookup 相关配置介入观察 _LookupCodeStore["default"].getAxiosConfig(_this8, record); var lookupToken = getLookupToken(_this8, record); if (lookupToken) { var lookupCaches = _this8.dataSet.lookupCaches; if (lookupCaches) { var lookup = lookupCaches.get(lookupToken); if (lookup) { var items = lookup.items, promise = lookup.promise; if (items) { var parentField = _this8.get('parentField', record); var idField = _this8.get('idField', record) || _this8.get('valueField', record); var selection = _this8.get('multiple', record) ? _enum.DataSetSelection.multiple : _enum.DataSetSelection.single; var props = { data: combineWithOldLookupData(items, _this8, record), paging: false, selection: selection, idField: idField, parentField: parentField, status: promise ? _enum.DataSetStatus.loading : _enum.DataSetStatus.ready }; return new _DataSet["default"]((0, _utils2.mergeDataSetProps)(props, optionsProps), _this8.dataSet.context); } if (promise) { return new _DataSet["default"]({ status: _enum.DataSetStatus.loading }, _this8.dataSet.context); } } } } return undefined; }); if (computedOptionsMap) { computedOptionsMap.set(name, newComputedOptions); } else { this.computedOptions = newComputedOptions; } return newComputedOptions.get(); } /** * 重置设置的属性 */ }, { key: "reset", value: function reset() { var dirtyProps = this.dirtyProps; if (dirtyProps) { this.props.merge(dirtyProps); this.dirtyProps = undefined; } } }, { key: "commit", value: function commit() { var record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.record; if (record) { record.clearValidationError(this.name); } } /** * 是否必选 * @return true | false */ }, { key: "required", get: function get() { return this.get('required'); } /** * 设置是否必选 * @param required 是否必选 */ , set: function set(required) { this.set('required', required); } /** * 是否只读 * @return true | false */ }, { key: "readOnly", get: function get() { return this.get('readOnly'); } /** * 设置是否只读 * @param readOnly 是否只读 */ , set: function set(readOnly) { this.set('readOnly', readOnly); } /** * 是否禁用 * @return true | false */ }, { key: "disabled", get: function get() { return this.get('disabled'); } /** * 设置是否禁用 * @param disabled 是否禁用 */ , set: function set(disabled) { this.set('disabled', disabled); } /** * 获取字段类型 * @return 获取字段类型 */ }, { key: "type", get: function get() { return this.get('type'); } /** * 设置字段类型 * @param type 字段类型 */ , set: function set(type) { this.set('type', type); } /** * 设置Lov的查询参数 * @param {String} name * @param {Object} value */ }, { key: "setLovPara", value: function setLovPara(name, value) { var record = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.record; var p = (0, _mobx.toJS)(this.get('lovPara', record)) || {}; if (value === null) { delete p[name]; } else { p[name] = value; } this.set('lovPara', p); } }, { key: "getValidatorPropGetter", value: function getValidatorPropGetter() { var _this9 = this; var record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.record; return function (key) { if (record) { switch (key) { case 'attachmentCount': { var attachments = _this9.getAttachments(record); var validAttachments = attachments && attachments.filter(function (_ref) { var status = _ref.status; return !status || ['success', 'done'].includes(status); }); return validAttachments ? validAttachments.length : _this9.getAttachmentCount(record); } case 'max': case 'min': return (0, _utils2.getLimit)(_this9.get(key, record), record, key, _this9.get('type', record)); case 'minLength': case 'maxLength': return (0, _utils2.getBaseType)(_this9.get('type', record)) !== _enum.FieldType.string ? undefined : _this9.get(key, record); case 'format': return _this9.get('format', record) || (0, _utils.getDateFormatByField)(_this9, _this9.get('type', record), record); case 'nonStrictStep': { var nonStrictStep = _this9.get('nonStrictStep', record); if (nonStrictStep === undefined) { return _this9.dataSet.getConfig('numberFieldNonStrictStep'); } return nonStrictStep; } case 'customValidator': return _this9.get('validator', record); case 'defaultValidationMessages': return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, _this9.dataSet.getConfig('defaultValidationMessages')), _this9.get('defaultValidationMessages', record)); default: return _this9.get(key, record); } } }; } /** * 校验字段值 * 只有通过record.getField()获取的field才能校验 * @return true | false */ }, { key: "checkValidity", value: function () { var _checkValidity = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() { var record, name, _yield$Validator$chec, valid, validationResults, _args = arguments; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: record = _args.length > 0 && _args[0] !== undefined ? _args[0] : this.record; if (!record) { _context.next = 11; break; } name = this.name; _context.next = 5; return _Validator["default"].checkValidity(record.get(name), { dataSet: record.dataSet, name: name, record: record }, this.getValidatorPropGetter(record)); case 5: _yield$Validator$chec = _context.sent; valid = _yield$Validator$chec.valid; validationResults = _yield$Validator$chec.validationResults; record.setValidationError(name, validationResults); if (!record.validating) { record.reportValidity({ field: this, errors: validationResults, valid: valid }, true); } return _context.abrupt("return", valid); case 11: return _context.abrupt("return", true); case 12: case "end": return _context.stop(); } } }, _callee, this); })); function checkValidity() { return _checkValidity.apply(this, arguments); } return checkValidity; }() /** * 请求lookup值, 如有缓存值直接获得。 * @param noCache default: undefined * @return Promise<object[]> */ }, { key: "fetchLookup", value: function fetchLookup() { var _this10 = this; var noCache = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var record = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.record; var lookupCaches = (0, _utils2.getIf)(this.dataSet, 'lookupCaches', function () { return _mobx.observable.map(); }); var oldToken = getLookupToken(this, record); var batch = this.get('lookupBatchAxiosConfig', record) || this.dataSet.getConfig('lookupBatchAxiosConfig'); var lookupCode = this.get('lookupCode', record); var useLookupBatch = lookupCode && this.dataSet.getConfig('useLookupBatch')(lookupCode, this) !== false; var promise; if (batch && lookupCode && Object.keys((0, _utils4.getLovPara)(this, record)).length === 0 && useLookupBatch && !noCache) { var cachedLookup = (0, _utils2.getIfForMap)(lookupCaches, lookupCode, function () { return new _LookupCache["default"](); }); if (lookupCode !== oldToken) { setLookupToken(this, lookupCode, record); } var items = cachedLookup.items; if (items) { promise = Promise.resolve(items); } else { promise = cachedLookup.promise; } if (!promise) { promise = _LookupCodeStore["default"].fetchLookupDataInBatch(lookupCode, batch).then((0, _mobx.action)(function (result) { if (result) { cachedLookup.items = result; cachedLookup.promise = undefined; } return result; })); cachedLookup.promise = promise; } } else { var axiosConfig = _LookupCodeStore["default"].getAxiosConfig(this, record, noCache); if (axiosConfig.url) { var lookupToken = (0, _utils3.buildURLWithAxiosConfig)(axiosConfig); if (lookupToken !== oldToken) { setLookupToken(this, lookupToken, record); } var _cachedLookup = (0, _utils2.getIfForMap)(lookupCaches, lookupToken, function () { return new _LookupCache["default"](); }); if (!noCache) { var _items = _cachedLookup.items; if (_items) { promise = Promise.resolve(_items); } else { promise = _cachedLookup.promise; } } if (!promise) { promise = _LookupCodeStore["default"].fetchLookupData(axiosConfig, undefined, this).then((0, _mobx.action)(function (result) { if (result) { _cachedLookup.items = result; _cachedLookup.promise = undefined; } return result; })); _cachedLookup.promise = promise; } } else { setLookupToken(this, undefined, record); } } if (promise) { return promise.then((0, _mobx.action)(function (result) { var lookup = oldToken ? lookupCaches.get(oldToken) : undefined; if (lookup) { var _items2 = lookup.items; if (_items2 && oldToken !== getLookupToken(_this10, record)) { var value = _this10.getValue(record); var valueField = _this10.get('valueField', record); if (value && valueField) { var _ref2; var values = _this10.get('multiple', record) ? (_ref2 = []).concat.apply(_ref2, (0, _toConsumableArray2["default"])(value)) : [].concat(value); _this10.set(LOOKUP_DATA, values.reduce(function (lookupData, v) { var found = _items2.find(function (item) { return (0, _utils.isSameLike)(item[valueField], v); }); if (found) { lookupData.push(found); } return lookupData; }, [])); } } } return (0, _mobx.toJS)(result); })); } return Promise.resolve(undefined); } }, { key: "fetchLovConfig", value: function fetchLovConfig() { var record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.record; var lovCode = this.get('lovCode', record); if (lovCode) { _LovCodeStore["default"].fetchConfig(lovCode, this, record); } } }, { key: "fetchAttachments", value: function fetchAttachments(props) { var _this11 = this; var record = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.record; var bucketName = props.bucketName, bucketDirectory = props.bucketDirectory, attachmentUUID = props.attachmentUUID, storageCode = props.storageCode, isPublic = props.isPublic; var _this$dataSet$getConf = this.dataSet.getConfig('attachment'), fetchList = _this$dataSet$getConf.fetchList; if (fetchList) { fetchList({ bucketName: bucketName, bucketDirectory: bucketDirectory, attachmentUUID: attachmentUUID, storageCode: storageCode, isPublic: isPublic }).then((0, _mobx.action)(function (results) { _this11.setAttachments(results.map(function (file) { return new _AttachmentFile["default"](file); }), record, undefined); })); } } }, { key: "fetchAttachmentCount", value: function fetchAttachmentCount(uuid, isPublic) { var _this12 = this; var record = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.record; var _this$dataSet$getConf2 = this.dataSet.getConfig('attachment'), batchFetchCount = _this$dataSet$getConf2.batchFetchCount; if (batchFetchCount && !this.attachments) { _AttachmentStore["default"].fetchCountInBatch({ attachmentUUID: uuid, bucketName: this.get('bucketName', record), bucketDirectory: this.get('bucketDirectory', record), storageCode: this.get('storageCode', record), isPublic: isPublic }, this).then(function (count) { _this12.setAttachmentCount(count, record); }); } } }, { key: "isValid", value: function isValid() { var record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.record; if (record) { var results = this.getValidationErrorValues(record); return !results || !results.length; } return true; } }, { key: "getValidationMessage", value: function getValidationMessage() { var record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.record; if (record) { var results = this.getValidationErrorValues(record); if (results && results.length) { return results[0].validationMessage; } } return undefined; } }, { key: "getValidationErrorValues", value: function getValidationErrorValues() { var record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.record; if (record) { var errors = record.getValidationError(this.name); if (errors && errors.length) { return errors; } var unique = this.get('unique', record); if ((0, _isString["default"])(unique)) { var validationErrors = record.validationErrors; if (validationErrors) { var uniqueErrors = (0, _iteratorHelper.iteratorFind)(validationErrors.values(), function (errors) { return errors.some(function (error) { return error.ruleName === 'uniqueError' && error.validationProps.unique === unique; }); }); if (uniqueErrors) { return uniqueErrors; } } } } return []; } }, { key: "setAttachments", value: function setAttachments(attachments) { var record = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.record; var uuid = arguments.length > 2 ? arguments[2] : undefined; if (record) { var value = uuid || record.get(this.name); if (value) { var attachmentCaches = (0, _utils2.getIf)(record, 'attachmentCaches', function () { return _mobx.observable.map(); }); var cache = attachmentCaches.get(value); if (cache) { (0, _mobx.set)(cache, 'attachments', attachments); } else { attachmentCaches.set(value, { attachments: attachments }); } } } else { this.set('attachments', attachments); } } }, { key: "getAttachments", value: function getAttachments() { var record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.record; var uuid = arguments.length > 1 ? arguments[1] : undefined; if (record) { var value = uuid || record.get(this.name); if (value) { var attachmentCaches = record.attachmentCaches; if (attachmentCaches) { var cache = attachmentCaches.get(value); if (cache) { return (0, _mobx.get)(cache, 'attachments'); } } } } else { return this.get('attachments'); } return undefined; } }, { key: "setAttachmentCount", value: function setAttachmentCount(count) { var record = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.record; if (record) { var uuid = record.get(this.name); if (uuid) { var attachmentCaches = (0, _utils2.getIf)(record, 'attachmentCaches', function () { return _mobx.observable.map(); }); var cache = attachmentCaches.get(uuid); if (cache) { (0, _mobx.set)(cache, 'count', count); } else { attachmentCaches.set(uuid, { count: count }); } } } else { this.set('attachmentCount', count); } } }, { key: "getAttachmentCount", value: function getAttachmentCount() { var record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.record; var attachments = this.getAttachments(record); if (attachments) { return attachments.length; } if (record) { var uuid = record.get(this.name); if (uuid) { var attachmentCaches = record.attachmentCaches; if (attachmentCaches) { var cache = attachmentCaches.get(uuid); if (cache) { return (0, _mobx.get)(cache, 'count'); } } } } else { return this.get('attachmentCount'); } return undefined; } }, { key: "ready", value: function ready() { return Promise.resolve(true); } }, { key: "checkDynamicProp", value: function checkDynamicProp(propsName, newProp) { var _this13 = this; var record = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.record; var name = this.name; var lastDynamicProps = record ? function () { var lastDynamicFieldProps = (0, _utils2.getIf)(record, 'lastDynamicFieldProps', function () { return new Map(); }); var last = lastDynamicFieldProps.get(name); if (!last) { last = {}; lastDynamicFieldProps.set(name, last); } return last; }() : (0, _utils2.getIf)(this, 'lastDynamicProps', {}); var oldProp = lastDynamicProps[propsName]; if (!isEqualDynamicProps(oldProp, newProp)) { (0, _raf["default"])((0, _mobx.action)(function () { if (record && oldProp !== undefined) { var _name = _this13.name; var errors = record.getValidationError(_name); if (errors) { if (propsName === 'validator') { record.clearValidationError(_name); } else if (!['label', 'defaultValidationMessages'].includes(propsName)) { errors.some(function (error) { var validationProps = error.validationProps; if (validationProps && Object.keys(validationProps).includes(propsName)) { record.clearValidationError(_name); return true; } return false; }); } } } _this13.handlePropChange(propsName, newProp, oldProp, record); })); } lastDynamicProps[propsName] = newProp; } }, { key: "handlePropChange", value: function handlePropChange(propsName, newProp, oldProp) { var record = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : this.record; if (propsName === 'bind' && this.get('type', record) !== _enum.FieldType.intl) { if (record && !this.isDirty(record)) { if (newProp && oldProp) { record.init(newProp, record.get(oldProp)); } if (oldProp) { record.init(oldProp, undefined); } } return; } if (LOOKUP_SIDE_EFFECT_KEYS.includes(propsName) || ['dynamicProps', 'computedProps'].includes(propsName) && (typeof newProp === 'function' || typeof oldProp === 'function' || newProp && Object.keys(newProp).some(function (key) { return LOOKUP_SIDE_EFFECT_KEYS.includes(key); }) || oldProp && Object.keys(oldProp).some(function (key) { return LOOKUP_SIDE_EFFECT_KEYS.includes(key); }))) { var noCache = this.get('noCache', record); this.set(LOOKUP_DATA, undefined); this.fetchLookup(noCache, record); } if (LOV_SIDE_EFFECT_KEYS.includes(propsName) || ['dynamicProps', 'computedProps'].includes(propsName) && (typeof newProp === 'function' || typeof oldProp === 'function' || newProp && Object.keys(newProp).some(function (key) { return LOV_SIDE_EFFECT_KEYS.includes(key); }) || oldProp && Object.keys(oldProp).some(function (key) { return LOV_SIDE_EFFECT_KEYS.includes(key); }))) { this.fetchLovConfig(record); } } }, { key: "executeDynamicProps", value: function executeDynamicProps(dynamicProps, propsName) { var record = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.record; var dataSet = this.dataSet, name = this.name; var dynamicPropsComputingChains = (0, _utils2.getIf)(this, 'dynamicPropsComputingChains', []); if (dynamicPropsComputingChains.includes(propsName)) { (0, _utils.warning)(false, "Cycle dynamicProps execution of field<".concat(name, ">. [").concat(dynamicPropsComputingChains.join(' -> '), " -> ").concat(propsName, "]")); } else { dynamicPropsComputingChains.push(propsName); try { return dynamicProps({ dataSet: dataSet, record: record, name: name }); } catch (e) { if (record) { throw e; } if (process.env.NODE_ENV !== 'production') { console.warn(e); } } finally { dynamicPropsComputingChains.pop(); } } } }, { key: "findDataSetField", value: function findDataSetField() { var dataSet = this.dataSet, name = this.name, record = this.record; if (record && dataSet && name) { return dataSet.getField(name); } } }]); return Field; }(); exports["default"] = Field; Field.defaultProps = defaultProps; (0, _tslib.__decorate)([_mobx.observable], Field.prototype, "lookupToken", void 0); (0, _tslib.__decorate)([_mobx.observable], Field.prototype, "props", void 0); (0, _tslib.__decorate)([_mobx.observable], Field.prototype, "dirtyProps", void 0); (0, _tslib.__decorate)([_mobx.action], Field.prototype, "set", null); (0, _tslib.__decorate)([_mobx.action], Field.prototype, "replace", null); (0, _tslib.__decorate)([_mobx.action], Field.prototype, "merge", null); (0, _tslib.__decorate)([_mobx.action], Field.prototype, "reset", null); (0, _tslib.__decorate)([_mobx.action], Field.prototype, "commit", null); (0, _tslib.__decorate)([_mobx.action], Field.prototype, "setLovPara", null); (0, _tslib.__decorate)([_mobx.action], Field.prototype, "checkValidity", null); (0, _tslib.__decorate)([_mobx.action], Field.prototype, "fetchLookup", null); (