@itwin/itwinui-react
Version:
A react component library for iTwinUI
194 lines (193 loc) • 6.02 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', {
value: true,
});
Object.defineProperty(exports, 'ColumnHeader', {
enumerable: true,
get: function () {
return ColumnHeader;
},
});
const _interop_require_default = require('@swc/helpers/_/_interop_require_default');
const _interop_require_wildcard = require('@swc/helpers/_/_interop_require_wildcard');
const _react = /*#__PURE__*/ _interop_require_wildcard._(require('react'));
const _index = require('../../utils/index.js');
const _FilterToggle = require('./filters/FilterToggle.js');
const _utils = require('./utils.js');
const _classnames = /*#__PURE__*/ _interop_require_default._(
require('classnames'),
);
const ColumnHeader = _react.forwardRef((props, forwardedRef) => {
let {
column,
areFiltersSet,
isResizable,
columnResizeMode,
enableColumnReordering,
density,
columnHasExpanders,
isLast,
isTableEmpty,
...rest
} = props;
let isHeaderDirectClick = _react.useRef(false);
let instance = _react.useContext(_utils.TableInstanceContext);
let COLUMN_MIN_WIDTHS = {
default: 72,
withExpander: 108,
};
let showFilterButton = (column) =>
(!isTableEmpty || areFiltersSet) && column.canFilter && !!column.Filter;
let showSortButton = (column) => !isTableEmpty && column.canSort;
let { onClick, ...restSortProps } = column.getSortByToggleProps();
if ([void 0, 0].includes(column.minWidth)) {
column.minWidth = columnHasExpanders
? COLUMN_MIN_WIDTHS.withExpander
: COLUMN_MIN_WIDTHS.default;
if ('number' == typeof column.width && column.minWidth > column.width)
column.minWidth = column.width;
}
let columnProps = column.getHeaderProps({
...restSortProps,
className: (0, _classnames.default)(
'iui-table-cell',
{
'iui-actionable': column.canSort,
'iui-sorted': column.isSorted,
'iui-table-cell-sticky': !!column.sticky,
},
column.columnClassName,
),
style: {
...(0, _utils.getCellStyle)(column, !!instance?.state.isTableResizing),
...(columnHasExpanders &&
(0, _utils.getSubRowStyle)({
density,
})),
...(0, _utils.getStickyStyle)(column, instance?.visibleColumns ?? []),
flexWrap: 'wrap',
columnGap: 'var(--iui-size-xs)',
},
});
return _react.createElement(
_index.Box,
{
...columnProps,
...rest,
key: columnProps.key,
title: void 0,
ref: (0, _index.useMergedRefs)(
_react.useCallback(
(el) => {
if (el) column.resizeWidth = el.getBoundingClientRect().width;
},
[column],
),
forwardedRef,
),
onMouseDown: () => {
isHeaderDirectClick.current = true;
},
onClick: (e) => {
if (isHeaderDirectClick.current) {
onClick?.(e);
isHeaderDirectClick.current = false;
}
},
tabIndex: showSortButton(column) ? 0 : void 0,
onKeyDown: (e) => {
if ('Enter' == e.key && showSortButton(column)) column.toggleSortBy();
},
},
_react.createElement(
_react.Fragment,
null,
'string' == typeof column.Header
? _react.createElement(
_index.ShadowRoot,
{
css: _index.lineClamp.css,
},
_react.createElement(
'div',
{
className: _index.lineClamp.className,
},
_react.createElement('slot', null),
),
_react.createElement('slot', {
name: 'actions',
}),
_react.createElement('slot', {
name: 'resizers',
}),
_react.createElement('slot', {
name: 'shadows',
}),
)
: null,
column.render('Header'),
(showFilterButton(column) || showSortButton(column)) &&
_react.createElement(
_index.Box,
{
className: 'iui-table-header-actions-container',
onKeyDown: (e) => e.stopPropagation(),
slot: 'actions',
},
showFilterButton(column) &&
_react.createElement(_FilterToggle.FilterToggle, {
column: column,
}),
showSortButton(column) &&
_react.createElement(
_index.Box,
{
className: 'iui-table-cell-end-icon',
},
column.isSortedDesc || (!column.isSorted && column.sortDescFirst)
? _react.createElement(_index.SvgSortDown, {
className: 'iui-table-sort',
'aria-hidden': true,
})
: _react.createElement(_index.SvgSortUp, {
className: 'iui-table-sort',
'aria-hidden': true,
}),
),
),
isResizable &&
column.isResizerVisible &&
(!isLast || 'expand' === columnResizeMode) &&
_react.createElement(
_index.Box,
{
...column.getResizerProps(),
className: 'iui-table-resizer',
slot: 'resizers',
},
_react.createElement(_index.Box, {
className: 'iui-table-resizer-bar',
}),
),
enableColumnReordering &&
!column.disableReordering &&
_react.createElement(_index.Box, {
className: 'iui-table-reorder-bar',
slot: 'resizers',
}),
'left' === column.sticky &&
instance?.state.sticky.isScrolledToRight &&
_react.createElement(_index.Box, {
className: 'iui-table-cell-shadow-right',
slot: 'shadows',
}),
'right' === column.sticky &&
instance?.state.sticky.isScrolledToLeft &&
_react.createElement(_index.Box, {
className: 'iui-table-cell-shadow-left',
slot: 'shadows',
}),
),
);
});