choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
1,690 lines (1,409 loc) • 135 kB
JavaScript
"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