UNPKG

@appbuckets/react-ui

Version:
155 lines (148 loc) 3.96 kB
'use strict'; var tslib = require('tslib'); var React = require('react'); var clsx = require('clsx'); var areEqualStringArray = require('../../utils/areEqualStringArray.js'); var RxTable_context = require('../RxTable.context.js'); function _interopDefaultLegacy(e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; } function _interopNamespace(e) { if (e && e.__esModule) return e; var n = Object.create(null); if (e) { Object.keys(e).forEach(function (k) { if (k !== 'default') { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty( n, k, d.get ? d : { enumerable: true, get: function () { return e[k]; }, } ); } }); } n['default'] = e; return Object.freeze(n); } var React__namespace = /*#__PURE__*/ _interopNamespace(React); var clsx__default = /*#__PURE__*/ _interopDefaultLegacy(clsx); /* -------- * Component Definition * -------- */ var ColumnHeader = function (props) { var className = props.className, column = props.column, disableSorting = props.disableSorting, isFilterHeader = props.isFilterHeader, overrideContent = props.overrideContent; // ---- // Get Context Data // ---- var _a = RxTable_context.useRxTable(), classes = _a.classes, HeaderCell = _a.Components.HeaderCell, getColumnWidth = _a.columns.getWidth, isVirtualized = _a.layout.isVirtualized, _b = _a.sorting, currentSorting = _b.current, setSorting = _b.set, isSortReversed = _b.isReversed, styles = _a.styles; // ---- // Get Column Sort Property // ---- var columnSort = React__namespace.useMemo( function () { var isSortable = Array.isArray(column.sort) && !!column.sort.length && !disableSorting && !isFilterHeader; return { isSortable: isSortable, isSorted: isSortable && areEqualStringArray(currentSorting, column.sort), }; }, [column.sort, currentSorting, disableSorting, isFilterHeader] ); // ---- // Build Header Classes // ---- var headerClasses = clsx__default['default']( column.textAlign && 'has-text-'.concat(column.textAlign), className, column.headerClassName, isFilterHeader ? classes.FilterCell || classes.HeaderCell : classes.HeaderCell, isFilterHeader && 'filter' ); // ---- // Handlers // ---- var handleSortChange = React__namespace.useCallback( function () { if (!columnSort.isSortable) { return; } if (columnSort.isSorted) { setSorting(column.sort, !isSortReversed); } else { setSorting(column.sort, false); } }, [ column.sort, isSortReversed, setSorting, columnSort.isSortable, columnSort.isSorted, ] ); // ---- // Get Column Width // ---- var columnWidth = React__namespace.useMemo( function () { return getColumnWidth(column.key); }, [getColumnWidth, column.key] ); // ---- // Render the Component // ---- return React__namespace.createElement( HeaderCell, { className: headerClasses, column: column, content: column.header, hasSorting: columnSort.isSortable, isActualSortingColumn: columnSort.isSorted, isReversedSorting: columnSort.isSorted && isSortReversed, isVirtualized: isVirtualized, style: tslib.__assign( tslib.__assign( {}, isFilterHeader ? styles.FilterCell || styles.HeaderCell : styles.HeaderCell ), { flexBasis: columnWidth, width: columnWidth } ), onClick: columnSort.isSortable ? handleSortChange : undefined, }, overrideContent ); }; ColumnHeader.displayName = 'ColumnHeader'; module.exports = ColumnHeader;