Files
2024-02-15 17:01:50 +00:00

35 lines
1.1 KiB
TypeScript

import type {LocationDescriptorObject} from 'history';
import type {GridColumnOrder, GridColumnSortBy} from 'sentry/components/gridEditable';
import SortLink from 'sentry/components/gridEditable/sortLink';
interface TableHeadProps<K> {
currentSort?: GridColumnSortBy<K> | null;
generateSortLink?: (column: K) => () => LocationDescriptorObject | undefined;
onClick?(column: GridColumnOrder<K>, e: React.MouseEvent<HTMLAnchorElement>): void;
rightAlignedColumns?: Set<K>;
sortableColumns?: Set<K>;
}
export function renderTableHead<K>({
currentSort,
generateSortLink,
rightAlignedColumns,
sortableColumns,
onClick,
}: TableHeadProps<K>) {
return function (column: GridColumnOrder<K>, _columnIndex: number) {
return (
<SortLink
onClick={e => onClick?.(column, e)}
align={rightAlignedColumns?.has(column.key) ? 'right' : 'left'}
title={column.name}
direction={currentSort?.key === column.key ? currentSort?.order : undefined}
canSort={sortableColumns?.has(column.key) || false}
generateSortLink={generateSortLink?.(column.key) ?? (() => undefined)}
replace
/>
);
};
}