import { TableCell, type TableCellBaseProps, TableSortLabel, Tooltip } from '@mui/material'; import { always, and, equals, ifElse, isNil } from 'ramda'; import type { Props as ListingProps } from '../..'; import type { Column } from '../../models'; import useStyleTable from '../../useStyleTable'; import { DraggableIconButton } from '../_internals/DraggableIconButton'; import HeaderLabel from '../_internals/Label'; import type { StylesProps } from './ListingHeaderCell.styles'; type Props = Pick< ListingProps, 'columnConfiguration' | 'sortField' | 'sortOrder' | 'onSort' > & { areColumnsEditable: boolean; className?: string; column: Column; itemRef: React.RefObject; style: React.CSSProperties; } & StylesProps; const ListingHeaderCell = ({ column, columnConfiguration, sortField, sortOrder, onSort, isDragging, itemRef, style, isInDragOverlay, areColumnsEditable, listingVariant, ...props }: Props): JSX.Element => { const { dataStyle } = useStyleTable({ listingVariant }); const columnLabel = column.shortLabel || column.label; const columnSortField = column.sortField || column.id; const getTooltipLabel = ifElse(isNil, always(''), always(column.label)); const sort = (): void => { const isDesc = and( equals(columnSortField, sortField), equals(sortOrder, 'desc') ); onSort?.({ sortField: columnSortField, sortOrder: isDesc ? 'asc' : 'desc' }); }; const headerContent = ( {columnLabel} ); return ( } ref={itemRef} style={{ ...style, height: dataStyle.header.height }} >
{column.sortable ? ( {headerContent} ) : (
{headerContent}
)} {columnConfiguration?.sortable && areColumnsEditable && ( )}
); }; export default ListingHeaderCell;