import React, { useCallback } from 'react'; import Icon from 'Components/Icon'; import Link from 'Components/Link/Link'; import { icons, sortDirections } from 'Helpers/Props'; import { SortDirection } from 'Helpers/Props/sortDirections'; import styles from './TableHeaderCell.css'; interface TableHeaderCellProps { className?: string; name: string; label?: string | (() => string) | React.ReactNode; columnLabel?: string | (() => string); isSortable?: boolean; isVisible?: boolean; isModifiable?: boolean; sortKey?: string; fixedSortDirection?: SortDirection; sortDirection?: string; children?: React.ReactNode; onSortPress?: (name: string, sortDirection?: SortDirection) => void; } function TableHeaderCell({ className = styles.headerCell, name, label, columnLabel, isSortable = false, isVisible, isModifiable, sortKey, sortDirection, fixedSortDirection, children, onSortPress, ...otherProps }: TableHeaderCellProps) { const isSorting = isSortable && sortKey === name; const sortIcon = sortDirection === sortDirections.ASCENDING ? icons.SORT_ASCENDING : icons.SORT_DESCENDING; const handlePress = useCallback(() => { if (fixedSortDirection) { onSortPress?.(name, fixedSortDirection); } else { onSortPress?.(name); } }, [name, fixedSortDirection, onSortPress]); return isSortable ? ( {children} {isSorting && } ) : ( {children} ); } export default TableHeaderCell;