choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
137 lines (111 loc) • 4.39 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var React = _interopRequireWildcard(require("react"));
var _isFunction = _interopRequireDefault(require("lodash/isFunction"));
var _get = _interopRequireDefault(require("lodash/get"));
var _ColumnGroup = _interopRequireDefault(require("../ColumnGroup"));
var _HeaderCell = _interopRequireDefault(require("../HeaderCell"));
var _isNullOrUndefined = _interopRequireDefault(require("./isNullOrUndefined"));
function cloneCell(Cell, props) {
return React.cloneElement(Cell, props);
}
function mergeCells(cells) {
var nextCells = [];
for (var i = 0; i < cells.length; i += 1) {
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;
var groupChildren = []; // fix(ColumnGroup): fix column cannot be sorted in ColumnGroup
/**
* 为列头添加分组
*/
if (groupCount && isHeaderCell) {
var nextWidth = width;
var left = 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;
if (j !== 0) {
nextWidth += nextCellWidth;
left += cells[i + j - 1].props.width;
cells[i + j] = cloneCell(nextCell, {
hidden: true
});
}
groupChildren.push(React.createElement(_HeaderCell["default"], {
key: j,
left: left,
dataKey: dataKey,
width: nextCellWidth,
sortable: sortable,
sortColumn: sortColumn,
sortType: sortType,
onSortColumn: onSortColumn
}, children));
}
nextCells.push(cloneCell(cells[i], {
width: nextWidth,
children: React.createElement(_ColumnGroup["default"], {
width: nextWidth,
headerHeight: headerHeight,
header: groupHeader,
verticalAlign: verticalAlign
}, groupChildren)
}));
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
}));
continue;
}
nextCells.push(cells[i]);
}
return nextCells;
}
var _default = mergeCells;
exports["default"] = _default;
//# sourceMappingURL=mergeCells.js.map