material-react-table 1.9.0 → 1.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.js +55 -21
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/MaterialReactTable.d.ts +1 -1
- package/dist/cjs/types/body/MRT_TableBody.d.ts +1 -1
- package/dist/cjs/types/column.utils.d.ts +1 -1
- package/dist/cjs/types/filterFns.d.ts +1 -1
- package/dist/cjs/types/footer/MRT_TableFooterRow.d.ts +1 -1
- package/dist/cjs/types/sortingFns.d.ts +300 -8
- package/dist/esm/material-react-table.esm.js +55 -21
- package/dist/esm/material-react-table.esm.js.map +1 -1
- package/dist/esm/types/MaterialReactTable.d.ts +1 -1
- package/dist/esm/types/body/MRT_TableBody.d.ts +1 -1
- package/dist/esm/types/column.utils.d.ts +1 -1
- package/dist/esm/types/filterFns.d.ts +1 -1
- package/dist/esm/types/footer/MRT_TableFooterRow.d.ts +1 -1
- package/dist/esm/types/sortingFns.d.ts +300 -8
- package/dist/index.d.ts +1 -1
- package/package.json +15 -15
- package/src/MaterialReactTable.tsx +2 -2
- package/src/body/MRT_TableBody.tsx +2 -2
- package/src/body/MRT_TableBodyCellValue.tsx +7 -3
- package/src/body/MRT_TableBodyRow.tsx +4 -2
- package/src/column.utils.ts +1 -1
- package/src/filterFns.ts +1 -1
- package/src/footer/MRT_TableFooterRow.tsx +1 -1
- package/src/inputs/MRT_FilterTextField.tsx +1 -1
- package/src/menus/MRT_FilterOptionMenu.tsx +39 -15
- package/src/sortingFns.ts +3 -3
- package/src/table/MRT_Table.tsx +2 -2
- package/src/table/MRT_TableRoot.tsx +1 -1
@@ -99,6 +99,10 @@ export const mrtFilterOptions = (
|
|
99
99
|
},
|
100
100
|
];
|
101
101
|
|
102
|
+
const rangeModes = ['between', 'betweenInclusive', 'inNumberRange'];
|
103
|
+
const emptyModes = ['empty', 'notEmpty'];
|
104
|
+
const arrModes = ['arrIncludesSome', 'arrIncludesAll', 'arrIncludes'];
|
105
|
+
|
102
106
|
interface Props<TData extends Record<string, any> = {}> {
|
103
107
|
anchorEl: HTMLElement | null;
|
104
108
|
header?: MRT_Header<TData>;
|
@@ -150,46 +154,66 @@ export const MRT_FilterOptionMenu = <TData extends Record<string, any> = {}>({
|
|
150
154
|
);
|
151
155
|
|
152
156
|
const handleSelectFilterMode = (option: MRT_FilterOption) => {
|
153
|
-
|
157
|
+
const prevFilterMode = columnDef?._filterFn ?? '';
|
158
|
+
if (!header || !column) {
|
159
|
+
// global filter mode
|
160
|
+
setGlobalFilterFn(option);
|
161
|
+
} else if (option !== prevFilterMode) {
|
162
|
+
// column filter mode
|
154
163
|
setColumnFilterFns((prev: { [key: string]: any }) => ({
|
155
164
|
...prev,
|
156
165
|
[header.id]: option,
|
157
166
|
}));
|
158
|
-
|
159
|
-
|
167
|
+
|
168
|
+
// reset filter value and/or perform new filter render
|
169
|
+
if (emptyModes.includes(option)) {
|
170
|
+
// will now be empty/notEmpty filter mode
|
171
|
+
if (
|
172
|
+
currentFilterValue !== ' ' &&
|
173
|
+
!emptyModes.includes(prevFilterMode)
|
174
|
+
) {
|
175
|
+
column.setFilterValue(' ');
|
176
|
+
} else if (currentFilterValue) {
|
177
|
+
column.setFilterValue(currentFilterValue); // perform new filter render
|
178
|
+
}
|
160
179
|
} else if (
|
161
180
|
columnDef?.filterVariant === 'multi-select' ||
|
162
|
-
|
163
|
-
option as string,
|
164
|
-
)
|
181
|
+
arrModes.includes(option as string)
|
165
182
|
) {
|
183
|
+
// will now be array filter mode
|
166
184
|
if (
|
167
185
|
currentFilterValue instanceof String ||
|
168
186
|
(currentFilterValue as Array<any>)?.length
|
169
187
|
) {
|
170
188
|
column.setFilterValue([]);
|
171
189
|
setFilterValue?.([]);
|
190
|
+
} else if (currentFilterValue) {
|
191
|
+
column.setFilterValue(currentFilterValue); // perform new filter render
|
172
192
|
}
|
173
193
|
} else if (
|
174
194
|
columnDef?.filterVariant === 'range' ||
|
175
|
-
|
176
|
-
option as MRT_FilterOption,
|
177
|
-
)
|
195
|
+
rangeModes.includes(option as MRT_FilterOption)
|
178
196
|
) {
|
179
|
-
|
197
|
+
// will now be range filter mode
|
198
|
+
if (
|
199
|
+
!Array.isArray(currentFilterValue) ||
|
200
|
+
(!(currentFilterValue as Array<any>)?.every((v) => v === '') &&
|
201
|
+
!rangeModes.includes(prevFilterMode))
|
202
|
+
) {
|
180
203
|
column.setFilterValue(['', '']);
|
181
204
|
setFilterValue?.('');
|
205
|
+
} else {
|
206
|
+
column.setFilterValue(currentFilterValue); // perform new filter render
|
182
207
|
}
|
183
208
|
} else {
|
184
|
-
|
185
|
-
|
186
|
-
) {
|
209
|
+
// will now be single value filter mode
|
210
|
+
if (Array.isArray(currentFilterValue)) {
|
187
211
|
column.setFilterValue('');
|
188
212
|
setFilterValue?.('');
|
213
|
+
} else {
|
214
|
+
column.setFilterValue(currentFilterValue); // perform new filter render
|
189
215
|
}
|
190
216
|
}
|
191
|
-
} else {
|
192
|
-
setGlobalFilterFn(option);
|
193
217
|
}
|
194
218
|
setAnchorEl(null);
|
195
219
|
onSelect?.();
|
package/src/sortingFns.ts
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
import { compareItems, RankingInfo } from '@tanstack/match-sorter-utils';
|
2
|
-
import { Row, sortingFns } from '@tanstack/react-table';
|
3
|
-
import { MRT_Row } from '.';
|
1
|
+
import { compareItems, type RankingInfo } from '@tanstack/match-sorter-utils';
|
2
|
+
import { type Row, sortingFns } from '@tanstack/react-table';
|
3
|
+
import type { MRT_Row } from '.';
|
4
4
|
|
5
5
|
const fuzzy = <TData extends Record<string, any> = {}>(
|
6
6
|
rowA: Row<TData>,
|
package/src/table/MRT_Table.tsx
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
import React, { useCallback, useMemo } from 'react';
|
2
2
|
import {
|
3
3
|
defaultRangeExtractor,
|
4
|
-
Range,
|
5
4
|
useVirtualizer,
|
6
|
-
|
5
|
+
type Range,
|
6
|
+
type Virtualizer,
|
7
7
|
} from '@tanstack/react-virtual';
|
8
8
|
import Table from '@mui/material/Table';
|
9
9
|
import { MRT_TableHead } from '../head/MRT_TableHead';
|