UNPKG

choerodon-ui

Version:

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

1,690 lines (1,409 loc) 135 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.addDataSetField = addDataSetField; exports.initDataSetField = initDataSetField; exports["default"] = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); 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 _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); 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 _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")); function _createSuper(Derived) { function isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; } var ALL_PAGE_SELECTION = '__ALL_PAGE_SELECTION__'; // TODO:Symbol var QUERY_PARAMETER = '__QUERY_PARAMETER__'; // 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); }); } var DataSet = /*#__PURE__*/ function (_EventManager) { (0, _inherits2["default"])(DataSet, _EventManager); var _super = _createSuper(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"])({}, 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.totalCount = 0; _this.status = status; _this.currentPage = 1; _this.cachedSelected = []; _this.cachedModified = []; _this.queryParameter = queryParameter; _this.pageSize = pageSize; _this.selection = selection; _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: "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.cachedSelected = snapshot.cachedSelected; this.cachedModified = snapshot.cachedModified; 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(); }); } } }, { 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 : [].concat((0, _toConsumableArray2["default"])(this.cachedModified), (0, _toConsumableArray2["default"])(this.records)); 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$props = this.props, idField = _this$props.idField, parentField = _this$props.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"])({}, 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) { var data; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return this.read(page, params); case 2: data = _context.sent; this.loadDataFromResponse(data, cache); return _context.abrupt("return", data); case 5: case "end": return _context.stop(); } } }, _callee, this); })); function doQuery(_x, _x2, _x3) { 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; 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); return _context2.abrupt("return", data); case 5: case "end": return _context2.stop(); } } }, _callee2, this); })); function doQueryMore(_x4, _x5) { 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; 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); return _context3.abrupt("return", data); case 5: case "end": return _context3.stop(); } } }, _callee3, this); })); function doQueryMoreChild(_x6, _x7, _x8) { 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 : [].concat((0, _toConsumableArray2["default"])(this.cachedModified), (0, _toConsumableArray2["default"])(this.records))))); case 7: return _context4.abrupt("return", false); case 8: case "end": return _context4.stop(); } } }, _callee4, this); })); function submit(_x9, _x10) { return _submit.apply(this, arguments); } return submit; }() /** * 导出数据 * @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, 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; params = (0, _objectSpread3["default"])({ _r: Date.now() }, this.generateOrderQueryString()); ObjectChainValue.set(params, totalKey, totalCount); 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 _this2 = 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 = _this2.records[0]; var exportField = _this2.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 _this3 = this; var isFile, columnsExport, totalCount, 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; (0, _mobx.runInAction)(function () { _this3.exportProgress = 0; _this3.exportStatus = _enum.DataSetExportStatus.start; }); newResult = []; if (!(totalCount > 0)) { _context6.next = 13; break; } queryTime = Math.ceil(totalCount / quantity); // 处理超并发问题 在超大数据量下一口气发出了几千个请求造成数据丢失 queryExportList = []; (0, _mobx.runInAction)(function () { _this3.exportStatus = _enum.DataSetExportStatus.exporting; }); _loop = function _loop(i) { var params = (0, _objectSpread3["default"])({}, _this3.generateQueryString(1 + i, quantity)); var newConfig = (0, _utils2.axiosConfigAdapter)('read', _this3, data, params); queryExportList.push({ getPromise: function getPromise() { return _this3.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 () { _this3.exportProgress = Math.min(99, Math.floor(currentPromiseIndex / queryExportList.length * 100)); }); return _this3.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[_this3.dataKey] : []; }; (0, _mobx.runInAction)(function () { _this3.exportStatus = _enum.DataSetExportStatus.progressing; }); var exportAlldate = resultValue.map(todataList).reduce(reducer); newResult = _this3.displayDataTransform(exportAlldate, columnsExport); newResult.unshift(columnsExport); (0, _mobx.runInAction)(function () { _this3.exportStatus = _enum.DataSetExportStatus.success; }); if (isFile) { (0, _utils2.exportExcel)(newResult, _this3.name); } else { return newResult; } })["catch"](function (err) { console.warn(err); (0, _mobx.runInAction)(function () { _this3.exportStatus = _enum.DataSetExportStatus.failed; _this3.exportProgress = 0; }); })); case 13: case "end": return _context6.stop(); } } }, _callee6, this); })); function doClientExport(_x11, _x12) { return _doClientExport.apply(this, arguments); } return doClientExport; }() /** * 重置更改 */ }, { key: "reset", value: function reset() { this.resetInBatch = true; try { this.records = this.originalData.map(function (record) { return record.reset(); }); } finally { this.resetInBatch = false; } if (this.props.autoCreate && this.records.length === 0) { this.create(); } this.clearValidationError(); this.fireEvent(_enum.DataSetEvents.reset, { dataSet: this, records: this.records }); return this; } /** * 定位到指定页码,如果paging为true或`server`,则做远程查询,约定当为Tree 状态的server时候 跳转到下一页也就是index为当前的index加上1 * @param page 页码 * @return Promise */ }, { key: "page", value: function page(_page) { if (_page > 0 && this.paging) { return this.locate((_page - 1) * this.pageSize + (_page > this.currentPage ? this.created.length - this.destroyed.length : 0)); } (0, _utils.warning)(_page > 0, 'Page number is incorrect.'); (0, _utils.warning)(!!this.paging, 'Can not paging query util the property<paging> of DataSet is true or `server`.'); return Promise.resolve(); } /** * 变更检查,当有变更时会弹确认框 * @param message 提示信息或者是confirm的参数 * @return Promise */ }, { key: "modifiedCheck", value: function modifiedCheck(message) { var _this$props2 = this.props, modifiedCheck = _this$props2.modifiedCheck, modifiedCheckMessage = _this$props2.modifiedCheckMessage, cacheModified = _this$props2.cacheModified; if (cacheModified || !modifiedCheck || !this.dirty) { return Promise.resolve(true); } return this.getConfig('confirm')(message || modifiedCheckMessage || (0, _localeContext.$l)('DataSet', 'unsaved_data_confirm')); } /** * 定位记录 * @param index 索引 * @return Promise */ }, { key: "locate", value: function () { var _locate = (0, _asyncToGenerator2["default"])( /*#__PURE__*/ _regenerator["default"].mark(function _callee7(index) { var paging, pageSize, totalCount, autoLocateFirst, currentRecord; return _regenerator["default"].wrap(function _callee7$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: paging = this.paging, pageSize = this.pageSize, totalCount = this.totalCount; autoLocateFirst = this.props.autoLocateFirst; currentRecord = this.findInAllPage(index); if (!currentRecord) { _context7.next = 6; break; } this.current = currentRecord; return _context7.abrupt("return", currentRecord); case 6: if (!(paging === true || paging === 'server')) { _context7.next = 17; break; } if (!(index >= 0 && index < totalCount + this.created.length - this.destroyed.length)) { _context7.next = 17; break; } _context7.next = 10; return this.modifiedCheck(); case 10: if (!_context7.sent) { _context7.next = 17; break; } _context7.next = 13; return this.query(Math.floor(index / pageSize) + 1, undefined, true); case 13: currentRecord = this.findInAllPage(index); if (!currentRecord) { _context7.next = 17; break; } this.current = autoLocateFirst ? currentRecord : undefined; return _context7.abrupt("return", currentRecord); case 17: (0, _utils.warning)(false, 'Located index of Record is out of boundary.'); return _context7.abrupt("return", Promise.resolve(undefined)); case 19: case "end": return _context7.stop(); } } }, _callee7, this); })); function locate(_x13) { return _locate.apply(this, arguments); } return locate; }() /** * 定位到第一条记录 * @return Promise */ }, { key: "first", value: function first() { return this.locate(0); } /** * 定位到最后一条记录 * @return Promise */ }, { key: "last", value: function last() { return this.locate((this.paging ? this.totalCount : this.length) - 1); } /** * 定位到当前记录的上一条记录 * 若当前页中当前记录为第一条记录且有上一页,则会查询上一页并定位到上一页的最后一条记录 * @return Promise */ }, { key: "pre", value: function pre() { return this.locate(this.currentIndex - 1); } /** * 定位到当前记录的下一条记录 * 若当前页中当前记录为最后一条记录且有下一页,则会查询下一页并定位到下一页的第一条记录 * @return Promise */ }, { key: "next", value: function next() { return this.locate(this.currentIndex + 1); } /** * 定位到首页 * @return Promise */ }, { key: "firstPage", value: function firstPage() { return this.page(1); } /** * 定位到上一页 * @return Promise */ }, { key: "prePage", value: function prePage() { return this.page(this.currentPage - 1); } /** * 定位到下一页 * @return Promise */ }, { key: "nextPage", value: function nextPage() { return this.page(this.currentPage + 1); } /** * 定位到尾页 * @return Promise */ }, { key: "lastPage", value: function lastPage() { return this.page(this.totalPage); } /** * 创建一条记录 * @param data 数据对象 * @param dataIndex 记录所在的索引 * @return 新建的记录 */ }, { key: "create", value: function create() { var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var dataIndex = arguments.length > 1 ? arguments[1] : undefined; if (data === null) { data = {}; } var record = new _Record["default"](data, this); var objectFieldsList = []; var normalFields = []; this.fields.forEach(function (field, name) { var fieldDefaultValue = field.get('defaultValue', record); var multiple = field.get('multiple', record); var defaultValue = multiple && (0, _isNil["default"])(fieldDefaultValue) ? [] : fieldDefaultValue; if (!(0, _isNil["default"])(defaultValue) && (0, _isNil["default"])(record.get(name))) { var type = field.get('type', record); if (type === _enum.FieldType.object) { var level = name.split('.').length - 1; objectFieldsList[level] = (objectFieldsList[level] || []).concat([[name, defaultValue]]); } else { normalFields.push([name, defaultValue]); } } }); [].concat(objectFieldsList, [normalFields]).forEach(function (items) { if (items) { items.forEach(function (_ref) { var _ref2 = (0, _slicedToArray2["default"])(_ref, 2), name = _ref2[0], defaultValue = _ref2[1]; return record.init(name, (0, _mobx.toJS)(defaultValue)); }); } }); var _this$props3 = this.props, parentField = _this$props3.parentField, idField = _this$props3.idField, childrenField = _this$props3.childrenField, validationRules = _this$props3.validationRules; if (!childrenField && parentField && idField) { var parentId = record.get(parentField); if (parentId) { var parent = this.find(function (r) { return r.get(idField) === parentId; }); if (parent) { record.parent = parent; var children = parent.children; if (children) { if ((0, _isNumber["default"])(dataIndex)) { children.splice(dataIndex, 0, record); dataIndex += parent.index + 1; } else { children.push(record); dataIndex = parent.index + children.length; } } else { parent.children = [record]; dataIndex = parent.index + 1; } } } } if ((0, _isNumber["default"])(dataIndex)) { this.splice(dataIndex, 0, record); } else { this.push(record); } if (this.props.autoLocateAfterCreate) { this.current = record; } if (validationRules && this.validationSelfErrors) { var error = this.validationSelfErrors.find(function (item) { return item.name === _enum.ValidationSelfType.minLength; }); if (error && error.value <= this.length) { this.clearValidationError(); } } this.fireEvent(_enum.DataSetEvents.create, { dataSet: this, record: record }); return record; } /** * 立即删除记录 * @param records 记录或者记录数组,默认当前记录 * @param confirmMessage 提示信息或弹窗的属性 * @return Promise */ }, { key: "delete", value: function () { var _delete2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/ _regenerator["default"].mark(function _callee8(records, confirmMessage) { var res, current, record; return _regenerator["default"].wrap(function _callee8$(_context8) { while (1) { switch (_context8.prev = _context8.next) { case 0: if (!records) { _context8.next = 24; break; } records = [].concat(records); _context8.t1 = records.length > 0; if (!_context8.t1) { _context8.next = 8; break; } _context8.next = 6; return this.fireEvent(_enum.DataSetEvents.beforeDelete, { dataSet: this, records: records }); case 6: _context8.t2 = _context8.sent; _context8.t1 = _context8.t2 !== false; case 8: _context8.t0 = _context8.t1; if (!_context8.t0) { _context8.next = 16; break; } _context8.t3 = confirmMessage === false; if (_context8.t3) { _context8.next = 15; break; } _context8.next = 14; return this.getConfig('confirm')(confirmMessage && confirmMessage !== true ? confirmMessage : (0, _localeContext.$l)('DataSet', 'delete_selected_row_confirm')); case 14: _context8.t3 = _context8.sent; case 15: _context8.t0 = _context8.t3; case 16: if (!_context8.t0) { _context8.next = 24; break; } this.remove(records, false, false); _context8.next = 20; return this.pending.add(this.write(this.destroyed, true)); case 20: res = _context8.sent; // 处理自动定位 current = this.current; if (current) { if (this.props.autoLocateAfterRemove) { record = this.get(0); if (record) { (0, _mobx.runInAction)(function () { record.isCurrent = true; }); } } if (current !== record) { this.fireEvent(_enum.DataSetEvents.indexChange, { dataSet: this, record: record, previous: current }); } } return _context8.abrupt("return", res); case 24: case "end": return _context8.stop(); } } }, _callee8, this); })); function _delete(_x14, _x15) { return _delete2.apply(this, arguments); } return _delete; }() /** * 临时删除记录 * @param records 记录或者记录数组 * @param locate 是否需要进行定位操作 */ }, { key: "remove", value: function remove(records, forceRemove, locate) { var _this4 = this; if (records) { var data = (0, _mobx.isArrayLike)(records) ? records.slice() : [records]; if (data.length && this.fireEventSync(_enum.DataSetEvents.beforeRemove, { dataSet: this, records: data }) !== false) { var current = this.current; data.forEach(function (record) { return _this4.deleteRecord(record, forceRemove); }); if (this.props.validationRules && this.validationSelfErrors) { var error = this.validationSelfErrors.find(function (item) { return item.name === _enum.ValidationSelfType.maxLength; }); if (error && error.value >= this.length) { this.clearValidationError(); } } this.fireEvent(_enum.DataSetEvents.remove, { dataSet: this, records: data }); if (!this.current) { var record; if (locate !== false && this.props.autoLocateAfterRemove) { record = this.get(0); if (record) { record.isCurrent = true; } } if (locate !== false && current !== record) { this.fireEvent(_enum.DataSetEvents.indexChange, { dataSet: this, record: record, previous: current }); } } } } } /** * 临时删除所有记录 */ }, { key: "removeAll", value: function removeAll(forceRemove) { var _this5 = this; var current = this.current, data = this.data; if (data.length) { data.forEach(function (record) { return _this5.deleteRecord(record, forceRemove); }); this.fireEvent(_enum.DataSetEvents.remove, { dataSet: this, records: data }); if (current) { this.fireEvent(_enum.DataSetEvents.indexChange, { dataSet: this, previous: current }); } } } /** * 删除所有记录 * @param confirmMessage 提示信息或弹窗的属性 */ }, { key: "deleteAll", value: function () { var _deleteAll = (0, _asyncToGenerator2["default"])( /*#__PURE__*/ _regenerator["default"].mark(function _callee9(confirmMessage) { return _regenerator["default"].wrap(function _callee9$(_context9) { while (1) { switch (_context9.prev = _context9.next) { case 0: _context9.t0 = this.records.length > 0; if (!_context9.t0) { _context9.next = 8; break; } _context9.t1 = confirmMessage === false; if (_context9.t1) { _context9.next = 7; break; } _context9.next = 6; return this.getConfig('confirm')(confirmMessage && confirmMessage !== true ? confirmMessage : (0, _localeContext.$l)('DataSet', 'delete_all_row_confirm')); case 6: _context9.t1 = _context9.sent; case 7: _context9.t0 = _context9.t1; case 8: if (!_context9.t0) { _context9.next = 11; break; } this.removeAll(); return _context9.abrupt("return", this.pending.add(this.write(this.destroyed, true))); case 11: case "end": return _context9.stop(); } } }, _callee9, this); })); function deleteAll(_x16) { return _deleteAll.apply(this, arguments); } return deleteAll; }() /** * 将若干数据记录插入记录堆栈顶部 * @param records 数据集 * @return 堆栈数量 */ }, { key: "push", value: function push() { var _this$records; (0, _utils2.checkParentByInsert)(this); for (var _len = arguments.length, records = new Array(_len), _key = 0; _key < _len; _key++) { records[_key] = arguments[_key]; } return (_this$records = this.records).push.apply(_this$records, (0, _toConsumableArray2["default"])(this.transferRecords(records))); } /** * 将若干数据记录插入记录堆栈底部 * @param records 数据集 * @return 堆栈数量 */ }, { key: "unshift", value: function unshift() { var _this$records2; (0, _utils2.checkParentByInsert)(this); for (var _len2 = arguments.length, records = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { records[_key2] = arguments[_key2]; } return (_this$records2 = this.records).unshift.apply(_this$records2, (0, _toConsumableArray2["default"])(this.transferRecords(records))); } /** * 从记录堆栈顶部获取记录 * @return 记录 */ }, { key: "pop", value: function pop() { return this.deleteRecord(this.data.pop()); } /** * 从记录堆栈底部获取记录 * @return 记录 */ }, { key: "shift", value: function shift() { return this.deleteRecord(this.data.shift()); } /** * 删除指定索引的若干记录,并可插入若干新记录 * @param from 索引开始的位置 * @default 0 * @param deleteCount 删除的数量 * @default 0 * @param records 插入的若干新记录 * @return 被删除的记录集 */ }, { key: "splice", value: function splice(from, deleteCount) { var _this6 = this; var fromRecord = this.get(from); var deleted = this.slice(from, from + deleteCount).map(function (record) { return _this6.deleteRecord(record); }); for (var _len3 = arguments.length, items = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) { items[_key3 - 2] = arguments[_key3]; } if (items.length) { (0, _utils2.checkParentByInsert)(this); var records = this.records; var spliceRecord = (0, _utils2.getSpliceRecord)(records, items, fromRecord); var transformedRecords = this.transferRecords(items); if (spliceRecord) { records.splice.apply(records, [records.indexOf(spliceRecord), 0].concat((0, _toConsumableArray2["default"])(transformedRecords))); } else { records.push.apply(records, (0, _toConsumableArray2["default"])(transformedRecords)); } } return deleted; } /** * 切换记录的顺序 */ }, { key: "move", value: function move(from, to) { (0, _utils2.arrayMove)(this.records, from, to); } /** * 截取指定索引范围的记录集,不改变原记录堆栈 * @param start 开始索引 * @default 0 * @param end 结束索引 * @default 记录堆栈长度 * @return 被删除的记录集 */ }, { key: "slice", value: function slice() { var start = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var end = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.length; return this.data.slice(start, end); } /** * 获取记录所在的索引 * @param record 记录 * @param fromIndex 开始检索的索引 * @return 索引 */ }, { key: "indexOf", value: function indexOf(record, fromIndex) { return this.data.indexOf(record, fromIndex); } /** * 根据函数查找记录 * @param fn 查询函数 * @returns 记录 */ }, { key: "find", value: function find(fn) { return this.data.find(fn); } /** * 根据函数查找记录所在的索引 * @param fn 查询函数 * @returns 索引 */ }, { key: "findIndex", value: function findIndex(fn) { return this