choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
1,473 lines (1,212 loc) • 108 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["default"] = exports.VIRTUAL_ROOT_MARGIN = exports.SELECTION_KEY = exports.ROW_NUMBER_KEY = exports.EXPAND_KEY = exports.DRAG_KEY = exports.CUSTOMIZED_KEY = exports.COMBOBAR_KEY = exports.BODY_EXPANDED = exports.AGGREGATION_EXPAND_CELL_KEY = void 0;
exports.getIdList = getIdList;
exports.normalizeGroupColumns = normalizeGroupColumns;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _tslib = require("tslib");
var _react = _interopRequireWildcard(require("react"));
var _mobx = require("mobx");
var _sortBy = _interopRequireDefault(require("lodash/sortBy"));
var _debounce = _interopRequireDefault(require("lodash/debounce"));
var _isNil = _interopRequireDefault(require("lodash/isNil"));
var _isObject = _interopRequireDefault(require("lodash/isObject"));
var _isPlainObject = _interopRequireDefault(require("lodash/isPlainObject"));
var _isString = _interopRequireDefault(require("lodash/isString"));
var _isNumber = _interopRequireDefault(require("lodash/isNumber"));
var _defaultTo = _interopRequireDefault(require("lodash/defaultTo"));
var _measureScrollbar = _interopRequireDefault(require("../../../lib/_util/measureScrollbar"));
var _UnitConvertor = require("../../../lib/_util/UnitConvertor");
var _icon = _interopRequireDefault(require("../../../lib/icon"));
var _isFunction = _interopRequireDefault(require("lodash/isFunction"));
var _noop = _interopRequireDefault(require("lodash/noop"));
var _Column = require("./Column");
var _CustomizationSettings = _interopRequireDefault(require("./customization-settings/CustomizationSettings"));
var _isFragment = _interopRequireDefault(require("../_util/isFragment"));
var _CheckBox = _interopRequireDefault(require("../check-box/CheckBox"));
var _Radio = _interopRequireDefault(require("../radio/Radio"));
var _enum = require("../data-set/enum");
var _enum2 = require("./enum");
var _EventManager = require("../_util/EventManager");
var _utils = require("./utils");
var _getReactNodeText = _interopRequireDefault(require("../_util/getReactNodeText"));
var _ColumnGroups = _interopRequireDefault(require("./ColumnGroups"));
var _autobind = _interopRequireDefault(require("../_util/autobind"));
var _enum3 = require("../core/enum");
var _localeContext = require("../locale-context");
var _CustomizationColumnHeader = _interopRequireDefault(require("./customization-settings/CustomizationColumnHeader"));
var _Dropdown = _interopRequireDefault(require("../dropdown/Dropdown"));
var _menu = _interopRequireDefault(require("../menu"));
var _treeUtils = require("../_util/treeUtils");
var _utils2 = require("../data-set/utils");
var _BatchRunner = _interopRequireDefault(require("../_util/BatchRunner"));
var _enum4 = require("../form/enum");
var SELECTION_KEY = '__selection-column__'; // TODO:Symbol
exports.SELECTION_KEY = SELECTION_KEY;
var COMBOBAR_KEY = '__combo-column__'; // TODO:Symbol
exports.COMBOBAR_KEY = COMBOBAR_KEY;
var ROW_NUMBER_KEY = '__row-number-column__'; // TODO:Symbol
exports.ROW_NUMBER_KEY = ROW_NUMBER_KEY;
var DRAG_KEY = '__drag-column__'; // TODO:Symbol
exports.DRAG_KEY = DRAG_KEY;
var EXPAND_KEY = '__expand-column__'; // TODO:Symbol
exports.EXPAND_KEY = EXPAND_KEY;
var CUSTOMIZED_KEY = '__customized-column__'; // TODO:Symbol
exports.CUSTOMIZED_KEY = CUSTOMIZED_KEY;
var AGGREGATION_EXPAND_CELL_KEY = '__aggregation-expand-cell__'; // TODO:Symbol
exports.AGGREGATION_EXPAND_CELL_KEY = AGGREGATION_EXPAND_CELL_KEY;
var BODY_EXPANDED = '__body_expanded__'; // TODO:Symbol
exports.BODY_EXPANDED = BODY_EXPANDED;
var VIRTUAL_ROOT_MARGIN = 50;
exports.VIRTUAL_ROOT_MARGIN = VIRTUAL_ROOT_MARGIN;
function columnFilter(column) {
return Boolean(column);
}
function getOverScanCount(tableStore, index, next) {
var rowMetaData = tableStore.rowMetaData;
if (rowMetaData) {
var count = 0;
var height = 0;
while (height < VIRTUAL_ROOT_MARGIN) {
index += next ? 1 : -1;
var metaData = rowMetaData[index];
if (!metaData) {
return count;
}
height += metaData.height;
count++;
}
return count;
}
return Math.ceil(VIRTUAL_ROOT_MARGIN / tableStore.virtualRowHeight);
}
function getItemMetadata(rowMetaData, index, tableStore) {
var lastMeasuredIndex = tableStore.lastMeasuredIndex;
if (index > lastMeasuredIndex) {
tableStore.lastMeasuredIndex = index;
}
return rowMetaData[index];
}
function findNearestItemBinarySearch(rowMetaData, tableStore, high, low, offset) {
while (low <= high) {
var middle = low + Math.floor((high - low) / 2);
var item = getItemMetadata(rowMetaData, middle, tableStore);
if (!item) {
return 0;
}
var currentOffset = item.offset;
if (currentOffset === offset) {
return middle;
}
if (currentOffset < offset) {
low = middle + 1;
}
if (currentOffset > offset) {
high = middle - 1;
}
}
if (low > 0) {
return low - 1;
}
return 0;
}
function overOffset(rowMetaData, tableStore, index, offset) {
var item = getItemMetadata(rowMetaData, index, tableStore);
if (item) {
return item.offset < offset;
}
return false;
}
function findNearestItemExponentialSearch(rowMetaData, tableStore, index, offset) {
var virtualEstimatedRows = tableStore.virtualEstimatedRows;
var interval = 1;
while (index < virtualEstimatedRows && overOffset(rowMetaData, tableStore, index, offset)) {
index += interval;
interval *= 2;
}
return findNearestItemBinarySearch(rowMetaData, tableStore, Math.min(index, virtualEstimatedRows - 1), Math.floor(index / 2), offset);
}
function getVisibleStartIndex(tableStore) {
var getLastScrollTop = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {
return tableStore.lastScrollTop;
};
var height = tableStore.height,
virtualEstimatedRows = tableStore.virtualEstimatedRows;
if (height === undefined || !virtualEstimatedRows) {
return 0;
}
var lastScrollTop = getLastScrollTop();
var virtualRowHeight = tableStore.virtualRowHeight,
rowMetaData = tableStore.rowMetaData;
if (rowMetaData) {
if (!rowMetaData.length) {
return 0;
}
var lastMeasuredIndex = tableStore.lastMeasuredIndex;
var lastRowMetaData = lastMeasuredIndex > 0 ? rowMetaData[lastMeasuredIndex] : undefined;
var lastMeasuredItemOffset = lastRowMetaData ? lastRowMetaData.offset : 0;
if (lastMeasuredItemOffset >= lastScrollTop) {
return findNearestItemBinarySearch(rowMetaData, tableStore, lastMeasuredIndex, 0, lastScrollTop);
}
return findNearestItemExponentialSearch(rowMetaData, tableStore, Math.max(0, lastMeasuredIndex), lastScrollTop);
}
return Math.max(0, Math.min(virtualEstimatedRows, Math.floor(lastScrollTop / virtualRowHeight)));
}
function getVisibleEndIndex(tableStore) {
var getVirtualVisibleStartIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {
return tableStore.virtualVisibleStartIndex;
};
var getLastScrollTop = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {
return tableStore.lastScrollTop;
};
var height = tableStore.height,
virtualEstimatedRows = tableStore.virtualEstimatedRows;
if (height === undefined) {
return virtualEstimatedRows;
}
var virtualVisibleStartIndex = getVirtualVisibleStartIndex();
var virtualRowHeight = tableStore.virtualRowHeight,
rowMetaData = tableStore.rowMetaData;
if (rowMetaData) {
if (!rowMetaData.length) {
return 0;
}
var itemMetadata = getItemMetadata(rowMetaData, virtualVisibleStartIndex, tableStore);
if (!itemMetadata) {
return 0;
}
var maxOffset = getLastScrollTop() + height;
var offset = itemMetadata.offset + itemMetadata.height;
var stopIndex = virtualVisibleStartIndex;
while (stopIndex < virtualEstimatedRows - 1 && offset < maxOffset) {
stopIndex++;
var item = getItemMetadata(rowMetaData, stopIndex, tableStore);
if (item) {
offset += item.height;
}
}
return Math.max(0, Math.min(virtualEstimatedRows, stopIndex + 1));
}
var numVisibleItems = Math.ceil(height / virtualRowHeight);
return Math.max(0, Math.min(virtualEstimatedRows, virtualVisibleStartIndex + numVisibleItems));
}
function getStartIndex(tableStore) {
var getVirtualVisibleStartIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {
return tableStore.virtualVisibleStartIndex;
};
var virtualVisibleStartIndex = getVirtualVisibleStartIndex();
return Math.max(0, virtualVisibleStartIndex - getOverScanCount(tableStore, virtualVisibleStartIndex));
}
function getEndIndex(tableStore) {
var getVirtualVisibleEndIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {
return tableStore.virtualVisibleEndIndex;
};
var virtualVisibleEndIndex = getVirtualVisibleEndIndex();
var virtualEstimatedRows = tableStore.virtualEstimatedRows;
return Math.min(virtualEstimatedRows, virtualVisibleEndIndex + getOverScanCount(tableStore, virtualVisibleEndIndex, true));
}
function getIdList(store) {
var mouseBatchChooseStartId = store.mouseBatchChooseStartId,
mouseBatchChooseEndId = store.mouseBatchChooseEndId,
element = store.node.element,
prefixCls = store.prefixCls;
var rows = Array.from(element.querySelectorAll(".".concat(prefixCls, "-row")));
var endId;
var idList = [];
rows.some(function (row) {
var index = Number(row.dataset.index);
if (!endId) {
if (mouseBatchChooseStartId === index) {
endId = mouseBatchChooseEndId;
} else if (mouseBatchChooseEndId === index) {
endId = mouseBatchChooseStartId;
}
}
if (endId) {
idList.push(index);
}
return endId === index;
});
return idList;
}
function getRowNumbers(record, dataSet, isTree) {
if (record && dataSet) {
if (record.isCached) {
return [];
}
var paging = dataSet.paging,
currentPage = dataSet.currentPage,
pageSize = dataSet.pageSize;
var pageIndex = (isTree ? paging === 'server' : paging) ? (currentPage - 1) * pageSize : 0;
if (isTree) {
return record.path.map(function (r, index) {
return r.indexInParent + 1 + (index === 0 ? pageIndex : 0);
});
}
return [record.index + 1 + pageIndex];
}
return [0];
}
function hasCheckField(_ref, checkField) {
var editor = _ref.editor,
name = _ref.name,
hidden = _ref.hidden;
return !hidden && !!editor && checkField === name;
}
function _renderSelectionBox(_ref2) {
var record = _ref2.record,
store = _ref2.store;
var dataSet = record.dataSet;
if (dataSet) {
var selection = dataSet.selection;
var handleChange = function handleChange(value) {
if (store.props.selectionMode === _enum2.SelectionMode.mousedown) {
// 将处理逻辑交给 mousedown 的处理逻辑 不然会两次触发导致不被勾选上
return;
}
if (value) {
dataSet.select(record);
} else {
dataSet.unSelect(record);
}
};
var handleClick = function handleClick(e) {
(0, _EventManager.stopPropagation)(e);
if (selection === _enum.DataSetSelection.multiple) {
var lastSelected = store.lastSelected;
if (lastSelected) {
var nativeEvent = e.nativeEvent;
var startIndex = -1;
var endIndex = -1;
if (nativeEvent.shiftKey) {
var pointKeys = new Set([lastSelected.key, record.key]);
dataSet.some(function (pointRecord, index) {
if (pointKeys.has(pointRecord.key)) {
if (startIndex === -1) {
startIndex = index;
} else {
endIndex = index;
return true;
}
}
return false;
});
}
if (endIndex !== -1 && startIndex !== endIndex) {
// Batch update selections
var rangeRecords = dataSet.slice(startIndex, endIndex + 1);
var changedRecords = [];
var selectedKeys = new Set(dataSet.selected.map(function (selected) {
return selected.key;
}));
if (record.isSelected) {
rangeRecords.forEach(function (rangeRecord) {
if (selectedKeys.has(rangeRecord.key)) {
changedRecords.push(rangeRecord);
}
});
dataSet.batchUnSelect(changedRecords);
} else {
rangeRecords.forEach(function (rangeRecord) {
if (!selectedKeys.has(rangeRecord.key)) {
changedRecords.push(rangeRecord);
}
});
dataSet.batchSelect(changedRecords);
}
}
}
store.lastSelected = record;
} else if (record.isSelected) {
dataSet.unSelect(record);
}
};
if (selection === _enum.DataSetSelection.multiple) {
var batchSelectProps = {};
var handleDragMouseUp = (0, _mobx.action)(function () {
var mouseBatchChooseIdList = store.mouseBatchChooseIdList;
if (store.mouseBatchChooseState) {
store.mouseBatchChooseState = false;
store.changeMouseBatchChooseIdList([]);
var mouseBatchChooseStartId = store.mouseBatchChooseStartId,
mouseBatchChooseEndId = store.mouseBatchChooseEndId;
if (mouseBatchChooseStartId === mouseBatchChooseEndId) {
return;
}
var startRecord = dataSet.findRecordById(mouseBatchChooseStartId);
var _ref3 = startRecord || {},
isSelected = _ref3.isSelected;
if (isSelected) {
dataSet.batchUnSelect(mouseBatchChooseIdList);
} else {
dataSet.batchSelect(mouseBatchChooseIdList);
}
}
document.removeEventListener('pointerup', handleDragMouseUp);
});
if (store.useMouseBatchChoose) {
batchSelectProps.onMouseDown = (0, _mobx.action)(function () {
store.mouseBatchChooseStartId = record.id;
store.mouseBatchChooseEndId = record.id;
store.mouseBatchChooseState = true; // 为什么使用 pointerup
// 因为需要对disabled的元素进行特殊处理
// 因为状态的改变依赖 mouseup 而在disabled的元素上 无法触发mouseup事件
// 导致状态无法进行修正
// 以下两种方案通过 pointer-events:none 进行处理
// https://stackoverflow.com/questions/322378/javascript-check-if-mouse-button-down
// https://stackoverflow.com/questions/62081666/the-event-of-the-document-is-not-triggered-when-it-is-on-a-disabled-element
// 而使用指针事件可以突破disabled的限制
// https://stackoverflow.com/questions/62126515/how-to-get-the-state-of-the-mouse-through-javascript/62127845#62127845
document.addEventListener('pointerup', handleDragMouseUp);
});
batchSelectProps.onMouseEnter = function () {
if (store.mouseBatchChooseState) {
store.mouseBatchChooseEndId = record.id;
store.changeMouseBatchChooseIdList(getIdList(store));
}
};
}
return /*#__PURE__*/_react["default"].createElement(_CheckBox["default"], (0, _extends2["default"])({}, batchSelectProps, {
checked: record.isSelected,
onChange: handleChange,
onClick: handleClick,
disabled: !record.selectable,
"data-selection-key": SELECTION_KEY,
labelLayout: _enum4.LabelLayout.none,
value: true
}));
}
if (selection === _enum.DataSetSelection.single) {
return /*#__PURE__*/_react["default"].createElement(_Radio["default"], {
checked: record.isSelected,
onChange: handleChange,
onClick: handleClick,
disabled: !record.selectable,
"data-selection-key": SELECTION_KEY,
value: true
});
}
}
}
function getCustomizedColumnByKey(key, customizedColumns) {
if (customizedColumns) {
return customizedColumns[key];
}
}
function getCustomizedColumn(column, customizedColumns) {
if (customizedColumns) {
return getCustomizedColumnByKey((0, _utils.getColumnKey)(column).toString(), customizedColumns);
}
}
function mergeColumnLock(column, parent, customizedColumn) {
if (parent) {
column.lock = parent.lock;
} else if (customizedColumn && 'lock' in customizedColumn) {
column.lock = customizedColumn.lock;
}
}
function mergeCustomizedColumn(column, tableStore, customizedColumn, isChildrenHideDisabled) {
if (isChildrenHideDisabled) {
column.hideable = false;
} else {
var field = tableStore.dataSet.getField(column.name);
if (field) {
var dynamicProps = field.get('dynamicProps');
var computedProps = field.get('computedProps');
if (dynamicProps && dynamicProps.required || computedProps && computedProps.required || field.get('required')) {
column.hideable = false;
}
}
}
if (customizedColumn) {
if (column.hideable === false || !tableStore.columnHideable) {
delete customizedColumn.hidden;
}
if (column.resizable === false || !tableStore.columnResizable) {
delete customizedColumn.width;
}
if (column.titleEditable === false || !tableStore.columnTitleEditable) {
delete customizedColumn.title;
}
if (!tableStore.columnDraggable) {
delete customizedColumn.sort;
}
(0, _extends2["default"])(column, customizedColumn);
}
}
function findAndMergeCustomizedColumn(column, tableStore, customizedColumns, isChildrenHideDisabled) {
var customizedColumn = getCustomizedColumn(column, customizedColumns);
mergeCustomizedColumn(column, tableStore, customizedColumn, isChildrenHideDisabled);
}
function mergeDefaultProps(tableStore, originalColumns, tableAggregation, customizedColumns) {
var parent = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;
var defaultKey = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [0];
var columnSort = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : {
left: 0,
center: 0,
right: 0
};
var columns = [];
var leftColumns = [];
var rightColumns = [];
var hasAggregationColumn = false;
var isHideDisabled = false;
originalColumns.forEach(function (column) {
if ((0, _isPlainObject["default"])(column)) {
var newColumn = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, _Column.ColumnDefaultProps), column);
if ((0, _isNil["default"])((0, _utils.getColumnKey)(newColumn))) {
newColumn.key = "anonymous-".concat(defaultKey[0]++);
}
var children = newColumn.children,
aggregation = newColumn.aggregation;
if (!hasAggregationColumn && aggregation) {
hasAggregationColumn = true;
}
if (tableAggregation || !aggregation) {
var customizedColumn = getCustomizedColumn(newColumn, customizedColumns);
mergeColumnLock(newColumn, parent, customizedColumn);
if (children) {
var _mergeDefaultProps = mergeDefaultProps(tableStore, children, tableAggregation, customizedColumns, newColumn, defaultKey),
_mergeDefaultProps2 = (0, _slicedToArray2["default"])(_mergeDefaultProps, 4),
childrenColumns = _mergeDefaultProps2[1],
_mergeDefaultProps2$ = _mergeDefaultProps2[3],
childrenHasAggregationColumn = _mergeDefaultProps2$.hasAggregationColumn,
childrenIsHideDisabled = _mergeDefaultProps2$.isHideDisabled;
newColumn.children = childrenColumns;
if (!hasAggregationColumn && childrenHasAggregationColumn) {
hasAggregationColumn = true;
}
if (!isHideDisabled && childrenIsHideDisabled) {
isHideDisabled = true;
}
mergeCustomizedColumn(newColumn, tableStore, customizedColumn, childrenIsHideDisabled);
} else {
mergeCustomizedColumn(newColumn, tableStore, customizedColumn);
}
if (!isHideDisabled && newColumn.hideable === false) {
isHideDisabled = true;
}
if (parent || !newColumn.lock) {
if (newColumn.sort === undefined) {
newColumn.sort = columnSort.center;
}
columnSort.center++;
columns.push(newColumn);
} else if (newColumn.lock === true || newColumn.lock === _enum2.ColumnLock.left) {
if (newColumn.sort === undefined) {
newColumn.sort = columnSort.left;
}
columnSort.left++;
leftColumns.push(newColumn);
} else {
if (newColumn.sort === undefined) {
newColumn.sort = columnSort.right;
}
columnSort.right++;
rightColumns.push(newColumn);
}
} else if (children) {
var _mergeDefaultProps3 = mergeDefaultProps(tableStore, children, tableAggregation, customizedColumns, parent, defaultKey, parent ? undefined : columnSort),
_mergeDefaultProps4 = (0, _slicedToArray2["default"])(_mergeDefaultProps3, 4),
leftNodes = _mergeDefaultProps4[0],
nodes = _mergeDefaultProps4[1],
rightNodes = _mergeDefaultProps4[2],
_mergeDefaultProps4$ = _mergeDefaultProps4[3],
_childrenHasAggregationColumn = _mergeDefaultProps4$.hasAggregationColumn,
_childrenIsHideDisabled = _mergeDefaultProps4$.isHideDisabled;
if (!hasAggregationColumn && _childrenHasAggregationColumn) {
hasAggregationColumn = true;
}
if (!isHideDisabled && _childrenIsHideDisabled) {
newColumn.hideable = false;
isHideDisabled = true;
}
if (parent) {
parent.children = [].concat((0, _toConsumableArray2["default"])(leftNodes), (0, _toConsumableArray2["default"])(nodes), (0, _toConsumableArray2["default"])(rightNodes));
} else {
leftColumns.push.apply(leftColumns, (0, _toConsumableArray2["default"])(leftNodes));
columns.push.apply(columns, (0, _toConsumableArray2["default"])(nodes));
rightColumns.push.apply(rightColumns, (0, _toConsumableArray2["default"])(rightNodes));
}
}
}
}, []);
if (parent) {
return [[], (0, _sortBy["default"])(columns, function (_ref4) {
var sort = _ref4.sort;
return sort;
}), [], {
hasAggregationColumn: hasAggregationColumn,
isHideDisabled: isHideDisabled
}];
}
return [(0, _sortBy["default"])(leftColumns, function (_ref5) {
var sort = _ref5.sort;
return sort;
}), (0, _sortBy["default"])(columns, function (_ref6) {
var sort = _ref6.sort;
return sort;
}), (0, _sortBy["default"])(rightColumns, function (_ref7) {
var sort = _ref7.sort;
return sort;
}), {
hasAggregationColumn: hasAggregationColumn,
isHideDisabled: isHideDisabled
}];
}
function normalizeColumns(tableStore, elements, tableAggregation, customizedColumns) {
var parent = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;
var defaultKey = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [0];
var columnSort = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : {
left: 0,
center: 0,
right: 0
};
var columns = [];
var leftColumns = [];
var rightColumns = [];
var hasAggregationColumn = false;
var isHideDisabled = false;
var normalizeColumn = function normalizeColumn(element) {
if ( /*#__PURE__*/(0, _react.isValidElement)(element)) {
var props = element.props,
key = element.key,
type = element.type;
if ((0, _isFragment["default"])(element)) {
var children = props.children;
if (children) {
_react.Children.forEach(children, normalizeColumn);
}
} else if (type.__PRO_TABLE_COLUMN) {
var column = (0, _objectSpread2["default"])({}, props);
if (key) {
column.key = key;
} else if ((0, _isNil["default"])((0, _utils.getColumnKey)(column))) {
column.key = "anonymous-".concat(defaultKey[0]++);
}
var _children = column.children,
aggregation = column.aggregation;
if (!hasAggregationColumn && aggregation) {
hasAggregationColumn = true;
}
if (tableAggregation || !aggregation) {
var customizedColumn = getCustomizedColumn(column, customizedColumns);
mergeColumnLock(column, parent, customizedColumn);
var _normalizeColumns = normalizeColumns(tableStore, _children, tableAggregation, customizedColumns, column, defaultKey),
_normalizeColumns2 = (0, _slicedToArray2["default"])(_normalizeColumns, 4),
childrenColumns = _normalizeColumns2[1],
_normalizeColumns2$ = _normalizeColumns2[3],
childrenHasAggregationColumn = _normalizeColumns2$.hasAggregationColumn,
childrenIsHideDisabled = _normalizeColumns2$.isHideDisabled;
column.children = childrenColumns;
if (!hasAggregationColumn && childrenHasAggregationColumn) {
hasAggregationColumn = childrenHasAggregationColumn;
}
if (!isHideDisabled && childrenIsHideDisabled) {
isHideDisabled = true;
}
mergeCustomizedColumn(column, tableStore, customizedColumn, childrenIsHideDisabled);
if (!isHideDisabled && column.hideable === false) {
isHideDisabled = true;
}
if (parent || !column.lock) {
if (column.sort === undefined) {
column.sort = columnSort.center;
}
columnSort.center++;
columns.push(column);
} else if (column.lock === true || column.lock === _enum2.ColumnLock.left) {
if (column.sort === undefined) {
column.sort = columnSort.left;
}
columnSort.left++;
leftColumns.push(column);
} else {
if (column.sort === undefined) {
column.sort = columnSort.right;
}
columnSort.right++;
rightColumns.push(column);
}
} else {
var _normalizeColumns3 = normalizeColumns(tableStore, _children, tableAggregation, customizedColumns, parent, defaultKey, parent ? undefined : columnSort),
_normalizeColumns4 = (0, _slicedToArray2["default"])(_normalizeColumns3, 4),
leftNodes = _normalizeColumns4[0],
nodes = _normalizeColumns4[1],
rightNodes = _normalizeColumns4[2],
_normalizeColumns4$ = _normalizeColumns4[3],
_childrenHasAggregationColumn2 = _normalizeColumns4$.hasAggregationColumn,
_childrenIsHideDisabled2 = _normalizeColumns4$.isHideDisabled;
if (!hasAggregationColumn && _childrenHasAggregationColumn2) {
hasAggregationColumn = _childrenHasAggregationColumn2;
}
if (!isHideDisabled && _childrenIsHideDisabled2) {
column.hideable = false;
isHideDisabled = true;
}
if (parent) {
parent.children = [].concat((0, _toConsumableArray2["default"])(leftNodes), (0, _toConsumableArray2["default"])(nodes), (0, _toConsumableArray2["default"])(rightNodes));
} else {
leftColumns.push.apply(leftColumns, (0, _toConsumableArray2["default"])(leftNodes));
columns.push.apply(columns, (0, _toConsumableArray2["default"])(nodes));
rightColumns.push.apply(rightColumns, (0, _toConsumableArray2["default"])(rightNodes));
}
}
}
}
};
_react.Children.forEach(elements, normalizeColumn);
if (parent) {
return [[], (0, _sortBy["default"])(columns, function (_ref8) {
var sort = _ref8.sort;
return sort;
}), [], {
hasAggregationColumn: hasAggregationColumn,
isHideDisabled: isHideDisabled
}];
}
return [(0, _sortBy["default"])(leftColumns, function (_ref9) {
var sort = _ref9.sort;
return sort;
}), (0, _sortBy["default"])(columns, function (_ref10) {
var sort = _ref10.sort;
return sort;
}), (0, _sortBy["default"])(rightColumns, function (_ref11) {
var sort = _ref11.sort;
return sort;
}), {
hasAggregationColumn: hasAggregationColumn,
isHideDisabled: isHideDisabled
}];
}
function getColumnGroupedColumns(tableStore, groups, customizedColumns) {
var leftGroupedColumns = [];
var groupedColumns = [];
var rightGroupedColumns = [];
var hasAggregation = false;
groups.forEach(function (group) {
var name = group.name,
type = group.type,
columnProps = group.columnProps;
if (type === _enum2.GroupType.column) {
var column = (0, _objectSpread2["default"])((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, _Column.ColumnDefaultProps), {}, {
lock: _enum2.ColumnLock.left
}, columnProps), {}, {
children: columnProps && columnProps.children ? (0, _treeUtils.treeMap)(columnProps.children, function (col) {
var newCol = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, col), {}, {
__tableGroup: group
});
findAndMergeCustomizedColumn(newCol, tableStore, customizedColumns);
return newCol;
}, function (_ref12, _ref13) {
var _ref12$sort = _ref12.sort,
sort = _ref12$sort === void 0 ? Infinity : _ref12$sort;
var _ref13$sort = _ref13.sort,
sort2 = _ref13$sort === void 0 ? Infinity : _ref13$sort;
return sort - sort2;
}) : undefined,
draggable: false,
hideable: false,
key: "__group-".concat(name),
name: name,
__tableGroup: group
});
findAndMergeCustomizedColumn(column, tableStore, customizedColumns);
if (!column.lock) {
groupedColumns.push(column);
} else if (column.lock === true || column.lock === _enum2.ColumnLock.left) {
leftGroupedColumns.push(column);
} else {
rightGroupedColumns.push(column);
}
if (columnProps && !hasAggregation && columnProps.aggregation) {
hasAggregation = true;
}
}
});
return [leftGroupedColumns, groupedColumns, rightGroupedColumns, hasAggregation];
}
function getHeaderGroupedColumns(tableStore, groups, tableGroups, columns, dataSet, groupedColumns, customizedColumns, parentKey) {
var generatedColumns = new Set();
var headerUsed = false;
groups.forEach(function (group) {
var name = group.name,
subGroups = group.subGroups,
value = group.value;
var key = parentKey ? "".concat(parentKey, "-").concat(value) : value;
var subColumns = subGroups.length ? getHeaderGroupedColumns(tableStore, subGroups, tableGroups, columns, dataSet, groupedColumns, customizedColumns, key) : columns;
var tableGroup = tableGroups.find(function ($tableGroup) {
return name === $tableGroup.name;
});
if (tableGroup) {
var columnProps = tableGroup.columnProps,
groupName = tableGroup.name,
hidden = tableGroup.hidden;
if (hidden) {
subColumns.forEach(function (col) {
var __originalKey = (0, _utils.getColumnKey)(col);
var colKey = "".concat(key, "-").concat(__originalKey);
var newCol = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, col), {}, {
key: colKey,
__tableGroup: tableGroup,
__group: group,
__originalKey: __originalKey
});
findAndMergeCustomizedColumn(newCol, tableStore, customizedColumns);
newCol.lock = false;
generatedColumns.add(newCol);
});
} else {
var length = groupedColumns.length;
if (length && !headerUsed) {
headerUsed = true;
var header = (0, _utils.getHeader)((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, columnProps), {}, {
name: groupName,
dataSet: dataSet,
group: group
}));
if (header) {
var oldColumn = groupedColumns[length - 1];
var newKey = "".concat(key, "-").concat((0, _utils.getColumnKey)(oldColumn));
var newColumn = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, columnProps), {}, {
lock: oldColumn.lock,
titleEditable: false,
draggable: false,
hideable: false,
key: newKey,
header: header,
children: [oldColumn],
__tableGroup: tableGroup
});
var customizedColumn = getCustomizedColumnByKey(newKey, customizedColumns);
mergeCustomizedColumn(newColumn, tableStore, customizedColumn);
groupedColumns[length - 1] = newColumn;
}
}
var renderer = columnProps && columnProps.renderer || _Column.defaultAggregationRenderer;
var column = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, columnProps), {}, {
titleEditable: false,
key: key,
headerStyle: columnProps && columnProps.style,
header: function header() {
return renderer({
dataSet: dataSet,
record: group.totalRecords[0],
name: groupName,
text: value,
value: value,
headerGroup: group
});
},
children: (0, _treeUtils.treeMap)(subColumns, function (col) {
var __originalKey = (0, _utils.getColumnKey)(col);
var colKey = "".concat(key, "-").concat(__originalKey);
var newCol = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, col), {}, {
key: colKey,
__originalKey: __originalKey
});
if (customizedColumns) {
(0, _extends2["default"])(newCol, customizedColumns[__originalKey], customizedColumns[colKey]);
}
newCol.lock = false;
return newCol;
}, function (_ref14, _ref15) {
var _ref14$sort = _ref14.sort,
sort = _ref14$sort === void 0 ? Infinity : _ref14$sort;
var _ref15$sort = _ref15.sort,
sort2 = _ref15$sort === void 0 ? Infinity : _ref15$sort;
return sort - sort2;
}),
__tableGroup: tableGroup,
__group: group
});
findAndMergeCustomizedColumn(column, tableStore, customizedColumns);
generatedColumns.add(column);
}
} else if (subColumns.length) {
subColumns.forEach(function (column) {
return generatedColumns.add(column);
});
}
});
return (0, _toConsumableArray2["default"])(generatedColumns);
}
function normalizeGroupColumns(tableStore, columns, children, aggregation, customizedColumns) {
var headerTableGroups = tableStore.headerTableGroups,
groups = tableStore.groups,
dataSet = tableStore.dataSet;
var hasHeaderGroup = headerTableGroups.length > 0;
var generatedColumns = columns ? mergeDefaultProps(tableStore, columns, aggregation, customizedColumns) : normalizeColumns(tableStore, children, aggregation, customizedColumns);
var _generatedColumns = (0, _slicedToArray2["default"])(generatedColumns, 4),
leftOriginalColumns = _generatedColumns[0],
originalColumns = _generatedColumns[1],
rightOriginalColumns = _generatedColumns[2],
hasAggregationColumn = _generatedColumns[3].hasAggregationColumn;
var _ref16 = groups.length ? getColumnGroupedColumns(tableStore, groups, customizedColumns) : [[], [], [], false],
_ref17 = (0, _slicedToArray2["default"])(_ref16, 4),
leftColumnGroupedColumns = _ref17[0],
columnGroupedColumns = _ref17[1],
rightColumnGroupedColumns = _ref17[2],
hasAggregationColumnGroup = _ref17[3];
if (hasHeaderGroup) {
var groupedColumns = [].concat((0, _toConsumableArray2["default"])(leftColumnGroupedColumns), (0, _toConsumableArray2["default"])(columnGroupedColumns));
return [groupedColumns, getHeaderGroupedColumns(tableStore, tableStore.groupedDataWithHeader, headerTableGroups, [].concat((0, _toConsumableArray2["default"])(leftOriginalColumns), (0, _toConsumableArray2["default"])(originalColumns), (0, _toConsumableArray2["default"])(rightOriginalColumns)), dataSet, groupedColumns, customizedColumns), rightColumnGroupedColumns, hasAggregationColumnGroup || hasAggregationColumn];
}
return [[].concat((0, _toConsumableArray2["default"])(leftColumnGroupedColumns), (0, _toConsumableArray2["default"])(leftOriginalColumns)), [].concat((0, _toConsumableArray2["default"])(columnGroupedColumns), (0, _toConsumableArray2["default"])(originalColumns)), [].concat((0, _toConsumableArray2["default"])(rightOriginalColumns), (0, _toConsumableArray2["default"])(rightColumnGroupedColumns)), hasAggregationColumnGroup || hasAggregationColumn];
}
function getHeaderTexts(_x, _x2, _x3) {
return _getHeaderTexts.apply(this, arguments);
}
function _getHeaderTexts() {
_getHeaderTexts = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(dataSet, columns, aggregation) {
var headers,
column,
_args3 = arguments;
return _regenerator["default"].wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
headers = _args3.length > 3 && _args3[3] !== undefined ? _args3[3] : [];
column = columns.shift();
if (!column) {
_context3.next = 10;
break;
}
_context3.t0 = headers;
_context3.t1 = column.name;
_context3.next = 7;
return (0, _getReactNodeText["default"])((0, _utils.getHeader)((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, column), {}, {
dataSet: dataSet,
aggregation: aggregation
})));
case 7:
_context3.t2 = _context3.sent;
_context3.t3 = {
name: _context3.t1,
label: _context3.t2
};
_context3.t0.push.call(_context3.t0, _context3.t3);
case 10:
if (!columns.length) {
_context3.next = 13;
break;
}
_context3.next = 13;
return getHeaderTexts(dataSet, columns, aggregation, headers);
case 13:
return _context3.abrupt("return", headers);
case 14:
case "end":
return _context3.stop();
}
}
}, _callee3);
}));
return _getHeaderTexts.apply(this, arguments);
}
function autoHeightToStyle(autoHeight) {
var parentPaddingTop = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
var type = autoHeight.type,
diff = autoHeight.diff;
var height = "calc(100% - ".concat(diff + parentPaddingTop, "px)");
if (type === _enum2.TableAutoHeightType.minHeight) {
return {
height: height
};
}
return {
maxHeight: height
};
}
var TableStore = /*#__PURE__*/function () {
function TableStore(node) {
var _this = this;
(0, _classCallCheck2["default"])(this, TableStore);
this.editors = new Map();
this.mouseBatchChooseStartId = 0;
this.mouseBatchChooseEndId = 0;
this.inBatchExpansion = false;
this.performanceOn = false;
this.timing = {
renderStart: 0,
renderEnd: 0
};
this.lastMeasuredIndex = 0;
this.handleSelectAllChange = (0, _mobx.action)(function (value) {
var _this$props = _this.props,
dataSet = _this$props.dataSet,
filter = _this$props.filter;
var isSelectAll = value ? dataSet.currentSelected.length === dataSet.records.filter(function (record) {
return record.selectable;
}).length : !value;
if (!isSelectAll) {
dataSet.selectAll(filter);
} else {
dataSet.unSelectAll();
if (_this.showCachedSelection) {
dataSet.clearCachedSelected();
}
}
});
this.saveCustomizedDebounce = (0, _debounce["default"])(this.saveCustomized, 1000);
this.stopScroll = (0, _debounce["default"])((0, _mobx.action)(function () {
_this.scrolling = false;
}), 300);
(0, _mobx.runInAction)(function () {
_this.scrollPosition = _enum2.ScrollPosition.left;
_this.mouseBatchChooseIdList = [];
_this.mouseBatchChooseState = false;
_this.showCachedSelection = false;
_this.lockColumnsHeadRowsHeight = {};
_this.lockColumnsBodyRowsHeight = {};
_this.lockColumnsFootRowsHeight = {};
_this.node = node;
_this.expandedRows = [];
_this.screenHeight = typeof window === 'undefined' ? 0 : document.documentElement.clientHeight;
_this.headerHeight = 0;
_this.footerHeight = 0;
_this.lastScrollTop = 0;
_this.customizedActiveKey = ['columns'];
_this.leftOriginalColumns = [];
_this.originalColumns = [];
_this.rightOriginalColumns = [];
_this.tempCustomized = {
columns: {}
};
_this.customized = {
columns: {}
};
_this.setProps(node.props);
if (_this.customizable) {
_this.loadCustomized();
} else {
_this.initColumns();
}
});
}
(0, _createClass2["default"])(TableStore, [{
key: "styleHeight",
get: function get() {
var autoHeight = this.autoHeight,
style = this.props.style,
parentPaddingTop = this.parentPaddingTop;
return autoHeight ? autoHeightToStyle(autoHeight, parentPaddingTop).height : style && style.height;
}
}, {
key: "styleMaxHeight",
get: function get() {
var autoHeight = this.autoHeight,
style = this.props.style,
parentPaddingTop = this.parentPaddingTop;
return autoHeight ? autoHeightToStyle(autoHeight, parentPaddingTop).maxHeight : style && style.maxHeight;
}
}, {
key: "styleMinHeight",
get: function get() {
var style = this.props.style;
return style && (0, _UnitConvertor.toPx)(style.minHeight, this.getRelationSize);
}
}, {
key: "computedHeight",
get: function get() {
if (this.heightChangeable) {
var _this$customized = this.customized,
heightType = _this$customized.heightType,
height = _this$customized.height,
heightDiff = _this$customized.heightDiff,
tempCustomized = this.tempCustomized;
var tempHeightType = (0, _mobx.get)(tempCustomized, 'heightType');
if (tempHeightType) {
if (tempHeightType === _enum2.TableHeightType.fixed) {
return (0, _mobx.get)(tempCustomized, 'height');
}
if (tempHeightType === _enum2.TableHeightType.flex) {
return this.screenHeight - ((0, _mobx.get)(tempCustomized, 'heightDiff') || 0);
}
return undefined;
}
if (heightType) {
if (heightType === _enum2.TableHeightType.fixed) {
return height;
}
if (heightType === _enum2.TableHeightType.flex) {
return this.screenHeight - (heightDiff || 0);
}
return undefined;
}
}
return (0, _UnitConvertor.toPx)(this.styleHeight, this.getRelationSize);
}
}, {
key: "otherHeight",
get: function get() {
var footerHeight = this.footerHeight;
var footerTotalHeight = footerHeight && this.overflowX ? (0, _measureScrollbar["default"])() + footerHeight : 0;
return this.headerHeight + footerTotalHeight;
}
}, {
key: "height",
get: function get() {
if (!this.isBodyExpanded) {
return undefined;
}
var computedHeight = this.computedHeight;
var maxHeight = (0, _UnitConvertor.toPx)(this.styleMaxHeight, this.getRelationSize);
var minHeight = (0, _UnitConvertor.toPx)(this.styleMinHeight, this.getRelationSize);
var isComputedHeight = (0, _isNumber["default"])(computedHeight);
if (isComputedHeight || (0, _isNumber["default"])(minHeight) || (0, _isNumber["default"])(maxHeight)) {
var rowHeight = this.rowHeight,
otherHeight = this.otherHeight;
var rowMinHeight = ((0, _isNumber["default"])(rowHeight) ? rowHeight : 30) + otherHeight;
var minTotalHeight = minHeight ? Math.max(rowMinHeight, minHeight) : rowMinHeight;
var height = (0, _defaultTo["default"])(computedHeight, this.bodyHeight + otherHeight);
var totalHeight = Math.max(minTotalHeight, maxHeight ? Math.min(maxHeight, height) : height);
return isComputedHeight || totalHeight !== height ? totalHeight - otherHeight : undefined;
}
}
}, {
key: "totalHeight",
get: function get() {
var height = this.height,
bodyHeight = this.bodyHeight,
otherHeight = this.otherHeight;
return (0, _defaultTo["default"])(height, bodyHeight) + otherHeight;
}
}, {
key: "bodyHeight",
get: function get() {
if (this.propVirtual) {
var virtualHeight = this.virtualHeight;
if (virtualHeight > 0) {
return virtualHeight;
}
}
return this.calcBodyHeight || 0;
}
}, {
key: "stickyLeft",
get: function get() {
return [_enum2.ScrollPosition.right, _enum2.ScrollPosition.middle].includes(this.scrollPosition);
}
}, {
key: "stickyRight",
get: function get() {
return [_enum2.ScrollPosition.left, _enum2.ScrollPosition.middle].includes(this.scrollPosition);
}
}, {
key: "performanceEnabled",
get: function get() {
var performanceEnabled = this.getConfig('performanceEnabled');
return performanceEnabled && performanceEnabled.Table;
}
}, {
key: "dataSet",
get: function get() {
return this.props.dataSet;
}
}, {
key: "prefixCls",
get: function get() {
return this.node.prefixCls;
}
}, {
key: "customizable",
get: function get() {
var customizedCode = this.props.customizedCode;
if (customizedCode) {
if ('customizable' in this.props) {
return this.props.customizable;
}
return this.getConfig('tableCustomizable') || this.node.context.getCustomizable('Table');
}
return false;
}
}, {
key: "aggregation",
get: function get() {
var aggregation = this.customized.aggregation;
if (aggregation !== undefined) {
return aggregation;
}
var propAggregation = this.props.aggregation;
return propAggregation;
}
}, {
key: "aggregationExpandType",
get: function get() {
return this.customized.aggregationExpandType || 'cell';
}
}, {
key: "autoHeight",
get: function get() {
var autoHeight = this.props.autoHeight;
if (autoHeight) {
var defaultAutoHeight = {
type: _enum2.TableAutoHeightType.minHeight,
diff: this.getConfig('tableAutoHeightDiff') || 80
};
if ((0, _isObject["default"])(autoHeight)) {
return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, defaultAutoHeight), autoHeight);
}
return defaultAutoHeight;
}
return undefined;
}
}, {
key: "heightType",
get: function get() {
if (this.heightChangeable) {
var tempHeightType = (0, _mobx.get)(this.tempCustomized, 'heightType');
if (tempHeightType !== undefined) {
return tempHeightType;
}
var heightType = this.customized.heightType;
if (heightType !== undefined) {
return heightType;
}
}
return this.originalHeightType;
}
}, {
key: "originalHeightType",
get: function get() {
var styleHeight = this.styleHeight;
if (styleHeight) {
if ((0, _isString["default"])(styleHeight) && (0, _UnitConvertor.isCalcSize)(styleHeight)) {
return _enum2.TableHeightType.flex;
}
if ((0, _isNumber["default"])((0, _UnitConvertor.toPx)(styleHeight))) {
return _enum2.TableHeightType.fixed;
}
}
return _enum2.TableHeightType.auto;
}
}, {
key: "virtualCell",
get: function get() {
if ('virtualCell' in this.props) {
return this.props.virtualCell;
}
return this.getConfig('tableVirtualCell');
}
}, {
key: "isFixedRowHeight",
get: function get() {
if (!this.aggregation || !this.hasAggregationColumn) {
return (0, _isNumber["default"])(this.rowHeight);
}
return false;
}
}, {
key: