Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | import React from 'react';
import { useSortable } from '@dnd-kit/sortable';
import { CSS } from '@dnd-kit/utilities';
import { DragHandle } from '@mui/icons-material';
import { Box, TableCell, TableSortLabel, useTheme } from '@mui/material';
import { HeadCell } from '.';
import IconTooltip from '../IconTooltip';
import { SortOrder } from './sort';
type Props = {
headCell: HeadCell;
order: SortOrder;
orderBy?: string;
onRequestSort: (event: React.MouseEvent<unknown>, property: string) => void;
i: number;
};
export default function TableHeaderItem(props: Props): JSX.Element {
const { headCell, order, orderBy, onRequestSort, i } = props;
const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({
id: headCell.id,
});
const theme = useTheme();
const style = {
transform: CSS.Transform.toString(transform),
transition,
opacity: isDragging ? 0.5 : 1,
};
const createSortHandler = (property: string) => (event: React.MouseEvent<unknown>) => {
onRequestSort(event, property);
};
return headCell.alignment === 'right' ? (
<TableCell
ref={setNodeRef}
id={`table-header-${headCell.id}`}
key={headCell.id}
align={'right'}
padding={headCell.disablePadding ? 'none' : 'normal'}
sortDirection={orderBy === headCell.id ? order : false}
style={style}
className={headCell.className || ''}
sx={headCell.sx}
>
<Box display='flex' alignItems='center' flexDirection='row-reverse'>
{headCell.label && (
<TableSortLabel
sx={{ flexDirection: 'row-reverse' }}
active={orderBy === headCell.id}
direction={orderBy === headCell.id ? order : 'asc'}
onClick={createSortHandler(headCell.id)}
>
{headCell.tooltipTitle && <IconTooltip title={headCell.tooltipTitle} disableRightMargin={true} />}
{headCell.label}
</TableSortLabel>
)}
{i > 0 && (
<DragHandle
{...attributes}
{...listeners}
sx={{
verticalAlign: 'middle',
display: 'inline-flex',
marginLeft: headCell.alignment === 'right' ? '0px' : '-20px',
color: theme.palette.common.white,
'&:hover': {
color: theme.palette.neutral[600],
},
}}
/>
)}
</Box>
</TableCell>
) : (
<TableCell
ref={setNodeRef}
id={`table-header-${headCell.id}`}
key={headCell.id}
align={'left'}
padding={headCell.disablePadding ? 'none' : 'normal'}
sortDirection={orderBy === headCell.id ? order : false}
style={style}
className={headCell.className || ''}
sx={headCell.sx}
>
{headCell.label && (
<TableSortLabel
active={orderBy === headCell.id}
direction={orderBy === headCell.id ? order : 'asc'}
onClick={createSortHandler(headCell.id)}
>
{i > 0 && (
<DragHandle
{...attributes}
{...listeners}
sx={{
marginLeft: '-20px',
color: theme.palette.common.white,
'&:hover': {
color: theme.palette.neutral[600],
},
}}
/>
)}
{headCell.label}
{headCell.tooltipTitle && <IconTooltip title={headCell.tooltipTitle} />}
</TableSortLabel>
)}
</TableCell>
);
}
|