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