UNPKG

choerodon-ui

Version:

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

1,467 lines (1,215 loc) 45.2 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _objectSpread3 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _tslib = require("tslib"); var _mobx = require("mobx"); var _merge = _interopRequireDefault(require("lodash/merge")); var _isObject = _interopRequireDefault(require("lodash/isObject")); var _pick = _interopRequireDefault(require("lodash/pick")); var _isNil = _interopRequireDefault(require("lodash/isNil")); var _isString = _interopRequireDefault(require("lodash/isString")); var _isNumber = _interopRequireDefault(require("lodash/isNumber")); var _omit = _interopRequireDefault(require("lodash/omit")); var _isPlainObject = _interopRequireDefault(require("lodash/isPlainObject")); var _configure = require("../../../lib/configure"); var _DataSet = _interopRequireWildcard(require("./DataSet")); var _utils = require("./utils"); var ObjectChainValue = _interopRequireWildcard(require("../_util/ObjectChainValue")); var _enum = require("./enum"); var _isSame = _interopRequireDefault(require("../_util/isSame")); var _treeUtils = require("../_util/treeUtils"); /** * 记录ID生成器 */ var IDGen = /*#__PURE__*/ _regenerator["default"].mark(function _callee(start) { return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (!true) { _context.next = 5; break; } _context.next = 3; return ++start; case 3: _context.next = 0; break; case 5: case "end": return _context.stop(); } } }, _callee); })(1000); var EXPANDED_KEY = '__EXPANDED_KEY__'; // TODO:Symbol var SELECTABLE_KEY = '__SELECTABLE_KEY__'; // TODO:Symbol var SELECT_KEY = '__SELECT_KEY__'; // TODO:Symbol var UNSELECT_KEY = '__UNSELECT_KEY__'; // TODO:Symbol var Record = /*#__PURE__*/ function () { function Record() { var _this = this; var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var dataSet = arguments.length > 1 ? arguments[1] : undefined; var status = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _enum.RecordStatus.add; (0, _classCallCheck2["default"])(this, Record); (0, _mobx.runInAction)(function () { var initData = (0, _mobx.isObservableObject)(data) ? (0, _mobx.toJS)(data) : data; _this.fields = _mobx.observable.map(); _this.status = status; _this.selectable = true; _this.isSelected = false; _this.id = IDGen.next().value; _this.data = initData; if (dataSet) { _this.dataSet = dataSet; var fields = dataSet.fields; if (fields) { _this.initFields(fields); } } _this.processData(initData); }); } (0, _createClass2["default"])(Record, [{ key: "toData", /** * 转换成普通数据 * 一般用于父级联数据源中的json类型字段 * 禁止通过此方法获取某一个或几个字段值 */ value: function toData(needIgnore, noCascade, isCascadeSelect) { var all = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; var status = this.status, dataSet = this.dataSet, fields = this.fields; var dataToJSON = dataSet && dataSet.dataToJSON; var cascade = noCascade === undefined && dataToJSON ? (0, _utils.useCascade)(dataToJSON) : !noCascade; var normal = all || dataToJSON && (0, _utils.useNormal)(dataToJSON); var dirty = status !== _enum.RecordStatus.sync; var childrenKeys = cascade && dataSet ? Object.keys(dataSet.children) : undefined; var jsonFieldKeys = childrenKeys && (0, _toConsumableArray2["default"])(fields.entries()).reduce(function (fieldKeys, _ref) { var _ref2 = (0, _slicedToArray2["default"])(_ref, 2), key = _ref2[0], field = _ref2[1]; if (field.type === _enum.FieldType.json && childrenKeys.some(function (childKey) { return key === childKey || childKey.startsWith("".concat(key, ".")); })) { fieldKeys.push(key); } return fieldKeys; }, []); var json = this.normalizeData(needIgnore, jsonFieldKeys); if (cascade && this.normalizeCascadeData(json, normal, isCascadeSelect)) { dirty = true; } if (jsonFieldKeys) { jsonFieldKeys.forEach(function (key) { return ObjectChainValue.set(json, key, JSON.stringify(ObjectChainValue.get(json, key)), fields); }); } return (0, _objectSpread3["default"])({}, json, { __dirty: dirty }); } /** * 转换成用于提交的数据 */ }, { key: "toJSONData", value: function toJSONData(noCascade, isCascadeSelect) { var status = this.status; return (0, _objectSpread3["default"])({}, this.toData(true, noCascade, isCascadeSelect, false), (0, _defineProperty2["default"])({ __id: this.id }, (0, _configure.getConfig)('statusKey'), (0, _configure.getConfig)('status')[status === _enum.RecordStatus.sync ? _enum.RecordStatus.update : status])); } }, { key: "validate", value: function validate(all, noCascade) { var _this2 = this; var dataSet = this.dataSet; this.validating = true; var promises = []; if (all || this.status !== _enum.RecordStatus.sync) { (0, _toConsumableArray2["default"])(this.fields.values()).forEach(function (field) { return promises.push(field.checkValidity(false)); }); } if (!noCascade && dataSet) { var childrenKeys = Object.keys(dataSet.children); if (childrenKeys.length) { var dataSetSnapshot = this.dataSetSnapshot, isCurrent = this.isCurrent; childrenKeys.forEach(function (key) { var children = dataSet.children; var snapshot = dataSetSnapshot && dataSetSnapshot[key]; var ds = children[key]; var child = isCurrent ? ds : snapshot && new _DataSet["default"]().restore(snapshot); if (child) { promises.push(child.validate()); } else { var dataToJSON = ds.dataToJSON; var cascade = noCascade === undefined && dataToJSON ? (0, _utils.useCascade)(dataToJSON) : !noCascade; (((0, _utils.useSelected)(dataToJSON) ? _this2.getCascadeSelectedRecords(key) : _this2.getCascadeRecords(key)) || []).forEach(function (record) { return promises.push(record.validate(false, !cascade)); }); } }); } } return Promise.all(promises).then(function (results) { var valid = results.every(function (result) { return result; }); _this2.reportValidity(valid); delete _this2.validating; return valid; })["catch"](function (error) { delete _this2.validating; throw error; }); } }, { key: "reportValidity", value: function reportValidity(result) { var _this3 = this; var dataSet = this.dataSet; if (dataSet && !dataSet.validating) { var prepareForReport = (0, _utils.getIf)(this, 'prepareForReport', {}); if (!result) { prepareForReport.result = result; } if (prepareForReport.timeout) { window.clearTimeout(prepareForReport.timeout); } prepareForReport.timeout = window.setTimeout(function () { dataSet.reportValidity(prepareForReport.result || true); delete _this3.prepareForReport; }, 200); } } }, { key: "getValidationErrors", value: function getValidationErrors() { return (0, _toConsumableArray2["default"])(this.fields.values()).reduce(function (results, field) { if (!field.valid) { results.push({ field: field, errors: field.getValidationErrorValues() }); } return results; }, []); } }, { key: "getField", value: function getField(fieldName) { if (fieldName) { return this.fields.get(fieldName); } } }, { key: "getCascadeRecordsIncludeDelete", value: function getCascadeRecordsIncludeDelete(fieldName) { var dataSet = this.dataSet; if (fieldName && dataSet) { var childDataSet = dataSet.children[fieldName]; if (childDataSet) { if (this.isCurrent) { return childDataSet.records.slice(); } var dataSetSnapshot = this.dataSetSnapshot; var snapshot = dataSetSnapshot && dataSetSnapshot[fieldName]; if (snapshot) { return snapshot.records; } var cascadeRecordsMap = (0, _utils.getIf)(this, 'cascadeRecordsMap', {}); var cascadeRecords = cascadeRecordsMap[fieldName]; if (cascadeRecords) { return cascadeRecords; } var data = this.get(fieldName); var cascading = (0, _utils.getIf)(this, 'cascading', {}); if (!cascading[fieldName] && (0, _mobx.isObservableArray)(data)) { cascading[fieldName] = true; var records = childDataSet.processData(data, this.isNew ? _enum.RecordStatus.add : _enum.RecordStatus.sync); delete cascading[fieldName]; cascadeRecordsMap[fieldName] = records; return records; } } } } }, { key: "getCascadeRecords", value: function getCascadeRecords(fieldName) { var records = this.getCascadeRecordsIncludeDelete(fieldName); if (records) { return records.filter(function (r) { return !r.isRemoved; }); } } }, { key: "getCascadeSelectedRecordsIncludeDelete", value: function getCascadeSelectedRecordsIncludeDelete(fieldName) { var records = this.getCascadeRecordsIncludeDelete(fieldName); if (records) { return records.filter(function (r) { return r.isSelected; }); } } }, { key: "getCascadeSelectedRecords", value: function getCascadeSelectedRecords(fieldName) { var records = this.getCascadeRecordsIncludeDelete(fieldName); if (records) { return records.filter(function (r) { return !r.isRemoved && r.isSelected; }); } } }, { key: "get", value: function get(fieldName) { return (0, _utils.getRecordValue)(this, function (child, checkField) { return child.get(checkField); }, fieldName); } }, { key: "set", value: function set(item, value) { var _this4 = this; if ((0, _isString["default"])(item)) { var oldName = item; var fieldName = (0, _utils.getChainFieldName)(this, oldName); var field = this.getField(oldName) || this.getField(fieldName) || (0, _utils.findBindField)(oldName, fieldName, this) || (0, _DataSet.addRecordField)(this, oldName); (0, _utils.checkFieldType)(value, field); var oldValue = (0, _mobx.toJS)(this.get(fieldName)); var newValue = (0, _utils.processValue)(value, field); var newValueForCompare = (0, _utils.processToJSON)(newValue, field); if (!(0, _isSame["default"])((0, _utils.processToJSON)(oldValue, field), newValueForCompare)) { var _fields = this.fields; ObjectChainValue.set(this.data, fieldName, newValue, _fields); var dirtyData = (0, _utils.getIf)(this, 'dirtyData', function () { return _mobx.observable.map(); }); if (!dirtyData.has(fieldName)) { dirtyData.set(fieldName, oldValue); if (this.status === _enum.RecordStatus.sync) { this.status = _enum.RecordStatus.update; } } else if ((0, _isSame["default"])((0, _utils.processToJSON)(dirtyData.get(fieldName), field), newValueForCompare)) { dirtyData["delete"](fieldName); if (this.status === _enum.RecordStatus.update && dirtyData.size === 0 && (0, _toConsumableArray2["default"])(_fields.values()).every(function (f) { return !f.dirty; })) { this.status = _enum.RecordStatus.sync; } } var dataSet = this.dataSet; if (dataSet) { dataSet.fireEvent(_enum.DataSetEvents.update, { dataSet: dataSet, record: this, name: oldName, value: newValue, oldValue: oldValue }); var checkField = dataSet.props.checkField; if (checkField && fieldName === (0, _utils.getChainFieldName)(this, checkField)) { var children = this.children; if (children) { children.forEach(function (record) { return record.set(fieldName, value); }); } } } } var fields = this.fields; [field].concat((0, _toConsumableArray2["default"])((0, _utils.findBindFields)(field, fields, true)), (0, _toConsumableArray2["default"])((0, _utils.findBindTargetFields)(field, fields, true))).forEach(function (oneField) { return oneField.checkValidity(false); }); } else if ((0, _isPlainObject["default"])(item)) { Object.keys(item).forEach(function (key) { return _this4.set(key, item[key]); }); } return this; } }, { key: "getPristineValue", value: function getPristineValue(fieldName) { if (fieldName) { var chainFieldName = (0, _utils.getChainFieldName)(this, fieldName); var dirtyData = this.dirtyData; if (dirtyData && dirtyData.has(chainFieldName)) { return dirtyData.get(chainFieldName); } return this.get(chainFieldName); } } }, { key: "init", value: function init(item, value) { var _this5 = this; var fields = this.fields, data = this.data, dirtyData = this.dirtyData; if ((0, _isString["default"])(item)) { var oldName = item; var fieldName = (0, _utils.getChainFieldName)(this, oldName); var field = this.getField(oldName) || this.getField(fieldName) || (0, _utils.findBindField)(oldName, fieldName, this) || (0, _DataSet.addRecordField)(this, fieldName); var newValue = (0, _utils.processValue)(value, field); if (dirtyData) { dirtyData["delete"](fieldName); } ObjectChainValue.set(data, fieldName, newValue, fields); field.commit(); } else if ((0, _isPlainObject["default"])(item)) { Object.keys(item).forEach(function (key) { return _this5.init(key, item[key]); }); } return this; } }, { key: "clone", value: function clone() { var dataSet = this.dataSet; var cloneData = this.toData(); if (dataSet) { var primaryKey = dataSet.props.primaryKey; if (primaryKey) { delete cloneData[primaryKey]; } return new Record(cloneData, dataSet); } return new Record(cloneData); } }, { key: "ready", value: function ready() { return Promise.resolve(true); // return Promise.all([...this.fields.values()].map(field => field.ready())); } }, { key: "tls", value: function () { var _tls = (0, _asyncToGenerator2["default"])( /*#__PURE__*/ _regenerator["default"].mark(function _callee2(name) { var _this6 = this; var tlsKey, dataSet, tlsData, axios, lang, primaryKey, newConfig, result, dataKey; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: tlsKey = (0, _configure.getConfig)('tlsKey'); dataSet = this.dataSet; if (!(dataSet && name)) { _context2.next = 16; break; } tlsData = this.get(tlsKey) || {}; if (name in tlsData) { _context2.next = 16; break; } axios = dataSet.axios, lang = dataSet.lang; primaryKey = dataSet.props.primaryKey; newConfig = (0, _utils.axiosConfigAdapter)('tls', dataSet, {}, primaryKey && { key: this.get(primaryKey) }, { name: name, record: this }); if (!(newConfig.url && !this.isNew)) { _context2.next = 15; break; } _context2.next = 11; return axios(newConfig); case 11: result = _context2.sent; if (result) { dataKey = (0, _configure.getConfig)('dataKey'); this.commitTls((0, _utils.generateResponseData)(result, dataKey)[0], name); } _context2.next = 16; break; case 15: this.commitTls((0, _toConsumableArray2["default"])(this.fields.entries()).reduce(function (data, _ref3) { var _ref4 = (0, _slicedToArray2["default"])(_ref3, 2), key = _ref4[0], field = _ref4[1]; if (field.type === _enum.FieldType.intl) { data[key] = (0, _defineProperty2["default"])({}, lang, _this6.get(key)); } return data; }, {}), name); case 16: case "end": return _context2.stop(); } } }, _callee2, this); })); function tls(_x) { return _tls.apply(this, arguments); } return tls; }() }, { key: "reset", value: function reset() { var status = this.status, fields = this.fields, dataSet = this.dataSet, dirty = this.dirty, isRemoved = this.isRemoved; (0, _toConsumableArray2["default"])(fields.values()).forEach(function (field) { return field.commit(); }); if (status === _enum.RecordStatus.update || isRemoved) { this.status = _enum.RecordStatus.sync; } if (isRemoved || dirty) { this.data = (0, _mobx.toJS)(this.pristineData); this.dirtyData = undefined; this.memo = undefined; if (dataSet && !dataSet.resetInBatch) { dataSet.fireEvent(_enum.DataSetEvents.reset, { records: [this], dataSet: dataSet }); } } return this; } }, { key: "save", value: function save() { this.memo = (0, _mobx.toJS)(this.data); return this; } }, { key: "restore", value: function restore() { var memo = this.memo; if (memo) { this.set(memo); this.memo = undefined; } return this; } }, { key: "clear", value: function clear() { return this.set((0, _toConsumableArray2["default"])(this.fields.keys()).reduce(function (obj, key) { obj[key] = null; return obj; }, {})); } }, { key: "commit", value: function commit(data, dataSet) { var _this7 = this; if (dataSet) { var records = this.records; if (this.isRemoved) { var index = records.indexOf(this); if (index !== -1) { if (dataSet.records === records) { dataSet.totalCount -= 1; } records.splice(index, 1); } return this; } if (this.isNew) { var _index = records.indexOf(this); if (_index !== -1 && dataSet.records === records) { dataSet.totalCount += 1; } } if (data) { this.data = data; this.processData(data, true); var children = dataSet.children; var keys = Object.keys(children); if (keys.length) { var isCurrent = this.isCurrent; var tmpDs = new _DataSet["default"](); var dataSetSnapshot = (0, _utils.getIf)(this, 'dataSetSnapshot', {}); keys.forEach(function (key) { var snapshot = dataSetSnapshot[key]; var ds = children[key]; var child = isCurrent ? ds : snapshot && tmpDs.restore(snapshot); if (child) { dataSetSnapshot[key] = child.commitData(data[key] || []).snapshot(); } else { var cascadeRecords = _this7.getCascadeRecordsIncludeDelete(key); if (cascadeRecords) { cascadeRecords.forEach(function (r) { return r.commit((0, _omit["default"])(r.toData(), ['__dirty']), ds); }); } } }); } } } this.dirtyData = undefined; (0, _toConsumableArray2["default"])(this.fields.values()).forEach(function (field) { return field.commit(); }); this.status = _enum.RecordStatus.sync; return this; } }, { key: "setState", value: function setState(item, value) { var state = (0, _utils.getIf)(this, 'state', function () { return _mobx.observable.map(); }); if ((0, _isString["default"])(item)) { state.set(item, value); } else if ((0, _isPlainObject["default"])(item)) { state.merge(item); } return this; } }, { key: "getState", value: function getState(key) { var state = this.state; return state && state.get(key); } }, { key: "treeReduce", value: function treeReduce(fn, initialValue) { return (0, _treeUtils.treeReduce)([this], fn, initialValue); } }, { key: "commitTls", value: function commitTls() { var _this8 = this; var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var name = arguments.length > 1 ? arguments[1] : undefined; var tlsKey = (0, _configure.getConfig)('tlsKey'); if (!(name in data)) { data[name] = {}; } Object.keys(data).forEach(function (key) { var value = data[key]; var field = _this8.getField(key); if (field) { var transformResponse = field.get('transformResponse'); if (transformResponse) { var originValue = (0, _objectSpread3["default"])({}, value); Object.keys(value).forEach(function (language) { value[language] = transformResponse(value[language], originValue); }); } } ObjectChainValue.set(_this8.data, "".concat(tlsKey, ".").concat(key), value); }); } }, { key: "initFields", value: function initFields(fields) { var _this9 = this; (0, _toConsumableArray2["default"])(fields.keys()).forEach(function (key) { return (0, _DataSet.addRecordField)(_this9, key); }); } }, { key: "addField", value: function addField(name) { var fieldProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var old = this.fields.get(name); var field = (0, _DataSet.addRecordField)(this, name, fieldProps); if (!old) { var data = (0, _mobx.toJS)(this.data); var newData = (0, _objectSpread3["default"])({}, data); this.processFieldValue(name, field, this.fields, newData, data); } return field; } }, { key: "processFieldValue", value: function processFieldValue(fieldName, field, fields, newData, data, needMerge) { var value = ObjectChainValue.get(newData, fieldName); var chainFieldName = (0, _utils.getChainFieldName)(this, fieldName); var transformResponse = field.get('transformResponse'); if (chainFieldName !== fieldName) { var bindValue = ObjectChainValue.get(newData, chainFieldName); if ((0, _isNil["default"])(value) && !(0, _isNil["default"])(bindValue)) { value = bindValue; } } if (transformResponse) { value = transformResponse(value, data); } value = (0, _utils.processValue)(value, field, !needMerge && this.isNew); if (value === null) { value = undefined; } if (needMerge && (0, _isObject["default"])(value)) { var oldValue = ObjectChainValue.get(this.data, chainFieldName); if ((0, _isObject["default"])(oldValue)) { value = (0, _merge["default"])(oldValue, value); } } ObjectChainValue.set(newData, chainFieldName, value, fields); ObjectChainValue.set(this.data, chainFieldName, value, fields); } }, { key: "processData", value: function processData() { var _this10 = this; var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var needMerge = arguments.length > 1 ? arguments[1] : undefined; var newData = (0, _objectSpread3["default"])({}, data); var fields = this.fields; (0, _utils.getSortedFields)(fields).forEach(function (_ref5) { var _ref6 = (0, _slicedToArray2["default"])(_ref5, 2), fieldName = _ref6[0], field = _ref6[1]; return _this10.processFieldValue(fieldName, field, fields, newData, data, needMerge); }); } }, { key: "normalizeData", value: function normalizeData(needIgnore, jsonFields) { var _this11 = this; var fields = this.fields, dataSet = this.dataSet; var dataToJSON = dataSet && dataSet.dataToJSON; var onlyDirtyField = needIgnore && dataToJSON ? (0, _utils.useDirtyField)(dataToJSON) : false; var neverKeys = onlyDirtyField ? (0, _utils.getUniqueKeysAndPrimaryKey)(dataSet) : []; var json = onlyDirtyField ? (0, _pick["default"])(this.data, neverKeys) : (0, _mobx.toJS)(this.data); var fieldIgnore = onlyDirtyField ? _enum.FieldIgnore.clean : undefined; var objectFieldsList = []; var normalFields = []; var ignoreFieldNames = new Set(); (0, _toConsumableArray2["default"])(fields.entries()).forEach(function (_ref7) { var _ref8 = (0, _slicedToArray2["default"])(_ref7, 2), key = _ref8[0], field = _ref8[1]; if (field && (!jsonFields || !jsonFields.includes(key))) { var ignore = field.get('ignore') || fieldIgnore; if (needIgnore && !neverKeys.includes(key) && (ignore === _enum.FieldIgnore.always || ignore === _enum.FieldIgnore.clean && !field.dirty)) { ignoreFieldNames.add(key); } else { var type = field.get('type'); if (type === _enum.FieldType.object) { var level = key.split('.').length - 1; objectFieldsList[level] = (objectFieldsList[level] || []).concat(field); } else { normalFields.push(field); } } } }); [].concat(objectFieldsList, [normalFields]).forEach(function (items) { if (items) { items.forEach(function (field) { var name = field.name; var value = ObjectChainValue.get(onlyDirtyField ? (0, _objectSpread3["default"])({}, _this11.data, {}, json) : json, name); var bind = field.get('bind'); var transformRequest = field.get('transformRequest'); if (bind) { value = _this11.get((0, _utils.getChainFieldName)(_this11, name)); } var old = value; value = (0, _utils.processToJSON)(value, field); if (transformRequest) { // compatible old logic value = (0, _isString["default"])(field.get('multiple')) && (0, _mobx.isArrayLike)(old) ? transformRequest(value, _this11) : (0, _utils.processToJSON)(transformRequest(old, _this11), field); } if (value !== undefined) { ObjectChainValue.set(json, name, value, fields); } else { ignoreFieldNames.add(name); } }); } }); (0, _toConsumableArray2["default"])(ignoreFieldNames).forEach(function (key) { return ObjectChainValue.remove(json, key); }); return json; } }, { key: "normalizeCascadeData", value: function normalizeCascadeData(json, normal, isSelect) { var _this12 = this; var dataSetSnapshot = this.dataSetSnapshot, dataSet = this.dataSet, fields = this.fields, isRemoved = this.isRemoved; if (dataSet) { var dirty = false; var children = dataSet.children; if (isRemoved) { (0, _utils.childrenInfoForDelete)(json, children); } else { var keys = Object.keys(children); if (keys.length) { var isCurrent = this.isCurrent; keys.forEach(function (name) { var snapshot = dataSetSnapshot && dataSetSnapshot[name]; var child = !isCurrent && snapshot && new _DataSet["default"]().restore(snapshot) || children[name]; if (child) { var dataToJSON = child.dataToJSON; var records = _this12.getCascadeRecordsIncludeDelete(name); var selected = isSelect || (0, _utils.useSelected)(dataToJSON) ? _this12.getCascadeSelectedRecordsIncludeDelete(name) : records; var jsonArray = normal || (0, _utils.useNormal)(dataToJSON) ? records && (0, _utils.generateData)(records) : selected && (0, _utils.generateJSONData)(child, selected); if (jsonArray) { if (jsonArray.dirty) { dirty = true; } ObjectChainValue.set(json, name, jsonArray.data, fields); } } }); } } return dirty; } } }, { key: "pristineData", get: function get() { var dirtyData = this.dirtyData; var data = (0, _mobx.toJS)(this.data); if (dirtyData) { (0, _toConsumableArray2["default"])(dirtyData.entries()).forEach(function (_ref9) { var _ref10 = (0, _slicedToArray2["default"])(_ref9, 2), key = _ref10[0], value = _ref10[1]; return ObjectChainValue.set(data, key, value); }); } return data; }, set: function set(data) { var _this13 = this; (0, _mobx.runInAction)(function () { var dirtyData = _this13.dirtyData; if (dirtyData) { var dirtyKeys = (0, _toConsumableArray2["default"])(dirtyData.keys()); var newData = {}; if (dirtyKeys.length) { dirtyKeys.forEach(function (key) { var item = ObjectChainValue.get(_this13.data, key); ObjectChainValue.set(newData, key, item); var newItem = ObjectChainValue.get(data, key); if ((0, _isSame["default"])(item, newItem)) { dirtyData["delete"](key); } else { dirtyData.set(key, newItem); } }); } _this13.data = (0, _merge["default"])({}, data, newData); } else { _this13.data = data; } }); } }, { key: "selectable", get: function get() { return this.getState(SELECTABLE_KEY); }, set: function set(selectable) { var _this14 = this; (0, _mobx.runInAction)(function () { if (!selectable) { _this14.isSelected = false; } _this14.setState(SELECTABLE_KEY, selectable); }); } }, { key: "isDataSetInAllPageSelection", get: function get() { var dataSet = this.dataSet; if (dataSet) { return dataSet.isAllPageSelection; } return false; } }, { key: "isSelected", get: function get() { if (this.isDataSetInAllPageSelection) { return !this.getState(UNSELECT_KEY); } return this.getState(SELECT_KEY); }, set: function set(isSelected) { if (this.isDataSetInAllPageSelection) { this.setState(UNSELECT_KEY, !isSelected); } else { this.setState(SELECT_KEY, isSelected); } } }, { key: "key", get: function get() { if (!this.isNew) { var dataSet = this.dataSet; if (dataSet) { var primaryKey = dataSet.props.primaryKey; if (primaryKey) { var key = this.get(primaryKey); if ((0, _isString["default"])(key) || (0, _isNumber["default"])(key)) { return key; } } } } return this.id; } }, { key: "index", get: function get() { var dataSet = this.dataSet; if (dataSet) { return dataSet.indexOf(this); } return -1; } }, { key: "indexInParent", get: function get() { var parent = this.parent, dataSet = this.dataSet; if (parent && parent.children) { return parent.children.indexOf(this); } if (dataSet) { return dataSet.treeRecords.indexOf(this); } return -1; } }, { key: "isRemoved", get: function get() { return this.status === _enum.RecordStatus["delete"]; } }, { key: "isNew", get: function get() { return this.status === _enum.RecordStatus.add; } }, { key: "isSelectionIndeterminate", get: function get() { var dataSet = this.dataSet; if (dataSet && dataSet.selection === _enum.DataSetSelection.multiple) { var children = this.children; if (children) { var checkedLength = 0; return children.some(function (record) { if (record.isSelectionIndeterminate) { return true; } if (record.isSelected) { checkedLength += 1; } return false; }) || checkedLength > 0 && checkedLength !== children.length; } } return false; } }, { key: "isIndeterminate", get: function get() { var dataSet = this.dataSet; if (dataSet) { var checkField = dataSet.props.checkField; if (checkField) { var field = this.getField(checkField); var trueValue = field ? field.get(_enum.BooleanValue.trueValue) : true; var children = this.children; if (children) { var checkedLength = 0; return children.some(function (record) { if (record.isIndeterminate) { return true; } if (record.get(checkField) === trueValue) { checkedLength += 1; } return false; }) || checkedLength > 0 && checkedLength !== children.length; } } } return false; } }, { key: "isExpanded", get: function get() { var dataSet = this.dataSet; if (dataSet) { var expandField = dataSet.props.expandField; if (expandField) { var expanded = this.get(expandField); var field = this.getField(expandField); return expanded === (field ? field.get(_enum.BooleanValue.trueValue) : true); } } return this.getState(EXPANDED_KEY); }, set: function set(expand) { var dataSet = this.dataSet; if (dataSet) { var expandField = dataSet.props.expandField; if (expandField) { var field = this.getField(expandField); this.set(expandField, field ? expand ? field.get(_enum.BooleanValue.trueValue) : field.get(_enum.BooleanValue.falseValue) : expand); } else { this.setState(EXPANDED_KEY, expand); } } } }, { key: "previousRecord", get: function get() { var parent = this.parent, dataSet = this.dataSet; var children; if (parent) { children = parent.children; } else if (dataSet) { children = dataSet.treeData; } if (children) { return children[children.indexOf(this) - 1]; } return undefined; } }, { key: "nextRecord", get: function get() { var parent = this.parent, dataSet = this.dataSet; var children; if (parent) { children = parent.children; } else if (dataSet) { children = dataSet.treeData; } if (children) { return children[children.indexOf(this) + 1]; } return undefined; } }, { key: "records", get: function get() { var dataSet = this.dataSet; if (dataSet) { var cascadeParent = this.cascadeParent; if (cascadeParent && !cascadeParent.isCurrent) { return cascadeParent.getCascadeRecordsIncludeDelete(dataSet.parentName) || []; } return dataSet.records; } return []; } }, { key: "children", get: function get() { var _this15 = this; var dataSet = this.dataSet; if (dataSet) { var _dataSet$props = dataSet.props, parentField = _dataSet$props.parentField, idField = _dataSet$props.idField, childrenField = _dataSet$props.childrenField; if (childrenField) { return this.$children; } if (parentField && idField) { var children = this.records.filter(function (record) { var childParentId = record.get(parentField); var id = _this15.get(idField); return !(0, _isNil["default"])(childParentId) && !(0, _isNil["default"])(id) && childParentId === id; }); return children.length > 0 ? children : undefined; } } return undefined; }, set: function set(children) { var dataSet = this.dataSet; if (dataSet) { var childrenField = dataSet.props.childrenField; if (childrenField) { this.$children = children; } else { throw new Error('Setter of record.children only support in `childrenField` mode.'); } } } }, { key: "parent", get: function get() { var _this16 = this; var dataSet = this.dataSet; if (dataSet) { var _dataSet$props2 = dataSet.props, parentField = _dataSet$props2.parentField, idField = _dataSet$props2.idField, childrenField = _dataSet$props2.childrenField; if (childrenField) { return this.$parent; } if (parentField && idField) { return this.records.find(function (record) { var parentId = _this16.get(parentField); var id = record.get(idField); return !(0, _isNil["default"])(parentId) && !(0, _isNil["default"])(id) && parentId === id; }); } } return undefined; }, set: function set(parent) { var dataSet = this.dataSet; if (dataSet) { var childrenField = dataSet.props.childrenField; if (childrenField) { this.$parent = parent; } else { throw new Error('Setter of record.parent only support in `childrenField` mode.'); } } } }, { key: "parents", get: function get() { var parent = this.parent; if (parent) { return [parent].concat((0, _toConsumableArray2["default"])(parent.parents)); } return []; } }, { key: "path", get: function get() { return [].concat((0, _toConsumableArray2["default"])(this.parents), [this]); } }, { key: "level", get: function get() { var parent = this.parent; if (parent) { return parent.level + 1; } return 0; } }, { key: "dirty", get: function get() { var _this17 = this; var status = this.status; if (status === _enum.RecordStatus.update) { return true; } var dirtyData = this.dirtyData; if (dirtyData && dirtyData.size > 0) { return true; } var dataSet = this.dataSet; if (dataSet) { var children = dataSet.children; return Object.keys(children).some(function (key) { return (_this17.getCascadeRecordsIncludeDelete(key) || []).some(_utils.isDirtyRecord); }); } return false; } }, { key: "cascadeParent", get: function get() { var _this18 = this; var dataSet = this.dataSet; if (dataSet) { var parent = dataSet.parent, parentName = dataSet.parentName; if (parent && parentName) { return parent.cascadeRecords.find(function (record) { return (record.getCascadeRecordsIncludeDelete(parentName) || []).indexOf(_this18) !== -1; }); } } return undefined; } }]); return Record; }(); exports["default"] = Record; (0, _tslib.__decorate)([_mobx.observable], Record.prototype, "fields", void 0); (0, _tslib.__decorate)([_mobx.observable], Record.prototype, "data", void 0); (0, _tslib.__decorate)([_mobx.observable], Record.prototype, "dirtyData", void 0); (0, _tslib.__decorate)([_mobx.computed], Record.prototype, "pristineData", null); (0, _tslib.__decorate)([_mobx.observable], Record.prototype, "status", void 0); (0, _tslib.__decorate)([_mobx.observable], Record.prototype, "isCurrent", void 0); (0, _tslib.__decorate)([_mobx.observable], Record.prototype, "isCached", void 0); (0, _tslib.__decorate)([_mobx.observable], Record.prototype, "editing", void 0); (0, _tslib.__decorate)([_mobx.observable], Record.prototype, "pending", void 0); (0, _tslib.__decorate)([_mobx.observable], Record.prototype, "childrenLoaded", void 0); (0, _tslib.__decorate)([_mobx.observable], Record.prototype, "state", void 0); (0, _tslib.__decorate)([_mobx.computed], Record.prototype, "key", null); (0, _tslib.__decorate)([_mobx.computed], Record.prototype, "index", null); (0, _tslib.__decorate)([_mobx.computed], Record.prototype, "indexInParent", null); (0, _tslib.__decorate)([_mobx.computed], Record.prototype, "isSelectionIndeterminate", null); (0, _tslib.__decorate)([_mobx.computed], Record.prototype, "isIndeterminate", null); (0, _tslib.__decorate)([_mobx.computed], Record.prototype, "isExpanded", null); (0, _tslib.__decorate)([_mobx.computed], Record.prototype, "previousRecord", null); (0, _tslib.__decorate)([_mobx.computed], Record.prototype, "nextRecord", null); (0, _tslib.__decorate)([_mobx.computed], Record.prototype, "records", null); (0, _tslib.__decorate)([_mobx.computed], Record.prototype, "children", null); (0, _tslib.__decorate)([_mobx.computed], Record.prototype, "parent", null); (0, _tslib.__decorate)([_mobx.computed], Record.prototype, "parents", null); (0, _tslib.__decorate)([_mobx.computed], Record.prototype, "path", null); (0, _tslib.__decorate)([_mobx.computed], Record.prototype, "dirty", null); (0, _tslib.__decorate)([_mobx.computed], Record.prototype, "cascadeParent", null); (0, _tslib.__decorate)([_mobx.action], Record.prototype, "set", null); (0, _tslib.__decorate)([_mobx.action], Record.prototype, "init", null); (0, _tslib.__decorate)([_mobx.action], Record.prototype, "tls", null); (0, _tslib.__decorate)([_mobx.action], Record.prototype, "reset", null); (0, _tslib.__decorate)([_mobx.action], Record.prototype, "save", null); (0, _tslib.__decorate)([_mobx.action], Record.prototype, "restore", null); (0, _tslib.__decorate)([_mobx.action], Record.prototype, "clear", null); (0, _tslib.__decorate)([_mobx.action], Record.prototype, "commit", null); (0, _tslib.__decorate)([_mobx.action], Record.prototype, "setState", null); (0, _tslib.__decorate)([_mobx.action], Record.prototype, "commitTls", null); (0, _tslib.__decorate)([_mobx.action], Record.prototype, "addField", null); //# sourceMappingURL=Record.js.map