UNPKG

choerodon-ui

Version:

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

1,710 lines (1,459 loc) 152 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"]; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"]; Object.defineProperty(exports, "__esModule", { value: true }); exports.addDataSetField = addDataSetField; exports["default"] = void 0; exports.initDataSetField = initDataSetField; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); 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 _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper")); var _tslib = require("tslib"); var _mobx = require("mobx"); var _axios = _interopRequireDefault(require("axios")); var _omit = _interopRequireDefault(require("lodash/omit")); var _flatMap = _interopRequireDefault(require("lodash/flatMap")); var _isNumber = _interopRequireDefault(require("lodash/isNumber")); var _isArray = _interopRequireDefault(require("lodash/isArray")); var _isObject = _interopRequireDefault(require("lodash/isObject")); var _isNil = _interopRequireDefault(require("lodash/isNil")); var _defer = _interopRequireDefault(require("lodash/defer")); var _isString = _interopRequireDefault(require("lodash/isString")); var _isPlainObject = _interopRequireDefault(require("lodash/isPlainObject")); var _isFunction = _interopRequireDefault(require("lodash/isFunction")); var _debounce = _interopRequireDefault(require("lodash/debounce")); var _union = _interopRequireDefault(require("lodash/union")); var _utils = require("../utils"); var _configure = require("../configure"); var _localeContext = _interopRequireWildcard(require("../locale-context")); var _axios2 = _interopRequireDefault(require("../axios")); var _Record = _interopRequireDefault(require("./Record")); var _Field = _interopRequireDefault(require("./Field")); var _formatter = require("../formatter"); var _utils2 = require("./utils"); var _eventManager = _interopRequireDefault(require("../event-manager")); var _DataSetSnapshot = _interopRequireDefault(require("./DataSetSnapshot")); var _enum = require("./enum"); var ObjectChainValue = _interopRequireWildcard(require("../object-chain-value")); var _Transport = _interopRequireDefault(require("./Transport")); var _promiseQueue = _interopRequireDefault(require("../promise-queue")); var _DataSetRequestError = _interopRequireDefault(require("./DataSetRequestError")); var _FeedBack = _interopRequireDefault(require("./FeedBack")); var _iteratorHelper = require("../iterator-helper"); var _Validator = _interopRequireDefault(require("../validator/Validator")); var _treeHelper = require("../tree-helper"); var ALL_PAGE_SELECTION = '__ALL_PAGE_SELECTION__'; // TODO:Symbol var QUERY_PARAMETER = '__QUERY_PARAMETER__'; // TODO:Symbol var TOTAL_KEY = '__TOTAL__'; // TODO:Symbol function addDataSetField(dataSet, name) { var field = new _Field["default"]({ name: name }, dataSet); dataSet.fields.set(name, field); return field; } function initDataSetField(dataSet, name, fieldProps) { return (0, _utils2.processIntlField)(name, function (langProps) { return new _Field["default"](langProps, dataSet); }, fieldProps, dataSet); } function processOneData(dataSet) { var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var status = arguments.length > 2 ? arguments[2] : undefined; var childrenField = arguments.length > 3 ? arguments[3] : undefined; var parent = arguments.length > 4 ? arguments[4] : undefined; var all = arguments.length > 5 ? arguments[5] : undefined; if (data instanceof _Record["default"]) { if (data.dataSet !== dataSet) { data.dataSet = dataSet; data.status = status; } if (childrenField) { var children = data.children; if (children) { children.forEach(function (r) { return processOneData(dataSet, r, status, childrenField); }); } } if (all) { all.push(data); } return data; } var self = new _Record["default"](data, dataSet, status); if (parent) { self.parent = parent; } if (all) { all.push(self); } if (childrenField) { var _children = data[childrenField]; if (_children) { // eslint-disable-next-line no-use-before-define var normalData = processNormalData(dataSet, _children, status, childrenField, self, all); self.children = normalData; } } return self; } function processTreeData(dataSet, allData, status, parentField, idField) { var allMap = new Map(); allData.forEach(function (data, index) { var record = processOneData(dataSet, data, status); var id = !(0, _isNil["default"])(data[idField]) ? data[idField] : "__empty_".concat(index); allMap.set(String(id), record); }); allMap.forEach(function (record) { var parent = allMap.get(String(record.get(parentField))); if (parent) { if (parent.children) { parent.children.push(record); } else { parent.children = [record]; } record.parent = parent; } }); return Array.from(allMap.values()); } function processNormalData(dataSet, allData) { var status = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _enum.RecordStatus.sync; var childrenField = arguments.length > 3 ? arguments[3] : undefined; var parent = arguments.length > 4 ? arguments[4] : undefined; var all = arguments.length > 5 ? arguments[5] : undefined; return allData.map(function (data) { return processOneData(dataSet, data, status, childrenField, parent, all); }); } function updateCachedRecords(dataSet, cachedRecords, status) { if (dataSet.cacheSelectionKeys) { dataSet.cachedRecords = (0, _iteratorHelper.iteratorSliceToArray)(dataSet.cachedRecords.reduce(function (set, record) { if (!set.has(record) && (status && record.status !== status || (dataSet.isAllPageSelection ? !record.isSelected : record.isSelected))) { set.add(record); } return set; }, new Set(cachedRecords)).values()); } else { dataSet.cachedRecords = cachedRecords; } } var DataSet = /*#__PURE__*/function (_EventManager) { (0, _inherits2["default"])(DataSet, _EventManager); var _super = (0, _createSuper2["default"])(DataSet); function DataSet(props, context) { var _this; (0, _classCallCheck2["default"])(this, DataSet); _this = _super.call(this); _this.children = {}; _this.pending = new _promiseQueue["default"](); _this.performance = { timing: { fetchStart: 0, fetchEnd: 0, loadStart: 0, loadEnd: 0 } }; _this.originalData = []; _this.resetInBatch = false; _this.validating = false; _this.inBatchSelection = false; _this.syncChildrenRemote = (0, _debounce["default"])(function (remoteKeys, current) { var _assertThisInitialize = (0, _assertThisInitialized2["default"])(_this), children = _assertThisInitialize.children; remoteKeys.forEach(function (childName) { return _this.syncChild(children[childName], current, childName); }); }, 300); if (context && !(0, _isFunction["default"])(context.getConfig)) { throw new Error('The type of the second parameter of the DataSet constructor is wrong. Please not pass the parameter or pass a DataSetContext type parameter instead.'); } (0, _mobx.runInAction)(function () { props = (0, _objectSpread3["default"])((0, _objectSpread3["default"])({}, DataSet.defaultProps), props); _this.props = props; _this.context = context; var _props = props, data = _props.data, fields = _props.fields, queryFields = _props.queryFields, queryDataSet = _props.queryDataSet, autoQuery = _props.autoQuery, autoCreate = _props.autoCreate, pageSize = _props.pageSize, selection = _props.selection, events = _props.events, id = _props.id, name = _props.name, children = _props.children, _props$queryParameter = _props.queryParameter, queryParameter = _props$queryParameter === void 0 ? {} : _props$queryParameter, dataToJSON = _props.dataToJSON, selectionStrategy = _props.selectionStrategy, _props$status = _props.status, status = _props$status === void 0 ? _enum.DataSetStatus.ready : _props$status; _this.name = name; _this.selectionStrategy = selectionStrategy; _this.dataToJSON = dataToJSON; _this.records = []; _this.state = _mobx.observable.map(); _this.fields = _mobx.observable.map(fields ? _this.initFields(fields) : undefined); _this.status = status; _this.currentPage = 1; _this.cachedRecords = []; _this.queryParameter = queryParameter; _this.pageSize = pageSize; _this.selection = selection; _this.initCombineSort(); _this.processListener(); if (id) { _this.id = id; } if (children) { _this.initChildren(children); } if (events) { _this.initEvents(events); } _this.initQueryDataSet(queryDataSet, queryFields); if (data) { var length = data.length; if (length) { _this.loadData(data, length); } } // ssr do not auto query if (autoQuery && typeof window !== 'undefined') { _this.query(); } else if (autoCreate && _this.records.length === 0) { _this.create(); } }); return _this; } (0, _createClass2["default"])(DataSet, [{ key: "queryParameter", get: function get() { var queryParameterMap = this.getState(QUERY_PARAMETER); if (queryParameterMap) { return queryParameterMap.toPOJO(); } return {}; }, set: function set(queryParameter) { this.setState(QUERY_PARAMETER, _mobx.observable.map(queryParameter)); } }, { key: "totalCount", get: function get() { var total = this.getState(TOTAL_KEY); if (total !== undefined && isFinite(total)) { return total; } var paging = this.paging, _this$props = this.props, idField = _this$props.idField, parentField = _this$props.parentField, childrenField = _this$props.childrenField; if (paging === 'server' && (idField && parentField || childrenField)) { return this.treeData.length; } return this.length; }, set: function set(totalCount) { this.setState(TOTAL_KEY, totalCount); } }, { key: "realTotalCount", get: function get() { return this.getState(TOTAL_KEY); } }, { key: "cachedSelected", get: function get() { var isAllPageSelection = this.isAllPageSelection; return this.cachedRecords.filter(function (r) { return isAllPageSelection ? !r.isSelected : r.isSelected; }); }, set: function set(cachedSelected) { this.setCachedSelected(cachedSelected); } }, { key: "cachedUnSelected", get: function get() { return this.cachedRecords.filter(function (r) { return !r.isSelected; }); } }, { key: "cachedDirtyRecords", get: function get() { var created = []; var updated = []; var destroyed = []; this.cachedRecords.forEach(function (record) { switch (record.status) { case _enum.RecordStatus.add: created.push(record); break; case _enum.RecordStatus.update: updated.push(record); break; case _enum.RecordStatus["delete"]: destroyed.push(record); break; default: { if (record.dirty) { updated.push(record); } } } }); return [created, updated, destroyed]; } }, { key: "cachedCreated", get: function get() { return this.cachedDirtyRecords[0]; } }, { key: "cachedUpdated", get: function get() { return this.cachedDirtyRecords[1]; } }, { key: "cachedDestroyed", get: function get() { return this.cachedDirtyRecords[2]; } }, { key: "cachedModified", get: function get() { return this.cachedCreated.concat(this.cachedUpdated, this.cachedDestroyed); }, set: function set(cachedModified) { this.setCachedModified(cachedModified); } }, { key: "isAllPageSelection", get: function get() { return this.getState(ALL_PAGE_SELECTION) === true; } }, { key: "cascadeRecords", get: function get() { var parent = this.parent, parentName = this.parentName; if (parent && parentName) { return parent.cascadeRecords.reduce(function (array, record) { return array.concat.apply(array, (0, _toConsumableArray2["default"])(record.getCascadeRecordsIncludeDelete(parentName) || [])); }, []); } return this.records; } }, { key: "axios", get: function get() { return this.props.axios || this.getConfig('axios') || _axios2["default"]; } }, { key: "dataKey", get: function get() { var _this$props$dataKey = this.props.dataKey, dataKey = _this$props$dataKey === void 0 ? this.getConfig('dataKey') : _this$props$dataKey; return dataKey; } }, { key: "totalKey", get: function get() { return this.props.totalKey || this.getConfig('totalKey'); } }, { key: "countKey", get: function get() { return this.props.countKey || this.getConfig('countKey'); } }, { key: "lang", get: function get() { return (0, _mobx.get)(this.props, 'lang') || _localeContext["default"].locale.lang; }, set: function set(lang) { var _this2 = this; (0, _mobx.runInAction)(function () { (0, _mobx.set)(_this2.props, 'lang', lang); }); } }, { key: "queryDataSet", get: function get() { return (0, _mobx.get)(this.props, 'queryDataSet'); } /** * 设置查询的DataSet. * @param {DataSet} ds DataSet. */ , set: function set(ds) { var _this3 = this; (0, _mobx.runInAction)(function () { (0, _mobx.set)(_this3.props, 'queryDataSet', ds); if (ds && !ds.current) { // 初始化时如果直接执行create,mobx会报错,所以使用了defer ds.pending.add(new Promise(function (reslove) { (0, _defer["default"])(function () { if (ds.records.length === 0) { ds.create(); } else if (!ds.current) { ds.first(); } reslove(); }); })); } }); } }, { key: "queryUrl", get: function get() { return (0, _mobx.get)(this.props, 'queryUrl') || this.name && "/dataset/".concat(this.name, "/queries"); } /** * 设置提交的Url. * @param {String} url 提交的Url. */ , set: function set(url) { var _this4 = this; (0, _mobx.runInAction)(function () { (0, _mobx.set)(_this4.props, 'queryUrl', url); }); } }, { key: "submitUrl", get: function get() { return (0, _mobx.get)(this.props, 'submitUrl') || this.name && "/dataset/".concat(this.name, "/mutations"); } /** * 设置查询的Url. * @param {String} url 查询的Url. */ , set: function set(url) { var _this5 = this; (0, _mobx.runInAction)(function () { (0, _mobx.set)(_this5.props, 'submitUrl', url); }); } }, { key: "tlsUrl", get: function get() { return (0, _mobx.get)(this.props, 'tlsUrl') || this.name && "/dataset/".concat(this.name, "/languages"); } /** * 设置多语言的Url. * @param {String} url 多语言的Url. */ , set: function set(url) { var _this6 = this; (0, _mobx.runInAction)(function () { (0, _mobx.set)(_this6.props, 'tlsUrl', url); }); } }, { key: "validateUrl", get: function get() { return (0, _mobx.get)(this.props, 'validateUrl') || this.name && "/dataset/".concat(this.name, "/validate"); } /** * 设置远程校验查询请求的url. * @param {String} url 远程校验查询请求的url. */ , set: function set(url) { var _this7 = this; (0, _mobx.runInAction)(function () { (0, _mobx.set)(_this7.props, 'validateUrl', url); }); } }, { key: "exportUrl", get: function get() { return (0, _mobx.get)(this.props, 'exportUrl') || this.name && "/dataset/".concat(this.name, "/export"); } /** * 设置导出请求的url. * @param {String} url 远程校验查询请求的url. */ , set: function set(url) { var _this8 = this; (0, _mobx.runInAction)(function () { (0, _mobx.set)(_this8.props, 'exportUrl', url); }); } /** * 服务端导出还是客户端导出 */ }, { key: "exportMode", get: function get() { return this.props.exportMode || this.getConfig('exportMode') || _enum.ExportMode.server; } }, { key: "transport", get: function get() { return new _Transport["default"](this.props.transport, this); }, set: function set(transport) { var _this9 = this; (0, _mobx.runInAction)(function () { _this9.props.transport = transport instanceof _Transport["default"] ? transport.props : transport; }); } }, { key: "feedback", get: function get() { return (0, _objectSpread3["default"])((0, _objectSpread3["default"])({}, this.getConfig('feedback')), this.props.feedback); } }, { key: "data", get: function get() { return this.records.filter(function (record) { return !record.isRemoved; }); }, set: function set(records) { this.loadData(records); } }, { key: "dirtyRecords", get: function get() { var created = []; var updated = []; var destroyed = []; this.all.forEach(function (record) { switch (record.status) { case _enum.RecordStatus.add: created.push(record); break; case _enum.RecordStatus.update: updated.push(record); break; case _enum.RecordStatus["delete"]: destroyed.push(record); break; default: { if (record.dirty) { updated.push(record); } } } }); return [created, updated, destroyed]; } /** * 获取新建的记录集 * @return 记录集 */ }, { key: "created", get: function get() { return this.dirtyRecords[0]; } /** * 获取变更的记录集 * @return 记录集 */ }, { key: "updated", get: function get() { return this.dirtyRecords[1]; } /** * 获取删除的记录集 * @return 记录集 */ }, { key: "destroyed", get: function get() { return this.dirtyRecords[2]; } /** * 获取选中的记录集 * @return 记录集 */ }, { key: "selected", get: function get() { return this.currentSelected.concat(this.cachedSelected.filter(function (record) { return record.isSelected; })); } /** * 获取未选中的记录集, 在 isAllPageSelection 为 true 时有效 * @return 记录集 */ }, { key: "unSelected", get: function get() { return this.currentUnSelected.concat(this.cachedSelected.filter(function (record) { return !record.isSelected; })); } }, { key: "currentSelected", get: function get() { return this.records.filter(function (record) { return record.isSelected; }); } }, { key: "currentUnSelected", get: function get() { return this.records.filter(function (record) { return !record.isSelected; }); } }, { key: "treeSelected", get: function get() { var selected = this.selected, selectionStrategy = this.selectionStrategy; if (selectionStrategy === _enum.CheckedStrategy.SHOW_CHILD) { return selected.filter(function (record) { return !record.children; }); } if (selectionStrategy === _enum.CheckedStrategy.SHOW_PARENT) { return selected.filter(function (record) { var parent = record.parent; return !parent || parent.isSelectionIndeterminate ? !record.isSelectionIndeterminate : false; }); } return selected.filter(function (record) { return !record.isSelectionIndeterminate; }); } }, { key: "totalPage", get: function get() { return this.paging ? Math.ceil(this.totalCount / this.pageSize) : 1; } // 如果paging为server 返回root父节点的排序 }, { key: "currentIndex", get: function get() { var current = this.current, pageSize = this.pageSize, currentPage = this.currentPage; if (current) { var index = this.indexOf(current); if (index !== -1) { if (this.paging === 'server') { var currentParent = (0, _utils2.findRootParent)(current); return this.treeData.findIndex(function (item) { return item.index === currentParent.index; }); } return index + (currentPage - 1) * pageSize; } } return -1; }, set: function set(index) { this.locate(index); } /** * 记录数 */ }, { key: "length", get: function get() { // Fix mobx error caused by chrome browser console if (this === DataSet.prototype) { return 0; } return this.data.length; } }, { key: "hasChildren", get: function get() { return Object.keys(this.children).length > 0; } }, { key: "treeRecords", get: function get() { return this.records.filter(function (record) { return !record.parent; }); } }, { key: "treeData", get: function get() { return this.filter(function (record) { return !record.parent; }); } }, { key: "paging", get: function get() { var _this$props2 = this.props, idField = _this$props2.idField, parentField = _this$props2.parentField, childrenField = _this$props2.childrenField, paging = _this$props2.paging; return paging === "server" && (parentField && idField || childrenField) ? paging : (parentField === undefined || idField === undefined) && childrenField === undefined && !!paging; }, set: function set(paging) { var _this10 = this; (0, _mobx.runInAction)(function () { _this10.props.paging = paging; }); } }, { key: "groups", get: function get() { return (0, _iteratorHelper.iteratorReduce)(this.fields.entries(), function (arr, _ref) { var _ref2 = (0, _slicedToArray2["default"])(_ref, 2), name = _ref2[0], field = _ref2[1]; var group = field.get('group'); if ((0, _isNumber["default"])(group)) { arr[group] = name; } else if (group === true && !arr[0]) { arr[0] = name; } return arr; }, []).filter(function (group) { return group !== undefined; }); } }, { key: "groupedRecords", get: function get() { var groups = this.groups, records = this.records; return (0, _utils2.normalizeGroups)(groups, [], records); } }, { key: "groupedTreeRecords", get: function get() { var groups = this.groups, treeRecords = this.treeRecords; return (0, _utils2.normalizeGroups)(groups, [], treeRecords); } /** * 获取当前索引的记录 * @return record 记录 */ }, { key: "current", get: function get() { return this.all.find(function (record) { return record.isCurrent; }); } /** * 将记录设定为当前索引 * @param record 记录 */ , set: function set(record) { var _this11 = this; // set 属性中如果直接使用 get 属性,某些情况 mobx 会报错,直接使用 get 属性相同逻辑 var currentRecord = this.all.find(function (record) { return record.isCurrent; }); if (currentRecord !== record && (!record || record.dataSet === this)) { (0, _mobx.runInAction)(function () { if (currentRecord) { currentRecord.isCurrent = false; } if (record && record.dataSet === _this11 && !record.isCurrent) { record.isCurrent = true; } _this11.fireEvent(_enum.DataSetEvents.indexChange, { dataSet: _this11, record: record, previous: currentRecord }); }); } } }, { key: "uniqueKeys", get: function get() { var primaryKey = this.props.primaryKey; if (primaryKey) { return [primaryKey]; } var keys = (0, _utils2.getUniqueFieldNames)(this); if (keys.length) { return keys; } return undefined; } }, { key: "cacheKeys", get: function get() { var cacheRecords = this.getConfig('cacheRecords'); if (cacheRecords) { return this.uniqueKeys; } return undefined; } }, { key: "cacheSelectionKeys", get: function get() { var cacheSelection = this.props.cacheSelection; if (cacheSelection) { return this.uniqueKeys; } if (cacheSelection !== false) { return this.cacheKeys; } } }, { key: "cacheModifiedKeys", get: function get() { var cacheModified = this.props.cacheModified; if (cacheModified) { return this.uniqueKeys; } if (cacheModified !== false) { return this.cacheKeys; } } /** * 获取所有记录包括缓存的选择记录 * @param index 索引 * @returns {Record} */ }, { key: "all", get: function get() { return this.records.concat(this.cachedRecords); } }, { key: "dirty", get: function get() { return this.all.some(_utils2.isDirtyRecord); } }, { key: "processListener", value: function processListener() { this.addEventListener(_enum.DataSetEvents.indexChange, this.handleCascade); } }, { key: "destroy", value: function destroy() { this.clear(); } }, { 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: "snapshot", value: function snapshot() { return new _DataSetSnapshot["default"](this); } }, { key: "restore", value: function restore(snapshot) { if (snapshot.dataSet !== this) { this.events = {}; } else if (snapshot.events) { this.events = snapshot.events; } this.records = snapshot.records; this.originalData = snapshot.originalData; this.totalCount = snapshot.totalCount; this.currentPage = snapshot.currentPage; this.pageSize = snapshot.pageSize; this.cachedRecords = snapshot.cachedRecords; this.dataToJSON = snapshot.dataToJSON; this.children = snapshot.children; this.current = snapshot.current; return this; } }, { key: "setAllPageSelection", value: function setAllPageSelection(enable) { if (this.selection === _enum.DataSetSelection.multiple) { var processAfterAllPageSelection = []; if (enable) { this.records.forEach(function (record) { if (record.selectable) { if (record.isSelected) { record.isSelected = false; } } else if (!record.isSelected) { processAfterAllPageSelection.push(function () { record.isSelected = false; }); } }); } else { this.records.forEach(function (record) { if (record.selectable) { if (!record.isSelected) { record.isSelected = true; } } else if (record.isSelected) { processAfterAllPageSelection.push(function () { record.isSelected = true; }); } }); } this.setCachedSelected([]); this.setState(ALL_PAGE_SELECTION, enable); processAfterAllPageSelection.forEach(function (cb) { return cb(); }); this.fireEvent(enable ? _enum.DataSetEvents.selectAllPage : _enum.DataSetEvents.unSelectAllPage, { dataSet: this }); } } }, { key: "toData", value: function toData() { if (_mobx._isComputingDerivation && (0, _mobx._isComputingDerivation)()) { (0, _utils.warning)(false, 'Please do not use the `dataSet.toData` method during the rendering phase.'); } return (0, _utils2.generateData)([].concat((0, _toConsumableArray2["default"])(this.cachedModified), (0, _toConsumableArray2["default"])(this.records))).data; } /** * 对应参数后续会废弃 * @param isSelected * @param noCascade */ }, { key: "toJSONData", value: function toJSONData(isSelected, noCascade) { if (_mobx._isComputingDerivation && (0, _mobx._isComputingDerivation)()) { (0, _utils.warning)(false, 'Please do not use the `dataSet.toJSONData` method during the rendering phase.'); } var dataToJSON = (0, _utils2.adapterDataToJSON)(isSelected, noCascade) || this.dataToJSON; var records = (0, _utils2.useSelected)(dataToJSON) ? this.selected : this.all; return (0, _utils2.generateJSONData)(this, records).data; } /** * 等待选中或者所有记录准备就绪 * @returns Promise */ }, { key: "ready", value: function ready(_isSelect) { // return Promise.all([ // this.pending.ready(), // ...(isSelect || useSelected(this.dataToJSON) ? this.selected : this.data).map(record => // record.ready(), // ), // ...[...this.fields.values()].map(field => field.ready()), // ]); return this.pending.ready(); } /** * 查询记录 * @param page 页码 * @param params 查询参数 * @param cache 是否保留 cachedRecords * @return Promise */ }, { key: "query", value: function query(page, params, cache) { return this.pending.add(this.doQuery(page, params, cache)); } /** * 查询更多记录,查询到的结果会拼接到原有数据之后 * @param page 页码 * @param params 查询参数 * @return Promise */ }, { key: "queryMore", value: function queryMore(page, params) { return this.pending.add(this.doQueryMore(page, params)); } }, { key: "queryMoreChild", value: function queryMoreChild(parent, page) { var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var _this$props3 = this.props, idField = _this$props3.idField, parentField = _this$props3.parentField; if (idField && parentField && !parent.children) { var id = parent.get(idField); if (!(0, _utils.isEmpty)(id)) { if (parentField) { params[parentField] = id; } return this.pending.add(this.doQueryMoreChild(parent, page, (0, _objectSpread3["default"])((0, _objectSpread3["default"])({}, params), {}, (0, _defineProperty2["default"])({}, parentField, id)))); } } return Promise.resolve(); } }, { key: "doQuery", value: function () { var _doQuery = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(page, params, cache, paging) { var data, counting, totalKey, count; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return this.read(page, params, undefined, paging); case 2: data = _context.sent; this.loadDataFromResponse(data, cache); if (!data) { _context.next = 11; break; } counting = this.counting, totalKey = this.totalKey; if (!(totalKey && counting)) { _context.next = 11; break; } _context.next = 9; return counting; case 9: count = _context.sent; if (count !== undefined) { data[totalKey] = count; } case 11: return _context.abrupt("return", data); case 12: case "end": return _context.stop(); } } }, _callee, this); })); function doQuery(_x, _x2, _x3, _x4) { return _doQuery.apply(this, arguments); } return doQuery; }() }, { key: "doQueryMore", value: function () { var _doQueryMore = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(page, params) { var data, counting, totalKey, count; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return this.read(page, params, true); case 2: data = _context2.sent; this.appendDataFromResponse(data); if (!data) { _context2.next = 11; break; } counting = this.counting, totalKey = this.totalKey; if (!(totalKey && counting)) { _context2.next = 11; break; } _context2.next = 9; return counting; case 9: count = _context2.sent; if (count !== undefined) { data[totalKey] = count; } case 11: return _context2.abrupt("return", data); case 12: case "end": return _context2.stop(); } } }, _callee2, this); })); function doQueryMore(_x5, _x6) { return _doQueryMore.apply(this, arguments); } return doQueryMore; }() }, { key: "doQueryMoreChild", value: function () { var _doQueryMoreChild = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(parent, page, params) { var data, counting, totalKey, count; return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: _context3.next = 2; return this.read(page, params, true); case 2: data = _context3.sent; this.appendDataFromResponse(data, parent); if (!data) { _context3.next = 11; break; } counting = this.counting, totalKey = this.totalKey; if (!(totalKey && counting)) { _context3.next = 11; break; } _context3.next = 9; return counting; case 9: count = _context3.sent; if (count !== undefined) { data[totalKey] = count; } case 11: return _context3.abrupt("return", data); case 12: case "end": return _context3.stop(); } } }, _callee3, this); })); function doQueryMoreChild(_x7, _x8, _x9) { return _doQueryMoreChild.apply(this, arguments); } return doQueryMoreChild; }() /** * TODO 参数废弃 * 将数据集中的增删改的记录进行远程提交 * @param isSelect 如果为true,则只提交选中记录 * @param noCascade 如果为true,则不提交级联数据 * @return Promise */ }, { key: "submit", value: function () { var _submit = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(isSelect, noCascade) { var dataToJSON; return _regenerator["default"].wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: dataToJSON = (0, _utils2.adapterDataToJSON)(isSelect, noCascade) || this.dataToJSON; _context4.next = 3; return this.ready(); case 3: _context4.next = 5; return this.validate(); case 5: if (!_context4.sent) { _context4.next = 7; break; } return _context4.abrupt("return", this.pending.add(this.write((0, _utils2.useSelected)(dataToJSON) ? this.selected : this.all))); case 7: return _context4.abrupt("return", false); case 8: case "end": return _context4.stop(); } } }, _callee4, this); })); function submit(_x10, _x11) { return _submit.apply(this, arguments); } return submit; }() /** * 强制将数据集中的增删改的记录进行远程提交, 绕过校验 * @return Promise */ }, { key: "forceSubmit", value: function forceSubmit() { var _this12 = this; var dataToJSON = this.dataToJSON; return this.ready().then(function () { return _this12.pending.add(_this12.write((0, _utils2.useSelected)(dataToJSON) ? _this12.selected : _this12.all)); }); } /** * 导出数据 * @param object columns 导出的列 * @param number exportQuantity 导出数量 */ }, { key: "export", value: function () { var _export2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5() { var columns, exportQuantity, data, totalCount, totalKey, selected, params, newConfig, ExportQuantity, _args5 = arguments; return _regenerator["default"].wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: columns = _args5.length > 0 && _args5[0] !== undefined ? _args5[0] : {}; exportQuantity = _args5.length > 1 && _args5[1] !== undefined ? _args5[1] : 0; if (!this.checkReadable(this.parent)) { _context5.next = 24; break; } _context5.next = 5; return this.ready(); case 5: _context5.next = 7; return this.generateQueryParameter(); case 7: data = _context5.sent; data._HAP_EXCEL_EXPORT_COLUMNS = columns; totalCount = this.totalCount, totalKey = this.totalKey, selected = this.selected; params = (0, _objectSpread3["default"])({ _r: Date.now() }, this.generateOrderQueryString()); ObjectChainValue.set(params, totalKey, this.getState('__EXPORT-STRATEGY__') === 'ALL' ? totalCount : selected.length); newConfig = (0, _utils2.axiosConfigAdapter)('exports', this, data, params); if (!(newConfig.url || this.exportMode === _enum.ExportMode.client)) { _context5.next = 23; break; } _context5.next = 16; return this.fireEvent(_enum.DataSetEvents["export"], { dataSet: this, params: newConfig.params, data: newConfig.data }); case 16: _context5.t0 = _context5.sent; if (!(_context5.t0 !== false)) { _context5.next = 21; break; } ExportQuantity = exportQuantity > 1000 ? 1000 : exportQuantity; if (this.exportMode !== _enum.ExportMode.client) { (0, _utils2.doExport)(this.axios.getUri(newConfig), newConfig.data, newConfig.method); } return _context5.abrupt("return", this.doClientExport(data, ExportQuantity, false)); case 21: _context5.next = 24; break; case 23: (0, _utils.warning)(false, 'Unable to execute the export method of dataset, please check the '); case 24: case "end": return _context5.stop(); } } }, _callee5, this); })); function _export() { return _export2.apply(this, arguments); } return _export; }() /** * 可以把json数组通过ds配置转化成可以直接浏览的数据信息 * @param result 需要转化内容 * @param columnsExport 表头信息 */ }, { key: "displayDataTransform", value: function displayDataTransform(result, columnsExport) { var _this13 = this; var newResult = []; if (result && result.length > 0) { // check: 这里做性能优化去掉实例化为record 从demo来看没啥问题 // toJS(this.processData(result)).map((item) => item.data); var processData = result; processData.forEach(function (itemValue) { var dataItem = {}; var columnsExportkeys = Object.keys(columnsExport); for (var i = 0; i < columnsExportkeys.length; i += 1) { var firstRecord = _this13.records[0]; var exportField = _this13.getField(columnsExportkeys[i]); var processItemValue = (0, _utils2.getSplitValue)((0, _mobx.toJS)(itemValue), columnsExportkeys[i]); // 处理bind 情况 没有需要链式bind 没有处理反向bind 后面可能根据需求增加 if (exportField && (0, _isNil["default"])(processItemValue) && exportField.get('bind', firstRecord)) { processItemValue = (0, _utils2.getSplitValue)((0, _utils2.getSplitValue)((0, _mobx.toJS)(itemValue), exportField.get('bind', firstRecord)), columnsExportkeys[i], false); } dataItem[columnsExportkeys[i]] = (0, _utils2.processExportValue)(processItemValue, exportField); } newResult.push(dataItem); }); } return newResult; } /** * 客户端导出方法 * @param data 表头数据 * @param quantity 输入一次导出数量 * @param isFile 是否导出为文件 */ }, { key: "doClientExport", value: function () { var _doClientExport = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(data, quantity) { var _this14 = this; var isFile, columnsExport, totalCount, selected, exportStrategy, newResult, queryTime, queryExportList, _loop, i, _args6 = arguments; return _regenerator["default"].wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: isFile = _args6.length > 2 && _args6[2] !== undefined ? _args6[2] : true; columnsExport = data._HAP_EXCEL_EXPORT_COLUMNS; delete data._HAP_EXCEL_EXPORT_COLUMNS; totalCount = this.totalCount, selected = this.selected; exportStrategy = this.getState('__EXPORT-STRATEGY__'); (0, _mobx.runInAction)(function () { _this14.exportProgress = 0; _this14.exportStatus = _enum.DataSetExportStatus.start; }); newResult = []; if (!(totalCount > 0)) { _context6.next = 16; break; } (0, _mobx.runInAction)(function () { _this14.exportStatus = _enum.DataSetExportStatus.exporting; }); if (!(exportStrategy === 'ALL')) { _context6.next = 15; break; } queryTime = Math.ceil(totalCount / quantity); // 处理超并发问题 在超大数据量下一口气发出了几千个请求造成数据丢失 queryExportList = []; _loop = function _loop(i) { var params = (0, _objectSpread3["default"])({}, _this14.generateQueryString(1 + i, quantity)); var newConfig = (0, _utils2.axiosConfigAdapter)('read', _this14, data, params); queryExportList.push({ getPromise: function getPromise() { return _this14.axios(newConfig); } }); }; for (i = 0; i < queryTime; i++) { _loop(i); } return _context6.abrupt("return", (0, _utils2.concurrentPromise)(queryExportList, function (currentPromiseIndex) { // 下面还有一段处理所以设置最大值为99 (0, _mobx.runInAction)(function () { _this14.exportProgress = Math.min(99, Math.floor(currentPromiseIndex / queryExportList.length * 100)); }); return _this14.exportStatus === undefined; }).then(function (resultValue) { var reducer = function reducer(accumulator, currentValue) { return [].concat((0, _toConsumableArray2["default"])(accumulator), (0, _toConsumableArray2["default"])(currentValue)); }; var todataList = function todataList(item) { return item ? item[_this14.dataKey] : []; }; (0, _mobx.runInAction)(function () { _this14.exportStatus = _enum.DataSetExportStatus.progressing; }); var exportAlldate = resultValue.map(todataList).reduce(reducer); newResult = _this14.displayDataTransform(exportAlldate, columnsExport); newResult.unshift(columnsExport); (0, _mobx.runInAction)(function () { _this14.exportStatus = _enum.DataSetExportStatus.success; }); if (isFile) { (0, _utils2.exportExcel)(newResult, _this14.name, _this14.getConfig('xlsx')); } else { return newResult; } })["catch"](function (err) { console.warn(err); (0, _mobx.runInAction)(function () { _this14.exportStatus = _enum.DataSetExportStatus.failed; _this14.exportProgress = 0; }); })); case 15: return _context6.abrupt("return", new Promise(function (resolve) { (0, _mobx.runInAction)(function () { _this14.exportProgress = 10; }); setTimeout(function () { resolve(true); }, 1000); }).then(function () { (0, _mobx.runInAction)(function () { _this14.exportStatus = _enum.DataSetExportStatus.progressing; }); var jsonData = selected.map(function (x) { return (0, _objectSpread3["default"])({}, x.toData()); }); newResult = _this14.displayDataTransform(jsonData, columnsExport); newResult.unshift(columnsExport); (0, _mobx.runInAction)(function () { _this14.exportStatus = _enum.DataSetExportStatus.success; }); if (isFile) { (0, _utils2.exportExcel)(newResult, _this14.name, _this14.getConfig('xlsx')); } else { return newResult; } })["catch"](function (err) { console.warn(err); (0, _mobx.runInAction)(function () { _this14.exportStatus = _enum.DataSetExportStatus.failed; _this14.exportProgress = 0; }); })); case 16: case "end": return _context6.stop(); } } }, _callee6, this); })); function doClientExport(_x12, _x13) { return _doClientExport.apply(this, argume