@douyinfe/semi-ui
Version:
A modern, comprehensive, flexible design system and UI library. Connect DesignOps & DevOps. Quickly build beautiful React apps. Maintained by Douyin-fe team.
105 lines (104 loc) • 3.82 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _noop2 = _interopRequireDefault(require("lodash/noop"));
var _get2 = _interopRequireDefault(require("lodash/get"));
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _classnames = _interopRequireDefault(require("classnames"));
var _ColGroup = _interopRequireDefault(require("./ColGroup"));
var _TableHeader = _interopRequireDefault(require("./TableHeader"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
/**
* When there are fixed columns, the header is rendered as a separate Table
*/
class HeadTable extends _react.default.PureComponent {
constructor() {
let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
selectedRowKeysSet: new Set()
};
super(props);
}
render() {
const {
scroll,
prefixCls,
fixed,
forwardedRef,
handleBodyScroll,
columns,
components,
onDidUpdate,
showHeader,
tableLayout,
bodyHasScrollBar,
sticky
} = this.props;
const Table = (0, _get2.default)(components, 'header.outer', 'table');
const x = (0, _get2.default)(scroll, 'x');
const headStyle = {};
const tableStyle = {};
if (x && !fixed) {
tableStyle.width = x;
}
if (bodyHasScrollBar) {
headStyle.overflowY = 'scroll';
}
const colgroup = /*#__PURE__*/_react.default.createElement(_ColGroup.default, {
columns: columns,
prefixCls: prefixCls
});
const tableHeader = /*#__PURE__*/_react.default.createElement(_TableHeader.default, Object.assign({}, this.props, {
columns: columns,
components: components,
onDidUpdate: onDidUpdate
}));
const headTableCls = (0, _classnames.default)(`${prefixCls}-header`, {
[`${prefixCls}-header-sticky`]: sticky,
[`${prefixCls}-header-hidden`]: !showHeader
});
const stickyTop = (0, _get2.default)(sticky, 'top', 0);
if (typeof stickyTop === 'number') {
headStyle.top = stickyTop;
}
return /*#__PURE__*/_react.default.createElement("div", {
key: "headTable",
style: headStyle,
className: headTableCls,
ref: forwardedRef,
onScroll: handleBodyScroll
}, /*#__PURE__*/_react.default.createElement(Table, {
style: tableStyle,
className: (0, _classnames.default)(prefixCls, {
[`${prefixCls}-fixed`]: tableLayout === 'fixed'
})
}, colgroup, tableHeader));
}
}
HeadTable.propTypes = {
tableLayout: _propTypes.default.string,
bodyHasScrollBar: _propTypes.default.bool,
columns: _propTypes.default.array,
components: _propTypes.default.object,
dataSource: _propTypes.default.array,
fixed: _propTypes.default.oneOfType([_propTypes.default.bool, _propTypes.default.string]),
handleBodyScroll: _propTypes.default.func,
prefixCls: _propTypes.default.string,
forwardedRef: _propTypes.default.oneOfType([_propTypes.default.object, _propTypes.default.func]),
scroll: _propTypes.default.shape({
x: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string, _propTypes.default.bool]),
y: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string])
}),
selectedRowKeysSet: _propTypes.default.instanceOf(Set).isRequired,
showHeader: _propTypes.default.bool,
onDidUpdate: _propTypes.default.func,
onHeaderRow: _propTypes.default.func
};
HeadTable.defaultProps = {
handleBodyScroll: _noop2.default
};
var _default = exports.default = /*#__PURE__*/_react.default.forwardRef((props, ref) => /*#__PURE__*/_react.default.createElement(HeadTable, Object.assign({}, props, {
forwardedRef: ref
})));
;