material-react-table 3.1.0 → 3.2.0
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/index.d.ts +1 -0
- package/dist/index.esm.js +38 -13
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +38 -13
- package/dist/index.js.map +1 -1
- package/locales/ar/index.esm.js +1 -0
- package/locales/ar/index.js +1 -0
- package/locales/az/index.esm.js +1 -0
- package/locales/az/index.js +1 -0
- package/locales/bg/index.esm.js +1 -0
- package/locales/bg/index.js +1 -0
- package/locales/cs/index.esm.js +1 -0
- package/locales/cs/index.js +1 -0
- package/locales/da/index.esm.js +1 -0
- package/locales/da/index.js +1 -0
- package/locales/de/index.esm.js +1 -0
- package/locales/de/index.js +1 -0
- package/locales/el/index.esm.js +1 -0
- package/locales/el/index.js +1 -0
- package/locales/en/index.esm.js +1 -0
- package/locales/en/index.js +1 -0
- package/locales/es/index.esm.js +1 -0
- package/locales/es/index.js +1 -0
- package/locales/et/index.esm.js +1 -0
- package/locales/et/index.js +1 -0
- package/locales/fa/index.esm.js +1 -0
- package/locales/fa/index.js +1 -0
- package/locales/fi/index.esm.js +1 -0
- package/locales/fi/index.js +1 -0
- package/locales/fr/index.esm.js +1 -0
- package/locales/fr/index.js +1 -0
- package/locales/he/index.esm.js +1 -0
- package/locales/he/index.js +1 -0
- package/locales/hr/index.esm.js +1 -0
- package/locales/hr/index.js +1 -0
- package/locales/hu/index.esm.js +1 -0
- package/locales/hu/index.js +1 -0
- package/locales/hy/index.esm.js +1 -0
- package/locales/hy/index.js +1 -0
- package/locales/id/index.esm.js +1 -0
- package/locales/id/index.js +1 -0
- package/locales/it/index.esm.js +1 -0
- package/locales/it/index.js +1 -0
- package/locales/ja/index.esm.js +1 -0
- package/locales/ja/index.js +1 -0
- package/locales/ko/index.esm.js +1 -0
- package/locales/ko/index.js +1 -0
- package/locales/nl/index.esm.js +1 -0
- package/locales/nl/index.js +1 -0
- package/locales/no/index.esm.js +1 -0
- package/locales/no/index.js +1 -0
- package/locales/np/index.esm.js +1 -0
- package/locales/np/index.js +1 -0
- package/locales/pl/index.esm.js +1 -0
- package/locales/pl/index.js +1 -0
- package/locales/pt/index.esm.js +1 -0
- package/locales/pt/index.js +1 -0
- package/locales/pt-BR/index.esm.js +1 -0
- package/locales/pt-BR/index.js +1 -0
- package/locales/ro/index.esm.js +1 -0
- package/locales/ro/index.js +1 -0
- package/locales/ru/index.esm.js +1 -0
- package/locales/ru/index.js +1 -0
- package/locales/sk/index.esm.js +1 -0
- package/locales/sk/index.js +1 -0
- package/locales/sr-Cyrl-RS/index.esm.js +1 -0
- package/locales/sr-Cyrl-RS/index.js +1 -0
- package/locales/sr-Latn-RS/index.esm.js +1 -0
- package/locales/sr-Latn-RS/index.js +1 -0
- package/locales/sv/index.esm.js +1 -0
- package/locales/sv/index.js +1 -0
- package/locales/tr/index.esm.js +1 -0
- package/locales/tr/index.js +1 -0
- package/locales/uk/index.esm.js +1 -0
- package/locales/uk/index.js +1 -0
- package/locales/vi/index.esm.js +1 -0
- package/locales/vi/index.js +1 -0
- package/locales/zh-Hans/index.esm.js +1 -0
- package/locales/zh-Hans/index.js +1 -0
- package/locales/zh-Hant/index.esm.js +1 -0
- package/locales/zh-Hant/index.js +1 -0
- package/package.json +1 -1
- package/src/components/inputs/MRT_FilterTextField.tsx +18 -4
- package/src/components/toolbar/MRT_TablePagination.tsx +5 -3
- package/src/components/toolbar/MRT_ToolbarAlertBanner.tsx +2 -2
- package/src/hooks/useMRT_Effects.ts +1 -1
- package/src/hooks/useMRT_RowVirtualizer.ts +16 -4
- package/src/locales/ar.ts +1 -0
- package/src/locales/az.ts +1 -0
- package/src/locales/bg.ts +1 -0
- package/src/locales/cs.ts +1 -0
- package/src/locales/da.ts +1 -0
- package/src/locales/de.ts +1 -0
- package/src/locales/el.ts +1 -0
- package/src/locales/en.ts +1 -0
- package/src/locales/es.ts +1 -0
- package/src/locales/et.ts +1 -0
- package/src/locales/fa.ts +1 -0
- package/src/locales/fi.ts +1 -0
- package/src/locales/fr.ts +1 -0
- package/src/locales/he.ts +1 -0
- package/src/locales/hr.ts +1 -0
- package/src/locales/hu.ts +1 -0
- package/src/locales/hy.ts +1 -0
- package/src/locales/id.ts +1 -0
- package/src/locales/it.ts +1 -0
- package/src/locales/ja.ts +1 -0
- package/src/locales/ko.ts +1 -0
- package/src/locales/nl.ts +1 -0
- package/src/locales/no.ts +1 -0
- package/src/locales/np.ts +1 -0
- package/src/locales/pl.ts +1 -0
- package/src/locales/pt-BR.ts +1 -0
- package/src/locales/pt.ts +1 -0
- package/src/locales/ro.ts +1 -0
- package/src/locales/ru.ts +1 -0
- package/src/locales/sk.ts +1 -0
- package/src/locales/sr-Cyrl-RS.ts +1 -0
- package/src/locales/sr-Latn-RS.ts +1 -0
- package/src/locales/sv.ts +1 -0
- package/src/locales/tr.ts +1 -0
- package/src/locales/uk.ts +1 -0
- package/src/locales/vi.ts +1 -0
- package/src/locales/zh-Hans.ts +1 -0
- package/src/locales/zh-Hant.ts +1 -0
- package/src/types.ts +2 -0
- package/src/utils/virtualization.utils.ts +5 -0
@@ -1,12 +1,13 @@
|
|
1
1
|
import {
|
2
2
|
type ChangeEvent,
|
3
3
|
type MouseEvent,
|
4
|
+
SyntheticEvent,
|
4
5
|
useCallback,
|
5
6
|
useEffect,
|
6
7
|
useRef,
|
7
8
|
useState,
|
8
9
|
} from 'react';
|
9
|
-
import Autocomplete from '@mui/material/Autocomplete';
|
10
|
+
import Autocomplete, { AutocompleteInputChangeReason } from '@mui/material/Autocomplete';
|
10
11
|
import Box from '@mui/material/Box';
|
11
12
|
import Checkbox from '@mui/material/Checkbox';
|
12
13
|
import Chip from '@mui/material/Chip';
|
@@ -143,11 +144,13 @@ export const MRT_FilterTextField = <TData extends MRT_RowData>({
|
|
143
144
|
? (column.getFilterValue() as [string, string])?.[
|
144
145
|
rangeFilterIndex as number
|
145
146
|
] || ''
|
147
|
+
: isAutocompleteFilter
|
148
|
+
? typeof column.getFilterValue() === 'string' ? column.getFilterValue() as string : ''
|
146
149
|
: ((column.getFilterValue() as string) ?? ''),
|
147
150
|
);
|
148
151
|
const [autocompleteValue, setAutocompleteValue] =
|
149
152
|
useState<DropdownOption | null>(
|
150
|
-
isAutocompleteFilter ? (
|
153
|
+
() => isAutocompleteFilter ? ((column.getFilterValue() || null) as DropdownOption | null) : null,
|
151
154
|
);
|
152
155
|
|
153
156
|
const handleChangeDebounced = useCallback(
|
@@ -184,9 +187,13 @@ export const MRT_FilterTextField = <TData extends MRT_RowData>({
|
|
184
187
|
textFieldProps?.onChange?.(event);
|
185
188
|
};
|
186
189
|
|
190
|
+
const handleAutocompleteInputChange = (_event: SyntheticEvent, newValue: string, _reason: AutocompleteInputChangeReason) => {
|
191
|
+
handleChange(newValue)
|
192
|
+
};
|
193
|
+
|
187
194
|
const handleAutocompleteChange = (newValue: DropdownOption | null) => {
|
188
195
|
setAutocompleteValue(newValue);
|
189
|
-
|
196
|
+
handleChangeDebounced(getValueAndLabel(newValue).value);
|
190
197
|
};
|
191
198
|
|
192
199
|
const handleClear = () => {
|
@@ -200,6 +207,12 @@ export const MRT_FilterTextField = <TData extends MRT_RowData>({
|
|
200
207
|
newFilterValues[rangeFilterIndex as number] = undefined;
|
201
208
|
return newFilterValues;
|
202
209
|
});
|
210
|
+
} else if (isAutocompleteFilter) {
|
211
|
+
setAutocompleteValue(null)
|
212
|
+
setFilterValue('')
|
213
|
+
// when using 'autocomplete' this function is called only inside effect and only if the filterValue === undefined
|
214
|
+
// so the following call is excessive; should be uncommented if the handleClear becomes part of the Autocomplete component callbacks
|
215
|
+
// column.setFilterValue(undefined)
|
203
216
|
} else {
|
204
217
|
setFilterValue('');
|
205
218
|
column.setFilterValue(undefined);
|
@@ -434,6 +447,8 @@ export const MRT_FilterTextField = <TData extends MRT_RowData>({
|
|
434
447
|
options={
|
435
448
|
dropdownOptions?.map((option) => getValueAndLabel(option)) ?? []
|
436
449
|
}
|
450
|
+
inputValue={filterValue as string}
|
451
|
+
onInputChange={handleAutocompleteInputChange}
|
437
452
|
{...autocompleteProps}
|
438
453
|
renderInput={(builtinTextFieldProps: TextFieldProps) => (
|
439
454
|
<TextField
|
@@ -455,7 +470,6 @@ export const MRT_FilterTextField = <TData extends MRT_RowData>({
|
|
455
470
|
...commonTextFieldProps?.slotProps?.htmlInput,
|
456
471
|
},
|
457
472
|
}}
|
458
|
-
onChange={handleTextFieldChange}
|
459
473
|
onClick={(e: MouseEvent<HTMLInputElement>) => e.stopPropagation()}
|
460
474
|
/>
|
461
475
|
)}
|
@@ -174,10 +174,12 @@ export const MRT_TablePagination = <TData extends MRT_RowData>({
|
|
174
174
|
sx={{ m: '0 4px', minWidth: '8ch' }}
|
175
175
|
variant="body2"
|
176
176
|
>{`${
|
177
|
-
lastRowIndex === 0
|
178
|
-
|
177
|
+
lastRowIndex === 0
|
178
|
+
? 0
|
179
|
+
: (firstRowIndex + 1).toLocaleString(localization.language)
|
180
|
+
}-${lastRowIndex.toLocaleString(localization.language)} ${
|
179
181
|
localization.of
|
180
|
-
} ${totalRowCount.toLocaleString()}`}</Typography>
|
182
|
+
} ${totalRowCount.toLocaleString(localization.language)}`}</Typography>
|
181
183
|
<Box gap="xs">
|
182
184
|
{showFirstButton && (
|
183
185
|
<Tooltip {...tooltipProps} title={localization.goToFirstPage}>
|
@@ -65,8 +65,8 @@ export const MRT_ToolbarAlertBanner = <TData extends MRT_RowData>({
|
|
65
65
|
selectedRowCount > 0 ? (
|
66
66
|
<Stack alignItems="center" direction="row" gap="16px">
|
67
67
|
{localization.selectedCountOfRowCountRowsSelected
|
68
|
-
?.replace('{selectedCount}', selectedRowCount.toLocaleString())
|
69
|
-
?.replace('{rowCount}', totalRowCount.
|
68
|
+
?.replace('{selectedCount}', selectedRowCount.toLocaleString(localization.language))
|
69
|
+
?.replace('{rowCount}', totalRowCount.toLocaleString(localization.language))}
|
70
70
|
<Button
|
71
71
|
onClick={(event) =>
|
72
72
|
getMRT_SelectAllHandler({ table })(event, false, true)
|
@@ -73,7 +73,7 @@ export const useMRT_Effects = <TData extends MRT_RowData>(
|
|
73
73
|
if (firstVisibleRowIndex >= totalRowCount) {
|
74
74
|
table.setPageIndex(Math.ceil(totalRowCount / pageSize) - 1);
|
75
75
|
}
|
76
|
-
}, [totalRowCount]);
|
76
|
+
}, [totalRowCount, enablePagination, isLoading, showSkeletons]);
|
77
77
|
|
78
78
|
//turn off sort when global filter is looking for ranked results
|
79
79
|
const appliedSort = useRef<MRT_SortingState>(sorting);
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { useCallback } from 'react';
|
1
|
+
import { useCallback, useMemo } from 'react';
|
2
2
|
import { type Range, useVirtualizer } from '@tanstack/react-virtual';
|
3
3
|
import {
|
4
4
|
type MRT_Row,
|
@@ -36,7 +36,19 @@ export const useMRT_RowVirtualizer = <
|
|
36
36
|
table,
|
37
37
|
});
|
38
38
|
|
39
|
-
const
|
39
|
+
const realRows = rows ?? getRowModel().rows;
|
40
|
+
/**
|
41
|
+
* when filtering, should find the correct index in filtered rows
|
42
|
+
*/
|
43
|
+
const draggingRowIndex = useMemo(
|
44
|
+
() =>
|
45
|
+
draggingRow?.id
|
46
|
+
? realRows.findIndex((r) => r.id === draggingRow?.id)
|
47
|
+
: undefined,
|
48
|
+
[realRows, draggingRow?.id],
|
49
|
+
);
|
50
|
+
|
51
|
+
const rowCount = realRows.length;
|
40
52
|
|
41
53
|
const normalRowHeight =
|
42
54
|
density === 'compact' ? 37 : density === 'comfortable' ? 58 : 73;
|
@@ -58,9 +70,9 @@ export const useMRT_RowVirtualizer = <
|
|
58
70
|
overscan: 4,
|
59
71
|
rangeExtractor: useCallback(
|
60
72
|
(range: Range) => {
|
61
|
-
return extraIndexRangeExtractor(range,
|
73
|
+
return extraIndexRangeExtractor(range, draggingRowIndex);
|
62
74
|
},
|
63
|
-
[
|
75
|
+
[draggingRowIndex],
|
64
76
|
),
|
65
77
|
...rowVirtualizerProps,
|
66
78
|
}) as unknown as MRT_RowVirtualizer<TScrollElement, TItemElement>;
|
package/src/locales/ar.ts
CHANGED
package/src/locales/az.ts
CHANGED
package/src/locales/bg.ts
CHANGED
package/src/locales/cs.ts
CHANGED
package/src/locales/da.ts
CHANGED
package/src/locales/de.ts
CHANGED
package/src/locales/el.ts
CHANGED
package/src/locales/en.ts
CHANGED
package/src/locales/es.ts
CHANGED
package/src/locales/et.ts
CHANGED
package/src/locales/fa.ts
CHANGED
package/src/locales/fi.ts
CHANGED
package/src/locales/fr.ts
CHANGED
package/src/locales/he.ts
CHANGED
package/src/locales/hr.ts
CHANGED
package/src/locales/hu.ts
CHANGED
package/src/locales/hy.ts
CHANGED
package/src/locales/id.ts
CHANGED
package/src/locales/it.ts
CHANGED
package/src/locales/ja.ts
CHANGED
package/src/locales/ko.ts
CHANGED
package/src/locales/nl.ts
CHANGED
package/src/locales/no.ts
CHANGED
package/src/locales/np.ts
CHANGED
package/src/locales/pl.ts
CHANGED
package/src/locales/pt-BR.ts
CHANGED
package/src/locales/pt.ts
CHANGED
package/src/locales/ro.ts
CHANGED
package/src/locales/ru.ts
CHANGED
package/src/locales/sk.ts
CHANGED
package/src/locales/sv.ts
CHANGED
package/src/locales/tr.ts
CHANGED
package/src/locales/uk.ts
CHANGED
package/src/locales/vi.ts
CHANGED
package/src/locales/zh-Hans.ts
CHANGED
package/src/locales/zh-Hant.ts
CHANGED
package/src/types.ts
CHANGED
@@ -150,6 +150,8 @@ export type MRT_ColumnHelper<TData extends MRT_RowData> = {
|
|
150
150
|
};
|
151
151
|
|
152
152
|
export interface MRT_Localization {
|
153
|
+
// language of the localization as BCP 47 language tag for number formatting
|
154
|
+
language: string;
|
153
155
|
actions: string;
|
154
156
|
and: string;
|
155
157
|
cancel: string;
|
@@ -1,5 +1,10 @@
|
|
1
1
|
import { type Range, defaultRangeExtractor } from '@tanstack/react-virtual';
|
2
2
|
|
3
|
+
/**
|
4
|
+
* When scroll, the `draggingRow` or `draggingColumn` can be removed from document because of virtualization,
|
5
|
+
* then, the `dragEnd` event on `MRT_TableBodyRowGrabHandle` or `MRT_TableHeadCellGrabHandle` will not fire.
|
6
|
+
* We should keep the `draggingRow` or `draggingColumn` in `getVirtualItems()` to avoid this thing.
|
7
|
+
*/
|
3
8
|
export const extraIndexRangeExtractor = (
|
4
9
|
range: Range,
|
5
10
|
draggingIndex?: number,
|