/
MRT_TableHeadCellFilterContainer.tsx
52 lines (49 loc) · 1.65 KB
/
MRT_TableHeadCellFilterContainer.tsx
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
import Collapse, { type CollapseProps } from '@mui/material/Collapse';
import {
type MRT_Header,
type MRT_RowData,
type MRT_TableInstance,
} from '../../types';
import { getColumnFilterInfo } from '../../utils/column.utils';
import { MRT_FilterCheckbox } from '../inputs/MRT_FilterCheckbox';
import { MRT_FilterRangeFields } from '../inputs/MRT_FilterRangeFields';
import { MRT_FilterRangeSlider } from '../inputs/MRT_FilterRangeSlider';
import { MRT_FilterTextField } from '../inputs/MRT_FilterTextField';
export interface MRT_TableHeadCellFilterContainerProps<
TData extends MRT_RowData,
> extends CollapseProps {
header: MRT_Header<TData>;
table: MRT_TableInstance<TData>;
}
export const MRT_TableHeadCellFilterContainer = <TData extends MRT_RowData>({
header,
table,
...rest
}: MRT_TableHeadCellFilterContainerProps<TData>) => {
const {
getState,
options: { columnFilterDisplayMode },
} = table;
const { showColumnFilters } = getState();
const { column } = header;
const { columnDef } = column;
const { isRangeFilter } = getColumnFilterInfo({ header, table });
return (
<Collapse
in={showColumnFilters || columnFilterDisplayMode === 'popover'}
mountOnEnter
unmountOnExit
{...rest}
>
{columnDef.filterVariant === 'checkbox' ? (
<MRT_FilterCheckbox column={column} table={table} />
) : columnDef.filterVariant === 'range-slider' ? (
<MRT_FilterRangeSlider header={header} table={table} />
) : isRangeFilter ? (
<MRT_FilterRangeFields header={header} table={table} />
) : (
<MRT_FilterTextField header={header} table={table} />
)}
</Collapse>
);
};