UNPKG

choerodon-ui

Version:

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

1,473 lines (1,212 loc) 108 kB
"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: