choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
1,762 lines (1,480 loc) • 120 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.addRecordField = addRecordField;
exports["default"] = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _objectSpread3 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _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 _unionBy = _interopRequireDefault(require("lodash/unionBy"));
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 _debounce = _interopRequireDefault(require("lodash/debounce"));
var _warning = _interopRequireDefault(require("../../../lib/_util/warning"));
var _configure = require("../../../lib/configure");
var _localeContext = _interopRequireWildcard(require("../locale-context"));
var _axios2 = _interopRequireDefault(require("../axios"));
var _Record = _interopRequireDefault(require("./Record"));
var _Field = _interopRequireDefault(require("./Field"));
var _utils = require("./utils");
var _EventManager2 = _interopRequireDefault(require("../_util/EventManager"));
var _DataSetSnapshot = _interopRequireDefault(require("./DataSetSnapshot"));
var _confirm = _interopRequireDefault(require("../modal/confirm"));
var _enum = require("./enum");
var _isEmpty = _interopRequireDefault(require("../_util/isEmpty"));
var ObjectChainValue = _interopRequireWildcard(require("../_util/ObjectChainValue"));
var _Transport = _interopRequireDefault(require("./Transport"));
var _PromiseQueue = _interopRequireDefault(require("../_util/PromiseQueue"));
var _DataSetRequestError = _interopRequireDefault(require("./DataSetRequestError"));
var _FeedBack = _interopRequireDefault(require("./FeedBack"));
var _treeUtils = require("../_util/treeUtils");
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 fieldProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
return (0, _utils.processIntlField)(name, fieldProps, function (langName, langProps) {
var field = new _Field["default"](langProps, dataSet);
dataSet.fields.set(langName, field);
return field;
}, dataSet);
}
function addRecordField(record, name) {
var fieldProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var dataSet = record.dataSet;
fieldProps.name = name;
return (0, _utils.processIntlField)(name, fieldProps, function (langName, langProps) {
var field = new _Field["default"](langProps, dataSet, record);
record.fields.set(langName, field);
return field;
}, dataSet);
}
var DataSet =
/*#__PURE__*/
function (_EventManager) {
(0, _inherits2["default"])(DataSet, _EventManager);
var _super = _createSuper(DataSet);
function DataSet(props) {
var _this;
(0, _classCallCheck2["default"])(this, DataSet);
_this = _super.call(this);
_this.children = {};
_this.prepareForReport = {};
_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);
(0, _mobx.runInAction)(function () {
props = (0, _objectSpread3["default"])({}, DataSet.defaultProps, {}, props);
_this.props = props;
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;
_this.name = name;
_this.selectionStrategy = selectionStrategy;
_this.dataToJSON = dataToJSON;
_this.records = [];
_this.state = _mobx.observable.map();
_this.fields = _mobx.observable.map();
_this.totalCount = 0;
_this.status = _enum.DataSetStatus.ready;
_this.currentPage = 1;
_this.cachedSelected = [];
_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);
}
if (fields) {
_this.initFields(fields);
}
_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.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) {
if (enable) {
this.currentSelected.forEach(function (record) {
return record.isSelected = false;
});
} else {
this.currentUnSelected.forEach(function (record) {
return record.isSelected = true;
});
}
this.clearCachedSelected();
this.setState(ALL_PAGE_SELECTION, enable);
if (enable) {
this.records.forEach(function (record) {
if (!record.selectable) {
record.isSelected = false;
}
});
}
}
}
}, {
key: "toData",
value: function toData() {
return (0, _utils.generateData)(this.records).data;
}
/**
* 对应参数后续会废弃
* @param isSelected
* @param noCascade
*/
}, {
key: "toJSONData",
value: function toJSONData(isSelected, noCascade) {
var dataToJSON = (0, _utils.adapterDataToJSON)(isSelected, noCascade) || this.dataToJSON;
var records = (0, _utils.useSelected)(dataToJSON) ? this.selected : this.records;
return (0, _utils.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 查询参数
* @return Promise
*/
}, {
key: "query",
value: function query(page, params) {
return this.pending.add(this.doQuery(page, params));
}
/**
* 查询更多记录,查询到的结果会拼接到原有数据之后
* @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, _isEmpty["default"])(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) {
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);
return _context.abrupt("return", data);
case 5:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function doQuery(_x, _x2) {
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);
case 2:
data = _context2.sent;
this.appendDataFromResponse(data);
return _context2.abrupt("return", data);
case 5:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
function doQueryMore(_x3, _x4) {
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);
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(_x5, _x6, _x7) {
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, _utils.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, _utils.useSelected)(dataToJSON) ? this.selected : this.records)));
case 7:
return _context4.abrupt("return", false);
case 8:
case "end":
return _context4.stop();
}
}
}, _callee4, this);
}));
function submit(_x8, _x9) {
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;
_context5.t0 = this.checkReadable(this.parent);
if (!_context5.t0) {
_context5.next = 7;
break;
}
_context5.next = 6;
return this.ready();
case 6:
_context5.t0 = _context5.sent;
case 7:
if (!_context5.t0) {
_context5.next = 27;
break;
}
_context5.next = 10;
return this.generateQueryParameter();
case 10:
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, _utils.axiosConfigAdapter)('exports', this, data, params);
if (!(newConfig.url || this.exportMode === _enum.ExportMode.client)) {
_context5.next = 26;
break;
}
_context5.next = 19;
return this.fireEvent(_enum.DataSetEvents["export"], {
dataSet: this,
params: newConfig.params,
data: newConfig.data
});
case 19:
_context5.t1 = _context5.sent;
if (!(_context5.t1 !== false)) {
_context5.next = 24;
break;
}
ExportQuantity = exportQuantity > 1000 ? 1000 : exportQuantity;
if (this.exportMode !== _enum.ExportMode.client) {
(0, _utils.doExport)(this.axios.getUri(newConfig), newConfig.data, newConfig.method);
}
return _context5.abrupt("return", this.doClientExport(data, ExportQuantity, false));
case 24:
_context5.next = 27;
break;
case 26:
(0, _warning["default"])(false, 'Unable to execute the export method of dataset, please check the ');
case 27:
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] || _this2;
var exportField = firstRecord.getField(columnsExportkeys[i]);
var processItemValue = (0, _utils.getSplitValue)((0, _mobx.toJS)(itemValue), columnsExportkeys[i]); // 处理bind 情况 没有需要链式bind 没有处理反向bind 后面可能根据需求增加
if (exportField && (0, _isNil["default"])(processItemValue) && exportField.get('bind')) {
processItemValue = (0, _utils.getSplitValue)((0, _utils.getSplitValue)((0, _mobx.toJS)(itemValue), exportField.get('bind')), columnsExportkeys[i], false);
}
dataItem[columnsExportkeys[i]] = (0, _utils.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, _utils.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, _utils.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, _utils.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(_x10, _x11) {
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.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, _warning["default"])(_page > 0, 'Page number is incorrect.');
(0, _warning["default"])(!!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;
if (!modifiedCheck || !this.dirty) {
return Promise.resolve(true);
}
return (0, _confirm["default"])(message || modifiedCheckMessage || (0, _localeContext.$l)('DataSet', 'unsaved_data_confirm')).then(function (result) {
return result !== 'cancel';
});
}
/**
* 定位记录
* @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);
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, _warning["default"])(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(_x12) {
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 = [];
(0, _toConsumableArray2["default"])(record.fields.entries()).forEach(function (_ref) {
var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
name = _ref2[0],
field = _ref2[1];
var fieldDefaultValue = field.get('defaultValue');
var multiple = field.get('multiple');
var defaultValue = multiple && (0, _isNil["default"])(fieldDefaultValue) ? [] : fieldDefaultValue;
if (!(0, _isNil["default"])(defaultValue) && (0, _isNil["default"])(record.get(name))) {
var type = field.get('type');
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 (_ref3) {
var _ref4 = (0, _slicedToArray2["default"])(_ref3, 2),
name = _ref4[0],
defaultValue = _ref4[1];
return record.init(name, (0, _mobx.toJS)(defaultValue));
});
}
});
if ((0, _isNumber["default"])(dataIndex)) {
this.splice(dataIndex, 0, record);
} else {
this.push(record);
}
if (this.props.autoLocateAfterCreate) {
this.current = record;
}
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 = 25;
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 = 17;
break;
}
_context8.t3 = confirmMessage === false;
if (_context8.t3) {
_context8.next = 16;
break;
}
_context8.next = 14;
return (0, _confirm["default"])(confirmMessage && confirmMessage !== true ? confirmMessage : (0, _localeContext.$l)('DataSet', 'delete_selected_row_confirm'));
case 14:
_context8.t4 = _context8.sent;
_context8.t3 = _context8.t4 !== 'cancel';
case 16:
_context8.t0 = _context8.t3;
case 17:
if (!_context8.t0) {
_context8.next = 25;
break;
}
this.remove(records, false);
_context8.next = 21;
return this.pending.add(this.write(this.destroyed, true));
case 21:
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 25:
case "end":
return _context8.stop();
}
}
}, _callee8, this);
}));
function _delete(_x13, _x14) {
return _delete2.apply(this, arguments);
}
return _delete;
}()
/**
* 临时删除记录
* @param records 记录或者记录数组
* @param locate 是否需要进行定位操作
*/
}, {
key: "remove",
value: function remove(records, locate) {
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(this.deleteRecord, this);
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() {
var current = this.current,
data = this.data;
if (data.length) {
data.forEach(this.deleteRecord, this);
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 = 9;
break;
}
_context9.t1 = confirmMessage === false;
if (_context9.t1) {
_context9.next = 8;
break;
}
_context9.next = 6;
return (0, _confirm["default"])(confirmMessage && confirmMessage !== true ? confirmMessage : (0, _localeContext.$l)('DataSet', 'delete_all_row_confirm'));
case 6:
_context9.t2 = _context9.sent;
_context9.t1 = _context9.t2 !== 'cancel';
case 8:
_context9.t0 = _context9.t1;
case 9:
if (!_context9.t0) {
_context9.next = 12;
break;
}
this.removeAll();
return _context9.abrupt("return", this.pending.add(this.write(this.destroyed, true)));
case 12:
case "end":
return _context9.stop();
}
}
}, _callee9, this);
}));
function deleteAll(_x15) {
return _deleteAll.apply(this, arguments);
}
return deleteAll;
}()
/**
* 将若干数据记录插入记录堆栈顶部
* @param records 数据集
* @return 堆栈数量
*/
}, {
key: "push",
value: function push() {
var _this$records;
(0, _utils.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, _utils.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 fromRecord = this.get(from);
var deleted = this.slice(from, from + deleteCount).map(this.deleteRecord, this);
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, _utils.checkParentByInsert)(this);
var records = this.records;
var spliceRecord = (0, _utils.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, _utils.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.data.findIndex(fn);
}
/**
* 根据函数遍历
* @param fn 遍历函数
* @param thisArg this对象
*/
}, {
key: "forEach",
value: function forEach(fn, thisArg) {
this.data.forEach(fn, thisArg);
}
/**
* 根据函数遍历并输出新数组
* @param fn 遍历函数
* @param thisArg this对象
* @returns 输出新数组
*/
}, {
key: "map",
value: function map(fn, thisArg) {
return this.data.map(fn, thisArg);
}
/**
* 根据函数遍历,当有返回值为true时,输出true
* @param fn 遍历函数
* @param thisArg this对象
* @returns boolean
*/
}, {
key: "some",
value: function some(fn, thisArg) {
return this.data.some(fn, thisArg);
}
/**
* 根据函数遍历,当有返回值为false时,输出false
* @param fn 遍历函数
* @param thisArg this对象
* @returns boolean
*/
}, {
key: "every",
value: function every(fn, thisArg) {
return this.data.every(fn, thisArg);
}
/**
* 根据函数过滤并返回记录集
* @param fn 过滤函数
* @param thisArg this对象
* @returns {Record[]}
*/
}, {
key: "filter",
value: function filter(fn, thisArg) {
return this.data.filter(fn, thisArg);
}
/**
* 为数组中的所有元素调用指定的回调函数。 回调函数的返回值是累计结果,并在下次调用回调函数时作为参数提供。
* @param fn 累计函数
* @param initialValue 初始值
* @returns {U}
*/
}, {
key: "reduce",
value: function reduce(fn, initialValue) {
return this.data.reduce(fn, initialValue);
}
/**
* 按降序调用数组中所有元素的指定回调函数。 回调函数的返回值是累计结果,并在下次调用回调函数时作为参数提供。
* @param fn 累计函数
* @param initialValue 初始值
* @returns {U}
*/
}, {
key: "reduceRight",
value: function reduceRight(fn, initialValue) {
return this.data.reduceRight(fn, initialValue);
}
/**
* 反转记录的顺序。
*/
}, {
key: "reverse",
value: function reverse() {
return this.records = this.records.reverse();
}
/**
* 服务端排序
*
* @param fieldName
*/
}, {
key: "sort",
value: function sort(fieldName) {
var combineSort = this.props.combineSort;
var field = this.getField(fieldName);
if (field) {
var currents = (0, _utils.getOrderFields)(this.fields);
if (!combineSort) {
currents.forEach(function (current) {
if (current !== field) {
current.order = undefined;
}
});
}
switch (field.order) {
case _enum.SortOrder.asc:
field.order = _enum.SortOrder.desc;
break;
case _enum.SortOrder.desc:
field.order = undefined;
break;
default:
field.order = _enum.SortOrder.asc;
}
if (this.paging || !field.order) {
this.query();
} else {
this.records = this.records.sort((0, _utils.getFieldSorter)(field));
}
}
}
/**
* 选中记录
* @param recordOrIndex 记录或记录索引
*/
}, {
key: "select",
value: function select(recordOrIndex) {
var selection = this.selection;
if (selection) {
var record = recordOrIndex;
if ((0, _isNumber["default"])(recordOrIndex)) {
record = this.get(recordOrIndex);
}
if (record && record.selectable && !record.isSelected) {
var previous;
if (selection === _enum.DataSetSelection.single) {
this.selected.forEach(function (selected) {
selected.isSelected = false;
previous = selected;
});
}
record.isSelected = true;
if (!this.inBatchSelection) {
if (this.isAllPageSelection) {
var cachedIndex = this.cachedSelected.indexOf(record);
if (cachedIndex !== -1) {
this.cachedSelected.splice(cachedIndex, 1);
}
}
this.fireEvent(_enum.DataSetEvents.select, {
dataSet: this,
record: record,
previous: previous
});
this.fireEvent(_enum.DataSetEvents.batchSelect, {
dataSet: this,
records: [record]
});
}
}
}
}
/**
* 取消选中记录
* @param recordOrIndex 记录或记录索引
*/
}, {
key: "unSelect",
value: function unSelect(recordOrIndex) {
if (this.selection) {
var record = recordOrIndex;
if ((0, _isNumber["default"])(recordOrIndex)) {
record = this.get(recordOrIndex);
}
if (record && record.selectable && record.isSelected) {
record.isSelected = false;
if (!this.inBatchSelection) {
if (!this.isAllPageSelection) {
var cachedIndex = this.cachedSelected.indexOf(record);
if (cachedIndex !== -1) {
this.cachedSelected.splice(cachedIndex, 1);
}
}
this.fireEvent(_enum.DataSetEvents.unSelect, {
dataSet: this,
record: record
});
this.fireEvent(_enum.DataSetEvents.batchUnSelect, {
dataSet: this,
records: [record]
});
}
}
}
}
/**
* 全选
*/
}, {
key: "selectAl