UNPKG

choerodon-ui

Version:

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

295 lines (252 loc) 10.4 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"]; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"]; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var React = _interopRequireWildcard(require("react")); var _isFunction = _interopRequireDefault(require("lodash/isFunction")); var _groupBy = _interopRequireDefault(require("lodash/groupBy")); var _get = _interopRequireDefault(require("lodash/get")); var _ColumnGroup = _interopRequireDefault(require("../ColumnGroup")); var _HeaderCell = _interopRequireDefault(require("../HeaderCell")); var _isNullOrUndefined = _interopRequireDefault(require("./isNullOrUndefined")); var _excluded = ["width", "sortable", "children", "dataKey", "onSortColumn", "sortColumn", "sortType", "headerHeight", "groupHeader", "left", "resizable", "fixed"]; function cloneCell(Cell, props) { return /*#__PURE__*/React.cloneElement(Cell, props); } function mergeCells(cells) { var leftFixedLength = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; var nextCells = []; var columnGroupLeft = 0; var mergeMaxCells = []; var currentGroupName = ''; var usedCells = []; var preWidth = [0]; var _loop = function _loop(_i) { var _cells$_i$props = cells[_i].props, width = _cells$_i$props.width, colSpan = _cells$_i$props.colSpan, groupCount = _cells$_i$props.groupCount, groupHeader = _cells$_i$props.groupHeader, isHeaderCell = _cells$_i$props.isHeaderCell, headerHeight = _cells$_i$props.headerHeight, verticalAlign = _cells$_i$props.verticalAlign, parent = _cells$_i$props.parent, cellLeft = _cells$_i$props.left, fixed = _cells$_i$props.fixed; if (usedCells.includes(cells[_i].key)) { i = _i; return "continue"; } var groupChildrenStore = []; var groupChildren = []; // fix(ColumnGroup): fix column cannot be sorted in ColumnGroup /** * 为列头添加分组 */ if (parent && isHeaderCell) { var nextWidth = width; var left = 0; var resizeLeft = 0; for (var j = 0; j < groupCount; j += 1) { var nextCell = cells[_i + j]; var _nextCell$props = nextCell.props, nextCellWidth = _nextCell$props.width, sortable = _nextCell$props.sortable, children = _nextCell$props.children, dataKey = _nextCell$props.dataKey, onSortColumn = _nextCell$props.onSortColumn, sortColumn = _nextCell$props.sortColumn, sortType = _nextCell$props.sortType, _headerHeight = _nextCell$props.headerHeight, _nextCell$props$group = _nextCell$props.groupHeader, nextGroupHeader = _nextCell$props$group === void 0 ? currentGroupName : _nextCell$props$group, columnLeft = _nextCell$props.left, resizable = _nextCell$props.resizable, _fixed = _nextCell$props.fixed, otherProps = (0, _objectWithoutProperties2["default"])(_nextCell$props, _excluded); if (j === 0) { currentGroupName = nextGroupHeader; resizeLeft = columnLeft; } if (currentGroupName !== nextGroupHeader) { groupChildrenStore = [].concat(groupChildren); _i = _i + j; break; } if (j !== 0) { nextWidth += nextCellWidth; left += cells[_i + j - 1].props.width; cells[_i + j] = cloneCell(nextCell, { hidden: true }); } var otherHeaderProps = void 0; if (resizable) { otherHeaderProps = { resizable: resizable, resizeLeft: resizeLeft, onColumnResizeEnd: otherProps.onColumnResizeEnd, onColumnResizeMove: otherProps.onColumnResizeMove, onColumnResizeStart: otherProps.onColumnResizeStart, onMouseEnterHandler: otherProps.onMouseEnterHandler, onMouseLeaveHandler: otherProps.onMouseLeaveHandler }; } groupChildren.push( /*#__PURE__*/React.createElement(_HeaderCell["default"], (0, _extends2["default"])({ key: j, index: leftFixedLength + _i + j, left: left, fixed: _fixed, dataKey: dataKey, width: nextCellWidth, sortable: sortable, sortColumn: sortColumn, sortType: sortType, onSortColumn: onSortColumn, verticalAlign: verticalAlign, headerHeight: _headerHeight / 2 }, otherHeaderProps), children)); usedCells.push(nextCell.key); } if (groupHeader !== parent.props.header) { if (mergeMaxCells.length && parent.props.header !== mergeMaxCells[mergeMaxCells.length - 1].header) { columnGroupLeft = nextWidth; preWidth = [0]; } else { columnGroupLeft += nextWidth; } mergeMaxCells.push((0, _objectSpread2["default"])((0, _objectSpread2["default"])({ index: _i, content: groupCount ? /*#__PURE__*/React.createElement(_ColumnGroup["default"], { left: preWidth[preWidth.length - 1], width: nextWidth, header: groupHeader, verticalAlign: verticalAlign, headerHeight: headerHeight / 3 * 2, headerLeft: cellLeft, fixed: fixed }, groupChildren.map(function (x) { return /*#__PURE__*/React.cloneElement(x, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, x.props), {}, { headerHeight: headerHeight / 3 })); })) : /*#__PURE__*/React.cloneElement(cells[_i], { left: preWidth[preWidth.length - 1], resizeLeft: cellLeft - preWidth[preWidth.length - 1], headerHeight: headerHeight / 3 * 2 }) }, parent.props), {}, { headerHeight: headerHeight, width: nextWidth })); preWidth.push(columnGroupLeft); } else if (groupChildrenStore.length) { columnGroupLeft += nextWidth; preWidth.push(columnGroupLeft); groupChildrenStore.forEach(function (x) { mergeMaxCells.push((0, _objectSpread2["default"])((0, _objectSpread2["default"])({ index: _i, content: /*#__PURE__*/React.cloneElement(x, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, x.props), {}, { headerHeight: headerHeight * (2 / 3) })) }, parent.props), {}, { headerHeight: headerHeight, width: x.props.width })); }); } else { nextCells.push(cloneCell(cells[_i], { width: nextWidth, children: /*#__PURE__*/React.createElement(_ColumnGroup["default"], { width: nextWidth, headerHeight: headerHeight, header: groupHeader, verticalAlign: verticalAlign, headerLeft: cellLeft, fixed: fixed }, groupChildren) })); } i = _i; return "continue"; } else if (colSpan) { /** * 如果存在 colSpan 属性,就去找它的下一个 Cell, * 看看值是否是 isNullOrUndefined,,如果为空这可以合并这个单元格 */ var _nextWidth = width; for (var _j = 0; _j < colSpan; _j += 1) { var _nextCell = cells[_i + _j]; if (_nextCell) { var _nextCell$props2 = _nextCell.props, rowData = _nextCell$props2.rowData, rowIndex = _nextCell$props2.rowIndex, _children = _nextCell$props2.children, colSpanWidth = _nextCell$props2.width, _isHeaderCell = _nextCell$props2.isHeaderCell, _dataKey = _nextCell$props2.dataKey; var cellText = (0, _isFunction["default"])(_children) ? _children(rowData, rowIndex) : (0, _get["default"])(rowData, _dataKey); if (rowData && (0, _isNullOrUndefined["default"])(cellText) || _isHeaderCell && (0, _isNullOrUndefined["default"])(_children)) { _nextWidth += colSpanWidth; cells[_i + _j] = cloneCell(_nextCell, { hidden: true }); } } } nextCells.push(cloneCell(cells[_i], { width: _nextWidth, // Fix this use of the variablecolSpan always evaluates to true 'aria-colspan': _nextWidth > width ? colSpan : undefined })); i = _i; return "continue"; } nextCells.push(cells[_i]); i = _i; }; for (var i = 0; i < cells.length; i += 1) { var _ret = _loop(i); if (_ret === "continue") continue; } if (mergeMaxCells.length) { var groupByHeader = (0, _groupBy["default"])(mergeMaxCells, 'header'); for (var key in groupByHeader) { var mapGroup = groupByHeader[key]; var firstMerge = mapGroup[0]; var width = mapGroup.reduce(function (total, col) { return total += col.width; }, 0); var align = firstMerge.align, verticalAlign = firstMerge.verticalAlign, headerHeight = firstMerge.headerHeight, header = firstMerge.header, fixed = firstMerge.fixed, index = firstMerge.index; nextCells.push(cloneCell(cells[index], { width: width, align: align, fixed: fixed, resizable: false, children: /*#__PURE__*/React.createElement(_ColumnGroup["default"], { width: width, headerHeight: headerHeight / 3 * 2, header: header, verticalAlign: verticalAlign, headerLeft: cells[index].props.left, fixed: fixed }, mapGroup.map(function (x) { return x.content; })) })); } } return nextCells; } var _default = mergeCells; exports["default"] = _default; //# sourceMappingURL=mergeCells.js.map