choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
331 lines (268 loc) • 11.4 kB
JavaScript
;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _tslib = require("tslib");
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _mobxReact = require("mobx-react");
var _classnames = _interopRequireDefault(require("classnames"));
var _mobx = require("mobx");
var _UnitConvertor = require("../../../lib/_util/UnitConvertor");
var _measureScrollbar = _interopRequireDefault(require("../../../lib/_util/measureScrollbar"));
var _TableHeaderCell = _interopRequireDefault(require("./TableHeaderCell"));
var _TableContext = _interopRequireDefault(require("./TableContext"));
var _enum = require("./enum");
var _utils = require("./utils");
var _autobind = _interopRequireDefault(require("../_util/autobind"));
var _TableHeaderRow = _interopRequireDefault(require("./TableHeaderRow"));
function _createSuper(Derived) {
function isNativeReflectConstruct() {
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
if (Reflect.construct.sham) return false;
if (typeof Proxy === "function") return true;
try {
Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));
return true;
} catch (e) {
return false;
}
}
return function () {
var Super = (0, _getPrototypeOf2["default"])(Derived),
result;
if (isNativeReflectConstruct()) {
var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor;
result = Reflect.construct(Super, arguments, NewTarget);
} else {
result = Super.apply(this, arguments);
}
return (0, _possibleConstructorReturn2["default"])(this, result);
};
}
var TableHeader =
/*#__PURE__*/
function (_Component) {
(0, _inherits2["default"])(TableHeader, _Component);
var _super = _createSuper(TableHeader);
function TableHeader() {
(0, _classCallCheck2["default"])(this, TableHeader);
return _super.apply(this, arguments);
}
(0, _createClass2["default"])(TableHeader, [{
key: "saveRef",
value: function saveRef(node) {
this.node = node;
}
}, {
key: "getHeaderNode",
value: function getHeaderNode() {
return this.node;
}
}, {
key: "handleTheadMouseEnter",
value: function handleTheadMouseEnter() {
var tableStore = this.context.tableStore;
tableStore.isHeaderHover = true;
}
}, {
key: "handleTheadMouseLeave",
value: function handleTheadMouseLeave() {
var tableStore = this.context.tableStore;
tableStore.isHeaderHover = false;
}
}, {
key: "getTrs",
value: function getTrs() {
var _this = this;
var _this$props = this.props,
lock = _this$props.lock,
dataSet = _this$props.dataSet;
var tableStore = this.context.tableStore;
var prefixCls = tableStore.prefixCls;
var rows = this.getTableHeaderRows(this.groupedColumns);
return rows.map(function (row, rowIndex) {
if (row.length) {
var hasPlaceholder = tableStore.overflowY && rowIndex === 0 && lock !== _enum.ColumnLock.left;
var prevColumn;
var placeholderWidth = hasPlaceholder ? (0, _measureScrollbar["default"])() : 0;
var tds = row.map(function (col, index, cols) {
if (!col.hidden) {
var column = col.column,
rowSpan = col.rowSpan,
colSpan = col.colSpan,
lastLeaf = col.lastLeaf,
children = col.children;
var key = String((0, _utils.getColumnKey)(column));
var props = {
key: key,
dataSet: dataSet,
prevColumn: prevColumn,
column: column,
resizeColumn: lastLeaf,
getHeaderNode: _this.getHeaderNode
};
if (rowSpan > 1 || children) {
props.rowSpan = rowSpan;
}
if (colSpan > 1 || children) {
props.colSpan = colSpan;
}
prevColumn = lastLeaf;
if ((0, _utils.isStickySupport)() && tableStore.overflowX) {
var columnLock = (0, _utils.getColumnLock)(column.lock);
if (columnLock === _enum.ColumnLock.left) {
props.style = {
left: (0, _UnitConvertor.pxToRem)(col.left)
};
var next = cols[index + 1];
if (!next || (0, _utils.getColumnLock)(next.column.lock) !== _enum.ColumnLock.left) {
props.className = "".concat(prefixCls, "-cell-fix-left-last");
}
} else if (columnLock === _enum.ColumnLock.right) {
props.style = {
right: (0, _UnitConvertor.pxToRem)(col.right + placeholderWidth)
};
var prev = cols[index - 1];
if (!prev || prev.column.lock !== _enum.ColumnLock.right) {
props.className = "".concat(prefixCls, "-cell-fix-right-first");
}
}
}
return _react["default"].createElement(_TableHeaderCell["default"], (0, _extends2["default"])({}, props));
}
return undefined;
});
if (hasPlaceholder) {
var placeHolderProps = {
key: 'fixed-column',
rowSpan: rows.length
};
var classList = ["".concat(prefixCls, "-cell")];
if ((0, _utils.isStickySupport)() && tableStore.overflowX) {
var hasColRightLock = tds.some(function (td) {
if (td) {
return td.props.column.lock === _enum.ColumnLock.right;
}
return false;
});
placeHolderProps.style = hasColRightLock ? {
right: 0
} : {};
classList.push("".concat(prefixCls, "-cell-fix-right"));
}
placeHolderProps.className = classList.join(' ');
tds.push(_react["default"].createElement("th", (0, _extends2["default"])({}, placeHolderProps), "\xA0"));
}
return _react["default"].createElement(_TableHeaderRow["default"], {
key: String(rowIndex),
rowIndex: rowIndex,
tds: tds,
rows: rows,
lock: lock
});
}
return undefined;
});
}
}, {
key: "render",
value: function render() {
var _classNames;
var _this$context$tableSt = this.context.tableStore,
prefixCls = _this$context$tableSt.prefixCls,
overflowX = _this$context$tableSt.overflowX,
columnResizable = _this$context$tableSt.columnResizable,
isHeaderHover = _this$context$tableSt.isHeaderHover,
columnResizing = _this$context$tableSt.columnResizing,
border = _this$context$tableSt.props.border;
var trs = this.getTrs();
var theadProps = {
ref: this.saveRef,
className: (0, _classnames["default"])("".concat(prefixCls, "-thead"), (_classNames = {}, (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-column-resizable"), columnResizable), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-column-group"), trs && trs.length > 1), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-thead-hover"), isHeaderHover || columnResizing), _classNames))
};
if (!(0, _utils.isStickySupport)() && overflowX && !border) {
theadProps.onMouseEnter = this.handleTheadMouseEnter;
theadProps.onMouseLeave = this.handleTheadMouseLeave;
}
return _react["default"].createElement("thead", (0, _extends2["default"])({}, theadProps), trs);
}
}, {
key: "getHeight",
value: function getHeight() {
var node = this.node;
if (node) {
return (0, _utils.getHeight)(node);
}
return 0;
}
}, {
key: "getTableHeaderRows",
value: function getTableHeaderRows(columns) {
var _this2 = this;
var currentRow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
var rows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
rows[currentRow] = rows[currentRow] || [];
columns.forEach(function (column) {
var hidden = column.hidden,
rowSpan = column.rowSpan,
colSpan = column.colSpan,
children = column.children;
if (!hidden) {
if (rowSpan && rows.length < rowSpan) {
while (rows.length < rowSpan) {
rows.push([]);
}
}
if (children) {
_this2.getTableHeaderRows(children.columns, currentRow + rowSpan, rows);
}
if (colSpan !== 0) {
rows[currentRow].push(column);
}
}
});
return rows;
}
}, {
key: "groupedColumns",
get: function get() {
var tableStore = this.context.tableStore;
var lock = this.props.lock;
switch (lock) {
case _enum.ColumnLock.left:
case true:
return tableStore.leftGroupedColumns;
case _enum.ColumnLock.right:
return tableStore.rightGroupedColumns;
default:
return tableStore.groupedColumns;
}
}
}]);
return TableHeader;
}(_react.Component);
TableHeader.displayName = 'TableHeader';
TableHeader.propTypes = {
lock: _propTypes["default"].oneOfType([_propTypes["default"].bool, _propTypes["default"].oneOf([_enum.ColumnLock.right, _enum.ColumnLock.left])])
};
TableHeader.contextType = _TableContext["default"];
(0, _tslib.__decorate)([_autobind["default"]], TableHeader.prototype, "saveRef", null);
(0, _tslib.__decorate)([_autobind["default"]], TableHeader.prototype, "getHeaderNode", null);
(0, _tslib.__decorate)([_autobind["default"], _mobx.action], TableHeader.prototype, "handleTheadMouseEnter", null);
(0, _tslib.__decorate)([_autobind["default"], _mobx.action], TableHeader.prototype, "handleTheadMouseLeave", null);
(0, _tslib.__decorate)([_mobx.computed], TableHeader.prototype, "groupedColumns", null);
TableHeader = (0, _tslib.__decorate)([_mobxReact.observer], TableHeader);
var _default = TableHeader;
exports["default"] = _default;
//# sourceMappingURL=TableHeader.js.map