material-react-table 2.11.3 → 2.12.0
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +29 -22
- package/dist/index.d.ts +19 -1
- package/dist/index.esm.js +116 -70
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +117 -69
- package/dist/index.js.map +1 -1
- package/package.json +16 -16
- package/src/components/body/MRT_TableBodyCell.tsx +7 -0
- package/src/components/body/MRT_TableBodyRow.tsx +5 -0
- package/src/components/body/MRT_TableDetailPanel.tsx +2 -5
- package/src/components/head/MRT_TableHead.tsx +11 -11
- package/src/components/head/MRT_TableHeadCell.tsx +7 -0
- package/src/components/head/MRT_TableHeadCellFilterContainer.tsx +3 -4
- package/src/components/head/MRT_TableHeadCellFilterLabel.tsx +61 -37
- package/src/components/inputs/MRT_FilterRangeFields.tsx +8 -2
- package/src/components/inputs/MRT_FilterTextField.tsx +29 -38
- package/src/components/table/MRT_TablePaper.tsx +4 -4
- package/src/components/toolbar/MRT_ToolbarDropZone.tsx +5 -0
- package/src/hooks/display-columns/getMRT_RowActionsColumnDef.tsx +1 -1
- package/src/hooks/display-columns/getMRT_RowDragColumnDef.tsx +1 -1
- package/src/hooks/display-columns/getMRT_RowExpandColumnDef.tsx +1 -1
- package/src/hooks/display-columns/getMRT_RowNumbersColumnDef.tsx +1 -1
- package/src/hooks/display-columns/getMRT_RowPinningColumnDef.tsx +1 -1
- package/src/hooks/display-columns/getMRT_RowSelectColumnDef.tsx +1 -1
- package/src/hooks/display-columns/getMRT_RowSpacerColumnDef.tsx +1 -1
- package/src/utils/column.utils.ts +86 -0
- package/src/utils/utils.ts +1 -1
package/package.json
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
{
|
2
|
-
"version": "2.
|
2
|
+
"version": "2.12.0",
|
3
3
|
"license": "MIT",
|
4
4
|
"name": "material-react-table",
|
5
5
|
"description": "A fully featured Material UI V5 implementation of TanStack React Table V8, written from the ground up in TypeScript.",
|
@@ -71,17 +71,17 @@
|
|
71
71
|
"@mui/x-date-pickers": "^6.19.4",
|
72
72
|
"@rollup/plugin-typescript": "^11.1.6",
|
73
73
|
"@size-limit/preset-small-lib": "^11.0.2",
|
74
|
-
"@storybook/addon-a11y": "^7.6.
|
75
|
-
"@storybook/addon-essentials": "^7.6.
|
76
|
-
"@storybook/addon-interactions": "^7.6.
|
77
|
-
"@storybook/addon-links": "^7.6.
|
78
|
-
"@storybook/addon-storysource": "^7.6.
|
79
|
-
"@storybook/blocks": "^7.6.
|
80
|
-
"@storybook/react": "^7.6.
|
81
|
-
"@storybook/react-vite": "^7.6.
|
74
|
+
"@storybook/addon-a11y": "^7.6.16",
|
75
|
+
"@storybook/addon-essentials": "^7.6.16",
|
76
|
+
"@storybook/addon-interactions": "^7.6.16",
|
77
|
+
"@storybook/addon-links": "^7.6.16",
|
78
|
+
"@storybook/addon-storysource": "^7.6.16",
|
79
|
+
"@storybook/blocks": "^7.6.16",
|
80
|
+
"@storybook/react": "^7.6.16",
|
81
|
+
"@storybook/react-vite": "^7.6.16",
|
82
82
|
"@storybook/testing-library": "^0.2.2",
|
83
|
-
"@types/node": "^20.11.
|
84
|
-
"@types/react": "^18.2.
|
83
|
+
"@types/node": "^20.11.19",
|
84
|
+
"@types/react": "^18.2.56",
|
85
85
|
"@types/react-dom": "^18.2.19",
|
86
86
|
"@typescript-eslint/eslint-plugin": "^7.0.1",
|
87
87
|
"@typescript-eslint/parser": "^7.0.1",
|
@@ -99,11 +99,11 @@
|
|
99
99
|
"rollup-plugin-dts": "^6.1.0",
|
100
100
|
"rollup-plugin-peer-deps-external": "^2.2.4",
|
101
101
|
"size-limit": "^11.0.2",
|
102
|
-
"storybook": "^7.6.
|
102
|
+
"storybook": "^7.6.16",
|
103
103
|
"storybook-dark-mode": "^3.0.3",
|
104
104
|
"tslib": "^2.6.2",
|
105
105
|
"typescript": "^5.3.3",
|
106
|
-
"vite": "^5.1.
|
106
|
+
"vite": "^5.1.3"
|
107
107
|
},
|
108
108
|
"peerDependencies": {
|
109
109
|
"@emotion/react": ">=11.11",
|
@@ -111,13 +111,13 @@
|
|
111
111
|
"@mui/icons-material": ">=5.11",
|
112
112
|
"@mui/material": ">=5.13",
|
113
113
|
"@mui/x-date-pickers": ">=6.15.0",
|
114
|
-
"react": ">=
|
115
|
-
"react-dom": ">=
|
114
|
+
"react": ">=17.0",
|
115
|
+
"react-dom": ">=17.0"
|
116
116
|
},
|
117
117
|
"dependencies": {
|
118
118
|
"@tanstack/match-sorter-utils": "8.11.8",
|
119
119
|
"@tanstack/react-table": "8.12.0",
|
120
|
-
"@tanstack/react-virtual": "3.
|
120
|
+
"@tanstack/react-virtual": "3.1.1",
|
121
121
|
"highlight-words": "1.2.2"
|
122
122
|
}
|
123
123
|
}
|
@@ -210,6 +210,12 @@ export const MRT_TableBodyCell = <TData extends MRT_RowData>({
|
|
210
210
|
}
|
211
211
|
};
|
212
212
|
|
213
|
+
const handleDragOver = (e: DragEvent) => {
|
214
|
+
if (columnDef.enableColumnOrdering !== false) {
|
215
|
+
e.preventDefault();
|
216
|
+
}
|
217
|
+
};
|
218
|
+
|
213
219
|
const handleContextMenu = (e: MouseEvent<HTMLTableCellElement>) => {
|
214
220
|
tableCellProps?.onContextMenu?.(e);
|
215
221
|
if (isRightClickable) {
|
@@ -228,6 +234,7 @@ export const MRT_TableBodyCell = <TData extends MRT_RowData>({
|
|
228
234
|
onContextMenu={handleContextMenu}
|
229
235
|
onDoubleClick={handleDoubleClick}
|
230
236
|
onDragEnter={handleDragEnter}
|
237
|
+
onDragOver={handleDragOver}
|
231
238
|
sx={(theme) => ({
|
232
239
|
'&:hover': {
|
233
240
|
outline:
|
@@ -140,6 +140,10 @@ export const MRT_TableBodyRow = <TData extends MRT_RowData>({
|
|
140
140
|
}
|
141
141
|
};
|
142
142
|
|
143
|
+
const handleDragOver = (e: DragEvent) => {
|
144
|
+
e.preventDefault();
|
145
|
+
};
|
146
|
+
|
143
147
|
const rowRef = useRef<HTMLTableRowElement | null>(null);
|
144
148
|
|
145
149
|
const cellHighlightColor = isRowSelected
|
@@ -164,6 +168,7 @@ export const MRT_TableBodyRow = <TData extends MRT_RowData>({
|
|
164
168
|
data-pinned={!!isRowPinned || undefined}
|
165
169
|
data-selected={isRowSelected || undefined}
|
166
170
|
onDragEnter={handleDragEnter}
|
171
|
+
onDragOver={handleDragOver}
|
167
172
|
ref={(node: HTMLTableRowElement) => {
|
168
173
|
if (node) {
|
169
174
|
rowRef.current = node;
|
@@ -34,7 +34,6 @@ export const MRT_TableDetailPanel = <TData extends MRT_RowData>({
|
|
34
34
|
getState,
|
35
35
|
getVisibleLeafColumns,
|
36
36
|
options: {
|
37
|
-
enableRowVirtualization,
|
38
37
|
layoutMode,
|
39
38
|
mrtTheme: { baseBackgroundColor },
|
40
39
|
muiDetailPanelProps,
|
@@ -93,14 +92,12 @@ export const MRT_TableDetailPanel = <TData extends MRT_RowData>({
|
|
93
92
|
borderBottom: !row.getIsExpanded() ? 'none' : undefined,
|
94
93
|
display: layoutMode?.startsWith('grid') ? 'flex' : undefined,
|
95
94
|
py: !!DetailPanel && row.getIsExpanded() ? '1rem' : 0,
|
96
|
-
transition: !
|
97
|
-
? 'all 150ms ease-in-out'
|
98
|
-
: undefined,
|
95
|
+
transition: !virtualRow ? 'all 150ms ease-in-out' : undefined,
|
99
96
|
width: `100%`,
|
100
97
|
...(parseFromValuesOrFunc(tableCellProps?.sx, theme) as any),
|
101
98
|
})}
|
102
99
|
>
|
103
|
-
{
|
100
|
+
{virtualRow ? (
|
104
101
|
row.getIsExpanded() && DetailPanel
|
105
102
|
) : (
|
106
103
|
<Collapse in={row.getIsExpanded()} mountOnEnter unmountOnExit>
|
@@ -20,8 +20,6 @@ export const MRT_TableHead = <TData extends MRT_RowData>({
|
|
20
20
|
...rest
|
21
21
|
}: MRT_TableHeadProps<TData>) => {
|
22
22
|
const {
|
23
|
-
getHeaderGroups,
|
24
|
-
getSelectedRowModel,
|
25
23
|
getState,
|
26
24
|
options: {
|
27
25
|
enableStickyHeader,
|
@@ -60,7 +58,7 @@ export const MRT_TableHead = <TData extends MRT_RowData>({
|
|
60
58
|
})}
|
61
59
|
>
|
62
60
|
{positionToolbarAlertBanner === 'head-overlay' &&
|
63
|
-
(showAlertBanner || getSelectedRowModel().rows.length > 0) ? (
|
61
|
+
(showAlertBanner || table.getSelectedRowModel().rows.length > 0) ? (
|
64
62
|
<tr
|
65
63
|
style={{
|
66
64
|
display: layoutMode?.startsWith('grid') ? 'grid' : undefined,
|
@@ -77,14 +75,16 @@ export const MRT_TableHead = <TData extends MRT_RowData>({
|
|
77
75
|
</th>
|
78
76
|
</tr>
|
79
77
|
) : (
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
78
|
+
table
|
79
|
+
.getHeaderGroups()
|
80
|
+
.map((headerGroup) => (
|
81
|
+
<MRT_TableHeadRow
|
82
|
+
columnVirtualizer={columnVirtualizer}
|
83
|
+
headerGroup={headerGroup as any}
|
84
|
+
key={headerGroup.id}
|
85
|
+
table={table}
|
86
|
+
/>
|
87
|
+
))
|
88
88
|
)}
|
89
89
|
</TableHead>
|
90
90
|
);
|
@@ -141,6 +141,12 @@ export const MRT_TableHeadCell = <TData extends MRT_RowData>({
|
|
141
141
|
}
|
142
142
|
};
|
143
143
|
|
144
|
+
const handleDragOver = (e: DragEvent) => {
|
145
|
+
if (columnDef.enableColumnOrdering !== false) {
|
146
|
+
e.preventDefault();
|
147
|
+
}
|
148
|
+
};
|
149
|
+
|
144
150
|
const HeaderElement =
|
145
151
|
parseFromValuesOrFunc(columnDef.Header, {
|
146
152
|
column,
|
@@ -161,6 +167,7 @@ export const MRT_TableHeadCell = <TData extends MRT_RowData>({
|
|
161
167
|
data-index={staticColumnIndex}
|
162
168
|
data-pinned={!!isColumnPinned || undefined}
|
163
169
|
onDragEnter={handleDragEnter}
|
170
|
+
onDragOver={handleDragOver}
|
164
171
|
ref={(node: HTMLTableCellElement) => {
|
165
172
|
if (node) {
|
166
173
|
tableHeadCellRefs.current[column.id] = node;
|
@@ -4,6 +4,7 @@ import {
|
|
4
4
|
type MRT_RowData,
|
5
5
|
type MRT_TableInstance,
|
6
6
|
} from '../../types';
|
7
|
+
import { getColumnFilterInfo } from '../../utils/column.utils';
|
7
8
|
import { MRT_FilterCheckbox } from '../inputs/MRT_FilterCheckbox';
|
8
9
|
import { MRT_FilterRangeFields } from '../inputs/MRT_FilterRangeFields';
|
9
10
|
import { MRT_FilterRangeSlider } from '../inputs/MRT_FilterRangeSlider';
|
@@ -28,6 +29,7 @@ export const MRT_TableHeadCellFilterContainer = <TData extends MRT_RowData>({
|
|
28
29
|
const { showColumnFilters } = getState();
|
29
30
|
const { column } = header;
|
30
31
|
const { columnDef } = column;
|
32
|
+
const { isRangeFilter } = getColumnFilterInfo({ header, table });
|
31
33
|
|
32
34
|
return (
|
33
35
|
<Collapse
|
@@ -40,10 +42,7 @@ export const MRT_TableHeadCellFilterContainer = <TData extends MRT_RowData>({
|
|
40
42
|
<MRT_FilterCheckbox column={column} table={table} />
|
41
43
|
) : columnDef.filterVariant === 'range-slider' ? (
|
42
44
|
<MRT_FilterRangeSlider header={header} table={table} />
|
43
|
-
) :
|
44
|
-
['between', 'betweenInclusive', 'inNumberRange'].includes(
|
45
|
-
columnDef._filterFn,
|
46
|
-
) ? (
|
45
|
+
) : isRangeFilter ? (
|
47
46
|
<MRT_FilterRangeFields header={header} table={table} />
|
48
47
|
) : (
|
49
48
|
<MRT_FilterTextField header={header} table={table} />
|
@@ -10,7 +10,11 @@ import {
|
|
10
10
|
type MRT_RowData,
|
11
11
|
type MRT_TableInstance,
|
12
12
|
} from '../../types';
|
13
|
-
import {
|
13
|
+
import {
|
14
|
+
getColumnFilterInfo,
|
15
|
+
useDropdownOptions,
|
16
|
+
} from '../../utils/column.utils';
|
17
|
+
import { getValueAndLabel, parseFromValuesOrFunc } from '../../utils/utils';
|
14
18
|
|
15
19
|
export interface MRT_TableHeadCellFilterLabelProps<TData extends MRT_RowData>
|
16
20
|
extends IconButtonProps {
|
@@ -35,20 +39,32 @@ export const MRT_TableHeadCellFilterLabel = <TData extends MRT_RowData = {}>({
|
|
35
39
|
const { column } = header;
|
36
40
|
const { columnDef } = column;
|
37
41
|
|
38
|
-
const filterValue = column.getFilterValue();
|
42
|
+
const filterValue = column.getFilterValue() as [string, string] | string;
|
39
43
|
|
40
44
|
const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null);
|
41
45
|
|
46
|
+
const {
|
47
|
+
currentFilterOption,
|
48
|
+
isMultiSelectFilter,
|
49
|
+
isRangeFilter,
|
50
|
+
isSelectFilter,
|
51
|
+
} = getColumnFilterInfo({ header, table });
|
52
|
+
|
53
|
+
const dropdownOptions = useDropdownOptions({ header, table });
|
54
|
+
|
55
|
+
const getSelectLabel = (index?: number) =>
|
56
|
+
getValueAndLabel(
|
57
|
+
dropdownOptions?.find(
|
58
|
+
(option) =>
|
59
|
+
getValueAndLabel(option).value ===
|
60
|
+
(index !== undefined ? filterValue[index] : filterValue),
|
61
|
+
),
|
62
|
+
).label;
|
63
|
+
|
42
64
|
const isFilterActive =
|
43
65
|
(Array.isArray(filterValue) && filterValue.some(Boolean)) ||
|
44
66
|
(!!filterValue && !Array.isArray(filterValue));
|
45
67
|
|
46
|
-
const isRangeFilter =
|
47
|
-
columnDef.filterVariant?.includes('range') ||
|
48
|
-
['between', 'betweenInclusive', 'inNumberRange'].includes(
|
49
|
-
columnDef._filterFn,
|
50
|
-
);
|
51
|
-
const currentFilterOption = columnDef._filterFn;
|
52
68
|
const filterTooltip =
|
53
69
|
columnFilterDisplayMode === 'popover' && !isFilterActive
|
54
70
|
? localization.filterByColumn?.replace(
|
@@ -73,10 +89,16 @@ export const MRT_TableHeadCellFilterLabel = <TData extends MRT_RowData = {}>({
|
|
73
89
|
'{filterValue}',
|
74
90
|
`"${
|
75
91
|
Array.isArray(filterValue)
|
76
|
-
? (filterValue as [string, string])
|
77
|
-
|
78
|
-
|
79
|
-
|
92
|
+
? (filterValue as [string, string])
|
93
|
+
.map((value, index) =>
|
94
|
+
isMultiSelectFilter ? getSelectLabel(index) : value,
|
95
|
+
)
|
96
|
+
.join(
|
97
|
+
`" ${isRangeFilter ? localization.and : localization.or} "`,
|
98
|
+
)
|
99
|
+
: isSelectFilter
|
100
|
+
? getSelectLabel()
|
101
|
+
: (filterValue as string)
|
80
102
|
}"`,
|
81
103
|
)
|
82
104
|
.replace('" "', '');
|
@@ -126,31 +148,33 @@ export const MRT_TableHeadCellFilterLabel = <TData extends MRT_RowData = {}>({
|
|
126
148
|
</Tooltip>
|
127
149
|
</Box>
|
128
150
|
</Grow>
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
<
|
152
|
-
|
153
|
-
|
151
|
+
{columnFilterDisplayMode === 'popover' && (
|
152
|
+
<Popover
|
153
|
+
anchorEl={anchorEl}
|
154
|
+
anchorOrigin={{
|
155
|
+
horizontal: 'center',
|
156
|
+
vertical: 'top',
|
157
|
+
}}
|
158
|
+
disableScrollLock
|
159
|
+
onClick={(event) => event.stopPropagation()}
|
160
|
+
onClose={(event) => {
|
161
|
+
//@ts-ignore
|
162
|
+
event.stopPropagation();
|
163
|
+
setAnchorEl(null);
|
164
|
+
}}
|
165
|
+
onKeyDown={(event) => event.key === 'Enter' && setAnchorEl(null)}
|
166
|
+
open={!!anchorEl}
|
167
|
+
slotProps={{ paper: { sx: { overflow: 'visible' } } }}
|
168
|
+
transformOrigin={{
|
169
|
+
horizontal: 'center',
|
170
|
+
vertical: 'bottom',
|
171
|
+
}}
|
172
|
+
>
|
173
|
+
<Box sx={{ p: '1rem' }}>
|
174
|
+
<MRT_TableHeadCellFilterContainer header={header} table={table} />
|
175
|
+
</Box>
|
176
|
+
</Popover>
|
177
|
+
)}
|
154
178
|
</>
|
155
179
|
);
|
156
180
|
};
|
@@ -28,8 +28,14 @@ export const MRT_FilterRangeFields = <TData extends MRT_RowData>({
|
|
28
28
|
...(parseFromValuesOrFunc(rest?.sx, theme) as any),
|
29
29
|
})}
|
30
30
|
>
|
31
|
-
|
32
|
-
|
31
|
+
{[0, 1].map((rangeFilterIndex) => (
|
32
|
+
<MRT_FilterTextField
|
33
|
+
header={header}
|
34
|
+
key={rangeFilterIndex}
|
35
|
+
rangeFilterIndex={rangeFilterIndex}
|
36
|
+
table={table}
|
37
|
+
/>
|
38
|
+
))}
|
33
39
|
</Box>
|
34
40
|
);
|
35
41
|
};
|
@@ -3,7 +3,6 @@ import {
|
|
3
3
|
type MouseEvent,
|
4
4
|
useCallback,
|
5
5
|
useEffect,
|
6
|
-
useMemo,
|
7
6
|
useRef,
|
8
7
|
useState,
|
9
8
|
} from 'react';
|
@@ -35,6 +34,10 @@ import {
|
|
35
34
|
type MRT_RowData,
|
36
35
|
type MRT_TableInstance,
|
37
36
|
} from '../../types';
|
37
|
+
import {
|
38
|
+
getColumnFilterInfo,
|
39
|
+
useDropdownOptions,
|
40
|
+
} from '../../utils/column.utils';
|
38
41
|
import { getValueAndLabel, parseFromValuesOrFunc } from '../../utils/utils';
|
39
42
|
import { MRT_FilterOptionMenu } from '../menus/MRT_FilterOptionMenu';
|
40
43
|
|
@@ -53,7 +56,6 @@ export const MRT_FilterTextField = <TData extends MRT_RowData>({
|
|
53
56
|
}: MRT_FilterTextFieldProps<TData>) => {
|
54
57
|
const {
|
55
58
|
options: {
|
56
|
-
columnFilterModeOptions,
|
57
59
|
enableColumnFilterModes,
|
58
60
|
icons: { CloseIcon, FilterListIcon },
|
59
61
|
localization,
|
@@ -112,17 +114,20 @@ export const MRT_FilterTextField = <TData extends MRT_RowData>({
|
|
112
114
|
}),
|
113
115
|
};
|
114
116
|
|
115
|
-
const
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
117
|
+
const {
|
118
|
+
allowedColumnFilterOptions,
|
119
|
+
currentFilterOption,
|
120
|
+
facetedUniqueValues,
|
121
|
+
isAutocompleteFilter,
|
122
|
+
isDateFilter,
|
123
|
+
isMultiSelectFilter,
|
124
|
+
isRangeFilter,
|
125
|
+
isSelectFilter,
|
126
|
+
isTextboxFilter,
|
127
|
+
} = getColumnFilterInfo({ header, table });
|
128
|
+
|
129
|
+
const dropdownOptions = useDropdownOptions({ header, table });
|
130
|
+
|
126
131
|
const filterChipLabel = ['empty', 'notEmpty'].includes(currentFilterOption)
|
127
132
|
? //@ts-ignore
|
128
133
|
localization[
|
@@ -132,6 +137,7 @@ export const MRT_FilterTextField = <TData extends MRT_RowData>({
|
|
132
137
|
}`
|
133
138
|
]
|
134
139
|
: '';
|
140
|
+
|
135
141
|
const filterPlaceholder = !isRangeFilter
|
136
142
|
? textFieldProps?.placeholder ??
|
137
143
|
localization.filterByColumn?.replace('{column}', String(columnDef.header))
|
@@ -140,16 +146,14 @@ export const MRT_FilterTextField = <TData extends MRT_RowData>({
|
|
140
146
|
: rangeFilterIndex === 1
|
141
147
|
? localization.max
|
142
148
|
: '';
|
143
|
-
|
144
|
-
|
145
|
-
const showChangeModeButton =
|
149
|
+
|
150
|
+
const showChangeModeButton = !!(
|
146
151
|
enableColumnFilterModes &&
|
147
152
|
columnDef.enableColumnFilterModes !== false &&
|
148
153
|
!rangeFilterIndex &&
|
149
154
|
(allowedColumnFilterOptions === undefined ||
|
150
|
-
!!allowedColumnFilterOptions?.length)
|
151
|
-
|
152
|
-
const facetedUniqueValues = column.getFacetedUniqueValues();
|
155
|
+
!!allowedColumnFilterOptions?.length)
|
156
|
+
);
|
153
157
|
|
154
158
|
const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);
|
155
159
|
const [filterValue, setFilterValue] = useState<string | string[]>(() =>
|
@@ -257,23 +261,6 @@ export const MRT_FilterTextField = <TData extends MRT_RowData>({
|
|
257
261
|
);
|
258
262
|
}
|
259
263
|
|
260
|
-
const dropdownOptions = useMemo(
|
261
|
-
() =>
|
262
|
-
columnDef.filterSelectOptions ??
|
263
|
-
((isSelectFilter || isMultiSelectFilter || isAutocompleteFilter) &&
|
264
|
-
facetedUniqueValues
|
265
|
-
? Array.from(facetedUniqueValues.keys())
|
266
|
-
.filter((value) => value !== null && value !== undefined)
|
267
|
-
.sort((a, b) => a.localeCompare(b))
|
268
|
-
: undefined),
|
269
|
-
[
|
270
|
-
columnDef.filterSelectOptions,
|
271
|
-
facetedUniqueValues,
|
272
|
-
isMultiSelectFilter,
|
273
|
-
isSelectFilter,
|
274
|
-
],
|
275
|
-
);
|
276
|
-
|
277
264
|
const endAdornment =
|
278
265
|
!isAutocompleteFilter && !isDateFilter && !filterChipLabel ? (
|
279
266
|
<InputAdornment
|
@@ -447,8 +434,12 @@ export const MRT_FilterTextField = <TData extends MRT_RowData>({
|
|
447
434
|
) : isAutocompleteFilter ? (
|
448
435
|
<Autocomplete
|
449
436
|
freeSolo
|
450
|
-
getOptionLabel={(option) =>
|
451
|
-
|
437
|
+
getOptionLabel={(option: DropdownOption) =>
|
438
|
+
getValueAndLabel(option).label
|
439
|
+
}
|
440
|
+
onChange={(_e, newValue: DropdownOption) =>
|
441
|
+
handleAutocompleteChange(newValue)
|
442
|
+
}
|
452
443
|
options={
|
453
444
|
dropdownOptions?.map((option) => getValueAndLabel(option)) ?? []
|
454
445
|
}
|
@@ -48,16 +48,16 @@ export const MRT_TablePaper = <TData extends MRT_RowData>({
|
|
48
48
|
...(isFullScreen
|
49
49
|
? {
|
50
50
|
bottom: 0,
|
51
|
-
height: '
|
51
|
+
height: '100dvh',
|
52
52
|
left: 0,
|
53
53
|
margin: 0,
|
54
|
-
maxHeight: '
|
55
|
-
maxWidth: '
|
54
|
+
maxHeight: '100dvh',
|
55
|
+
maxWidth: '100dvw',
|
56
56
|
padding: 0,
|
57
57
|
position: 'fixed',
|
58
58
|
right: 0,
|
59
59
|
top: 0,
|
60
|
-
width: '
|
60
|
+
width: '100dvw',
|
61
61
|
zIndex: 999,
|
62
62
|
}
|
63
63
|
: {}),
|
@@ -29,6 +29,10 @@ export const MRT_ToolbarDropZone = <TData extends MRT_RowData>({
|
|
29
29
|
setHoveredColumn({ id: 'drop-zone' });
|
30
30
|
};
|
31
31
|
|
32
|
+
const handleDragOver = (e: DragEvent) => {
|
33
|
+
e.preventDefault();
|
34
|
+
};
|
35
|
+
|
32
36
|
useEffect(() => {
|
33
37
|
if (table.options.state?.showToolbarDropZone !== undefined) {
|
34
38
|
setShowToolbarDropZone(
|
@@ -45,6 +49,7 @@ export const MRT_ToolbarDropZone = <TData extends MRT_RowData>({
|
|
45
49
|
<Box
|
46
50
|
className="Mui-ToolbarDropZone"
|
47
51
|
onDragEnter={handleDragEnter}
|
52
|
+
onDragOver={handleDragOver}
|
48
53
|
{...rest}
|
49
54
|
sx={(theme) => ({
|
50
55
|
alignItems: 'center',
|
@@ -8,7 +8,7 @@ import { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';
|
|
8
8
|
|
9
9
|
export const getMRT_RowActionsColumnDef = <TData extends MRT_RowData>(
|
10
10
|
tableOptions: MRT_StatefulTableOptions<TData>,
|
11
|
-
): MRT_ColumnDef<TData>
|
11
|
+
): MRT_ColumnDef<TData> => {
|
12
12
|
return {
|
13
13
|
Cell: ({ cell, row, staticRowIndex, table }) => (
|
14
14
|
<MRT_ToggleRowActionMenuButton
|
@@ -9,7 +9,7 @@ import { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';
|
|
9
9
|
|
10
10
|
export const getMRT_RowDragColumnDef = <TData extends MRT_RowData>(
|
11
11
|
tableOptions: MRT_StatefulTableOptions<TData>,
|
12
|
-
): MRT_ColumnDef<TData>
|
12
|
+
): MRT_ColumnDef<TData> => {
|
13
13
|
return {
|
14
14
|
Cell: ({ row, rowRef, table }) => (
|
15
15
|
<MRT_TableBodyRowGrabHandle
|
@@ -13,7 +13,7 @@ import { getCommonTooltipProps } from '../../utils/style.utils';
|
|
13
13
|
|
14
14
|
export const getMRT_RowExpandColumnDef = <TData extends MRT_RowData>(
|
15
15
|
tableOptions: MRT_StatefulTableOptions<TData>,
|
16
|
-
): MRT_ColumnDef<TData>
|
16
|
+
): MRT_ColumnDef<TData> => {
|
17
17
|
const {
|
18
18
|
defaultColumn,
|
19
19
|
enableExpandAll,
|
@@ -7,7 +7,7 @@ import { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';
|
|
7
7
|
|
8
8
|
export const getMRT_RowNumbersColumnDef = <TData extends MRT_RowData>(
|
9
9
|
tableOptions: MRT_StatefulTableOptions<TData>,
|
10
|
-
): MRT_ColumnDef<TData>
|
10
|
+
): MRT_ColumnDef<TData> => {
|
11
11
|
const { localization, rowNumberDisplayMode } = tableOptions;
|
12
12
|
const {
|
13
13
|
pagination: { pageIndex, pageSize },
|
@@ -8,7 +8,7 @@ import { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';
|
|
8
8
|
|
9
9
|
export const getMRT_RowPinningColumnDef = <TData extends MRT_RowData>(
|
10
10
|
tableOptions: MRT_StatefulTableOptions<TData>,
|
11
|
-
): MRT_ColumnDef<TData>
|
11
|
+
): MRT_ColumnDef<TData> => {
|
12
12
|
return {
|
13
13
|
Cell: ({ row, table }) => (
|
14
14
|
<MRT_TableBodyRowPinButton row={row} table={table} />
|
@@ -8,7 +8,7 @@ import { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';
|
|
8
8
|
|
9
9
|
export const getMRT_RowSelectColumnDef = <TData extends MRT_RowData>(
|
10
10
|
tableOptions: MRT_StatefulTableOptions<TData>,
|
11
|
-
): MRT_ColumnDef<TData>
|
11
|
+
): MRT_ColumnDef<TData> => {
|
12
12
|
const { enableMultiRowSelection, enableSelectAll } = tableOptions;
|
13
13
|
|
14
14
|
return {
|
@@ -17,7 +17,7 @@ const blankColProps = {
|
|
17
17
|
|
18
18
|
export const getMRT_RowSpacerColumnDef = <TData extends MRT_RowData>(
|
19
19
|
tableOptions: MRT_StatefulTableOptions<TData>,
|
20
|
-
): MRT_ColumnDef<TData>
|
20
|
+
): MRT_ColumnDef<TData> => {
|
21
21
|
return {
|
22
22
|
...defaultDisplayColumnProps({
|
23
23
|
id: 'mrt-row-spacer',
|