UNPKG

choerodon-ui

Version:

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

1,298 lines (1,085 loc) 40.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 _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _objectSpread3 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); 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 _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 = _interopRequireDefault(require("./DataSet")); var _Field = _interopRequireDefault(require("./Field")); var _utils = require("./utils"); var ObjectChainValue = _interopRequireWildcard(require("../_util/ObjectChainValue")); var _localeContext = _interopRequireDefault(require("../locale-context")); 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__'; 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); this.dataSetSnapshot = {}; this.cascadeRecordsMap = {}; this.cascading = {}; (0, _mobx.runInAction)(function () { var initData = (0, _mobx.isObservableObject)(data) ? (0, _mobx.toJS)(data) : data; _this.state = _mobx.observable.map(); _this.fields = _mobx.observable.map(); _this.status = status; _this.selectable = true; _this.isSelected = false; _this.isCurrent = false; _this.isCached = false; _this.id = IDGen.next().value; _this.data = initData; _this.dirtyData = _mobx.observable.map(); if (dataSet) { _this.dataSet = dataSet; var fields = dataSet.fields; if (fields) { _this.initFields(fields); } } _this.processData(initData); }); } (0, _createClass2["default"])(Record, [{ key: "toData", value: function toData(needIgnore, noCascade, isCascadeSelect) { var all = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; var status = this.status, dataSet = this.dataSet; 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 json = this.normalizeData(needIgnore); if (cascade && this.normalizeCascadeData(json, normal, isCascadeSelect)) { dirty = true; } 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 dataSetSnapshot = this.dataSetSnapshot, dataSet = this.dataSet, status = this.status, fields = this.fields; return Promise.all([].concat((0, _toConsumableArray2["default"])((0, _toConsumableArray2["default"])(fields.values()).map(function (field) { return all || status !== _enum.RecordStatus.sync ? field.checkValidity() : true; })), (0, _toConsumableArray2["default"])(!noCascade && dataSet ? Object.keys(dataSet.children).map(function (key) { var children = dataSet.children; var snapshot = dataSetSnapshot[key]; var ds = children[key]; var child = dataSet.current === _this2 ? ds : snapshot && new _DataSet["default"]().restore(snapshot); if (child) { return child.validate(); } var dataToJSON = ds.dataToJSON; var cascade = noCascade === undefined && dataToJSON ? (0, _utils.useCascade)(dataToJSON) : !noCascade; return (((0, _utils.useSelected)(dataToJSON) ? _this2.getCascadeSelectedRecords(key) : _this2.getCascadeRecords(key)) || []).map(function (record) { return record.validate(false, !cascade); }); }) : []))).then(function (results) { return results.every(function (result) { return result; }); }); } }, { 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 (dataSet.current === this) { return childDataSet.records.slice(); } var snapshot = this.dataSetSnapshot[fieldName]; if (snapshot) { return snapshot.records; } var cascadeRecords = this.cascadeRecordsMap[fieldName]; if (cascadeRecords) { return cascadeRecords; } var data = this.get(fieldName); if (!this.cascading[fieldName] && (0, _mobx.isObservableArray)(data)) { this.cascading[fieldName] = true; var records = childDataSet.processData(data); this.cascading[fieldName] = false; this.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 _utils.getRecordValue.call(this, this.data, function (child, checkField) { return child.get(checkField); }, fieldName); } }, { key: "set", value: function set(item, value) { var _this3 = this; if ((0, _isString["default"])(item)) { var fieldName = item; var oldName = fieldName; var field = this.getField(fieldName) || this.addField(fieldName); (0, _utils.checkFieldType)(value, field); var bind = field.get('bind'); if (bind) { fieldName = bind; } var oldValue = (0, _mobx.toJS)(this.get(fieldName)); var newValue = (0, _utils.processValue)(value, field); if (!(0, _isSame["default"])((0, _utils.processToJSON)(oldValue), (0, _utils.processToJSON)(newValue))) { var fields = this.fields; ObjectChainValue.set(this.data, fieldName, newValue, fields); if (!this.dirtyData.has(fieldName)) { this.dirtyData.set(fieldName, oldValue); if (this.status === _enum.RecordStatus.sync) { this.status = _enum.RecordStatus.update; } } else if ((0, _isSame["default"])((0, _mobx.toJS)(this.dirtyData.get(fieldName)), newValue)) { this.dirtyData["delete"](fieldName); if (this.status === _enum.RecordStatus.update && this.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 && (checkField === fieldName || checkField === oldName)) { var children = this.children; if (children) { children.forEach(function (record) { return record.set(fieldName, value); }); } } } } (0, _utils.findBindFields)(field, this.fields).forEach(function (oneField) { // oneField.dirty = field.dirty, oneField.validator.reset(); oneField.checkValidity(); }); } else if ((0, _isPlainObject["default"])(item)) { Object.keys(item).forEach(function (key) { return _this3.set(key, item[key]); }); } return this; } }, { key: "getPristineValue", value: function getPristineValue(fieldName) { return fieldName && this.dirtyData.has(fieldName) ? this.dirtyData.get(fieldName) : this.get(fieldName); } }, { key: "init", value: function init(item, value) { var _this4 = this; var fields = this.fields, data = this.data, dirtyData = this.dirtyData; if ((0, _isString["default"])(item)) { var fieldName = item; var field = this.getField(fieldName) || this.addField(fieldName); var newValue = (0, _utils.processValue)(value, field); var bind = field.get('bind'); if (bind) { fieldName = bind; } dirtyData["delete"](fieldName); ObjectChainValue.set(data, fieldName, newValue, fields); field.commit(); } else if ((0, _isPlainObject["default"])(item)) { Object.keys(item).forEach(function (key) { return _this4.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.all((0, _toConsumableArray2["default"])(this.fields.values()).map(function (field) { return field.ready(); })); } }, { key: "tls", value: function () { var _tls = (0, _asyncToGenerator2["default"])( /*#__PURE__*/ _regenerator["default"].mark(function _callee2(name) { var _this5 = 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, _ref) { var _ref2 = (0, _slicedToArray2["default"])(_ref, 2), key = _ref2[0], field = _ref2[1]; if (field.type === _enum.FieldType.intl) { data[key] = (0, _defineProperty2["default"])({}, lang, _this5.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.clear(); 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 _this6 = this; var dataSetSnapshot = this.dataSetSnapshot, fields = this.fields, isRemoved = this.isRemoved, records = this.records, isNew = this.isNew; if (dataSet) { if (isRemoved) { var index = records.indexOf(this); if (index !== -1) { if (dataSet.records === records) { dataSet.totalCount -= 1; } records.splice(index, 1); } return this; } if (isNew) { var _index = records.indexOf(this); if (_index !== -1 && dataSet.records === records) { dataSet.totalCount += 1; } } if (data) { this.processData(data, true); this.pristineData = this.data; var children = dataSet.children; var keys = Object.keys(children); if (keys.length) { var isCurrent = dataSet.current === this; var tmpDs = new _DataSet["default"](); 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 = _this6.getCascadeRecordsIncludeDelete(key); if (cascadeRecords) { cascadeRecords.forEach(function (r) { return r.commit((0, _omit["default"])(r.toData(), ['__dirty']), ds); }); } } }); } } } (0, _toConsumableArray2["default"])(fields.values()).forEach(function (field) { return field.commit(); }); this.status = _enum.RecordStatus.sync; return this; } }, { key: "setState", value: function setState(item, value) { if ((0, _isString["default"])(item)) { this.state.set(item, value); } else if ((0, _isPlainObject["default"])(item)) { this.state.merge(item); } return this; } }, { key: "getState", value: function getState(key) { return this.state.get(key); } }, { key: "treeReduce", value: function treeReduce(fn, initialValue) { return (0, _treeUtils.treeReduce)([this], fn, initialValue); } }, { key: "commitTls", value: function commitTls() { var _this7 = this; var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var name = arguments.length > 1 ? arguments[1] : undefined; var dataSet = this.dataSet; var lang = dataSet ? dataSet.lang : _localeContext["default"].locale.lang; var tlsKey = (0, _configure.getConfig)('tlsKey'); var values = {}; if (!(name in data)) { data[name] = {}; } Object.keys(data).forEach(function (key) { var value = data[key]; var field = _this7.getField(key); if (field && field.dirty) { values["".concat(tlsKey, ".").concat(key, ".").concat(lang)] = _this7.get(key); } _this7.init("".concat(tlsKey, ".").concat(key), value); }); this.set(values); } }, { key: "initFields", value: function initFields(fields) { var _this8 = this; (0, _toConsumableArray2["default"])(fields.keys()).forEach(function (key) { return _this8.addField(key); }); } }, { key: "addField", value: function addField(name) { var _this9 = this; var fieldProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var dataSet = this.dataSet; fieldProps.name = name; return (0, _utils.processIntlField)(name, fieldProps, function (langName, langProps) { var field = new _Field["default"](langProps, dataSet, _this9); _this9.fields.set(langName, field); return field; }, dataSet); } }, { key: "getSortedFields", value: function getSortedFields() { var fields = this.fields; var normalFields = []; var objectBindFields = []; var bindFields = []; var transformResponseField = []; var dynamicFields = []; var dynamicObjectBindFields = []; var dynamicBindFields = []; (0, _toConsumableArray2["default"])(fields.entries()).forEach(function (entry) { var _entry = (0, _slicedToArray2["default"])(entry, 2), field = _entry[1]; var dynamicProps = field.get('dynamicProps'); if (dynamicProps) { if (dynamicProps.bind) { if (field.type === _enum.FieldType.object) { dynamicObjectBindFields.push(entry); } else { dynamicBindFields.push(entry); } } else { dynamicFields.push(entry); } } else { var bind = field.get('bind'); if (bind) { var targetNames = bind.split('.'); targetNames.pop(); if (targetNames.some(function (targetName) { var target = fields.get(targetName); return target && target.get('dynamicProps'); })) { if (field.type === _enum.FieldType.object) { dynamicObjectBindFields.push(entry); } else { dynamicBindFields.push(entry); } } else if (field.get('transformResponse')) { transformResponseField.push(entry); } else if (field.type === _enum.FieldType.object) { objectBindFields.push(entry); } else { bindFields.push(entry); } } else { normalFields.push(entry); } } }); return [].concat(normalFields, objectBindFields, bindFields, transformResponseField, dynamicFields, dynamicObjectBindFields, dynamicBindFields); } }, { 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; this.getSortedFields().forEach(function (_ref3) { var _ref4 = (0, _slicedToArray2["default"])(_ref3, 2), fieldName = _ref4[0], field = _ref4[1]; var value = ObjectChainValue.get(newData, fieldName); var bind = field.get('bind'); var transformResponse = field.get('transformResponse'); if (bind) { fieldName = bind; var bindValue = ObjectChainValue.get(newData, fieldName); if ((0, _isNil["default"])(value) && !(0, _isNil["default"])(bindValue)) { value = bindValue; } } if (transformResponse) { value = transformResponse(value, data); } value = (0, _utils.processValue)(value, field, _this10.isNew); if (value === null) { value = undefined; } if (needMerge && (0, _isObject["default"])(value)) { var oldValue = _this10.get(fieldName); if ((0, _isObject["default"])(oldValue)) { value = (0, _merge["default"])(oldValue, value); } } ObjectChainValue.set(newData, fieldName, value, fields); ObjectChainValue.set(_this10.data, fieldName, value, fields); }); } }, { key: "normalizeData", value: function normalizeData(needIgnore) { var _this11 = this; var fields = this.fields; var json = (0, _mobx.toJS)(this.data); var objectFieldsList = []; var normalFields = []; var ignoreFieldNames = new Set(); (0, _toConsumableArray2["default"])(fields.keys()).forEach(function (key) { var field = _this11.getField(key); if (field) { var ignore = field.get('ignore'); if (needIgnore && (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(json, name); var bind = field.get('bind'); var multiple = field.get('multiple'); var transformRequest = field.get('transformRequest'); if (bind) { value = _this11.get(bind); } if ((0, _isString["default"])(multiple) && (0, _mobx.isArrayLike)(value)) { value = value.map(_utils.processToJSON).join(multiple); } if (transformRequest) { value = transformRequest(value, _this11); } if (value !== undefined) { ObjectChainValue.set(json, name, (0, _utils.processToJSON)(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 isCurrent = dataSet.current === this; Object.keys(children).forEach(function (name) { var snapshot = 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() { return (0, _toConsumableArray2["default"])(this.dirtyData.entries()).reduce(function (data, _ref5) { var _ref6 = (0, _slicedToArray2["default"])(_ref5, 2), key = _ref6[0], value = _ref6[1]; ObjectChainValue.set(data, key, value); return data; }, (0, _mobx.toJS)(this.data)); }, set: function set(data) { var _this13 = this; (0, _mobx.runInAction)(function () { var dirtyData = _this13.dirtyData; var dirtyKeys = (0, _toConsumableArray2["default"])(dirtyData.keys()); if (dirtyKeys.length) { var newData = {}; 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: "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: "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 _this14 = this; var dataSet = this.dataSet; if (dataSet) { var _dataSet$props = dataSet.props, parentField = _dataSet$props.parentField, idField = _dataSet$props.idField; if (parentField && idField) { var children = this.records.filter(function (record) { var childParentId = record.get(parentField); var id = _this14.get(idField); return !(0, _isNil["default"])(childParentId) && !(0, _isNil["default"])(id) && childParentId === id; }); return children.length > 0 ? children : undefined; } } return undefined; } }, { key: "parent", get: function get() { var _this15 = this; var dataSet = this.dataSet; if (dataSet) { var _dataSet$props2 = dataSet.props, parentField = _dataSet$props2.parentField, idField = _dataSet$props2.idField; if (parentField && idField) { return this.records.find(function (record) { var parentId = _this15.get(parentField); var id = record.get(idField); return !(0, _isNil["default"])(parentId) && !(0, _isNil["default"])(id) && parentId === id; }); } } return undefined; } }, { 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 _this16 = this; var fields = this.fields, status = this.status, dataSet = this.dataSet, dirtyData = this.dirtyData; if (status === _enum.RecordStatus.update || dirtyData.size > 0 || (0, _toConsumableArray2["default"])(fields.values()).some(function (_ref7) { var dirty = _ref7.dirty; return dirty; })) { return true; } if (dataSet) { var children = dataSet.children; return Object.keys(children).some(function (key) { return (_this16.getCascadeRecordsIncludeDelete(key) || []).some(_utils.isDirtyRecord); }); } return false; } }, { key: "cascadeParent", get: function get() { var _this17 = 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(_this17) !== -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, "selectable", void 0); (0, _tslib.__decorate)([_mobx.observable], Record.prototype, "isSelected", 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, "isRemoved", null); (0, _tslib.__decorate)([_mobx.computed], Record.prototype, "isNew", 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, "level", 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