-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSortableHeader.tsx
More file actions
38 lines (35 loc) · 844 Bytes
/
SortableHeader.tsx
File metadata and controls
38 lines (35 loc) · 844 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import { Stack, Table, UnstyledButton } from '@mantine/core';
import { SortColumn, SortDirection } from '../types';
interface Props {
sortKey: SortColumn;
label: string;
onSort: (col: SortColumn) => void;
filter?: React.ReactNode;
activeColumn?: SortColumn;
direction?: SortDirection;
}
export function SortableHeader({
sortKey,
label,
onSort,
filter,
activeColumn,
direction
}: Props) {
const isActive = activeColumn === sortKey;
const indicator = isActive ? (direction === 'asc' ? ' ↑' : ' ↓') : '';
return (
<Table.Th>
<Stack gap={0}>
<UnstyledButton
style={{ cursor: 'pointer', whiteSpace: 'nowrap' }}
onClick={() => onSort(sortKey)}
>
{label}
{indicator}
</UnstyledButton>
{filter}
</Stack>
</Table.Th>
);
}