UNPKG

@itwin/itwinui-react

Version:

A react component library for iTwinUI

194 lines (193 loc) 6.02 kB
'use strict'; 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', }), ), ); });