material-react-table 1.9.2 → 1.9.3
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/README.md +1 -1
- package/dist/cjs/index.js +28 -11
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/MaterialReactTable.d.ts +2 -2
- package/dist/esm/material-react-table.esm.js +28 -11
- package/dist/esm/material-react-table.esm.js.map +1 -1
- package/dist/esm/types/MaterialReactTable.d.ts +2 -2
- package/dist/index.d.ts +2 -2
- package/package.json +2 -2
- package/src/MaterialReactTable.tsx +2 -2
- package/src/buttons/MRT_ToggleFiltersButton.tsx +2 -2
- package/src/head/MRT_TableHeadCellFilterLabel.tsx +2 -2
- package/src/inputs/MRT_GlobalFilterTextField.tsx +9 -2
- package/src/menus/MRT_ColumnActionMenu.tsx +2 -2
- package/src/table/MRT_TableRoot.tsx +14 -2
- package/src/toolbar/MRT_TablePagination.tsx +4 -1
@@ -179,7 +179,7 @@ export type MRT_TableInstance<TData extends Record<string, any> = {}> = Prettify
|
|
179
179
|
} | null>>;
|
180
180
|
setIsFullScreen: Dispatch<SetStateAction<boolean>>;
|
181
181
|
setShowAlertBanner: Dispatch<SetStateAction<boolean>>;
|
182
|
-
|
182
|
+
setShowColumnFilters: Dispatch<SetStateAction<boolean>>;
|
183
183
|
setShowGlobalFilter: Dispatch<SetStateAction<boolean>>;
|
184
184
|
setShowToolbarDropZone: Dispatch<SetStateAction<boolean>>;
|
185
185
|
}>;
|
@@ -656,7 +656,7 @@ export type MaterialReactTableProps<TData extends Record<string, any> = {}> = Pr
|
|
656
656
|
onHoveredRowChange?: OnChangeFn<MRT_Row<TData> | null>;
|
657
657
|
onIsFullScreenChange?: OnChangeFn<boolean>;
|
658
658
|
onShowAlertBannerChange?: OnChangeFn<boolean>;
|
659
|
-
|
659
|
+
onShowColumnFiltersChange?: OnChangeFn<boolean>;
|
660
660
|
onShowGlobalFilterChange?: OnChangeFn<boolean>;
|
661
661
|
onShowToolbarDropZoneChange?: OnChangeFn<boolean>;
|
662
662
|
positionActionsColumn?: 'first' | 'last';
|
package/dist/index.d.ts
CHANGED
@@ -300,7 +300,7 @@ type MRT_TableInstance<TData extends Record<string, any> = {}> = Prettify<Omit<T
|
|
300
300
|
} | null>>;
|
301
301
|
setIsFullScreen: Dispatch<SetStateAction<boolean>>;
|
302
302
|
setShowAlertBanner: Dispatch<SetStateAction<boolean>>;
|
303
|
-
|
303
|
+
setShowColumnFilters: Dispatch<SetStateAction<boolean>>;
|
304
304
|
setShowGlobalFilter: Dispatch<SetStateAction<boolean>>;
|
305
305
|
setShowToolbarDropZone: Dispatch<SetStateAction<boolean>>;
|
306
306
|
}>;
|
@@ -777,7 +777,7 @@ type MaterialReactTableProps<TData extends Record<string, any> = {}> = Prettify<
|
|
777
777
|
onHoveredRowChange?: OnChangeFn<MRT_Row<TData> | null>;
|
778
778
|
onIsFullScreenChange?: OnChangeFn<boolean>;
|
779
779
|
onShowAlertBannerChange?: OnChangeFn<boolean>;
|
780
|
-
|
780
|
+
onShowColumnFiltersChange?: OnChangeFn<boolean>;
|
781
781
|
onShowGlobalFilterChange?: OnChangeFn<boolean>;
|
782
782
|
onShowToolbarDropZoneChange?: OnChangeFn<boolean>;
|
783
783
|
positionActionsColumn?: 'first' | 'last';
|
package/package.json
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
{
|
2
|
-
"version": "1.9.
|
2
|
+
"version": "1.9.3",
|
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.",
|
@@ -90,7 +90,7 @@
|
|
90
90
|
},
|
91
91
|
"dependencies": {
|
92
92
|
"@tanstack/match-sorter-utils": "8.8.4",
|
93
|
-
"@tanstack/react-table": "8.8.
|
93
|
+
"@tanstack/react-table": "8.8.5",
|
94
94
|
"@tanstack/react-virtual": "3.0.0-beta.54",
|
95
95
|
"highlight-words": "1.2.1"
|
96
96
|
}
|
@@ -262,7 +262,7 @@ export type MRT_TableInstance<TData extends Record<string, any> = {}> =
|
|
262
262
|
>;
|
263
263
|
setIsFullScreen: Dispatch<SetStateAction<boolean>>;
|
264
264
|
setShowAlertBanner: Dispatch<SetStateAction<boolean>>;
|
265
|
-
|
265
|
+
setShowColumnFilters: Dispatch<SetStateAction<boolean>>;
|
266
266
|
setShowGlobalFilter: Dispatch<SetStateAction<boolean>>;
|
267
267
|
setShowToolbarDropZone: Dispatch<SetStateAction<boolean>>;
|
268
268
|
}
|
@@ -883,7 +883,7 @@ export type MaterialReactTableProps<TData extends Record<string, any> = {}> =
|
|
883
883
|
onHoveredRowChange?: OnChangeFn<MRT_Row<TData> | null>;
|
884
884
|
onIsFullScreenChange?: OnChangeFn<boolean>;
|
885
885
|
onShowAlertBannerChange?: OnChangeFn<boolean>;
|
886
|
-
|
886
|
+
onShowColumnFiltersChange?: OnChangeFn<boolean>;
|
887
887
|
onShowGlobalFilterChange?: OnChangeFn<boolean>;
|
888
888
|
onShowToolbarDropZoneChange?: OnChangeFn<boolean>;
|
889
889
|
positionActionsColumn?: 'first' | 'last';
|
@@ -21,12 +21,12 @@ export const MRT_ToggleFiltersButton = <
|
|
21
21
|
icons: { FilterListIcon, FilterListOffIcon },
|
22
22
|
localization,
|
23
23
|
},
|
24
|
-
|
24
|
+
setShowColumnFilters,
|
25
25
|
} = table;
|
26
26
|
const { showColumnFilters } = getState();
|
27
27
|
|
28
28
|
const handleToggleShowFilters = () => {
|
29
|
-
|
29
|
+
setShowColumnFilters(!showColumnFilters);
|
30
30
|
};
|
31
31
|
|
32
32
|
return (
|
@@ -17,7 +17,7 @@ export const MRT_TableHeadCellFilterLabel = ({ header, table }: Props) => {
|
|
17
17
|
localization,
|
18
18
|
},
|
19
19
|
refs: { filterInputRefs },
|
20
|
-
|
20
|
+
setShowColumnFilters,
|
21
21
|
} = table;
|
22
22
|
const { column } = header;
|
23
23
|
const { columnDef } = column;
|
@@ -66,7 +66,7 @@ export const MRT_TableHeadCellFilterLabel = ({ header, table }: Props) => {
|
|
66
66
|
<IconButton
|
67
67
|
disableRipple
|
68
68
|
onClick={(event: MouseEvent<HTMLButtonElement>) => {
|
69
|
-
|
69
|
+
setShowColumnFilters(true);
|
70
70
|
queueMicrotask(() => {
|
71
71
|
filterInputRefs.current[`${column.id}-0`]?.focus();
|
72
72
|
filterInputRefs.current[`${column.id}-0`]?.select();
|
@@ -3,6 +3,7 @@ import React, {
|
|
3
3
|
MouseEvent,
|
4
4
|
useCallback,
|
5
5
|
useEffect,
|
6
|
+
useRef,
|
6
7
|
useState,
|
7
8
|
} from 'react';
|
8
9
|
import Collapse from '@mui/material/Collapse';
|
@@ -42,6 +43,7 @@ export const MRT_GlobalFilterTextField = <
|
|
42
43
|
? muiSearchTextFieldProps({ table })
|
43
44
|
: muiSearchTextFieldProps;
|
44
45
|
|
46
|
+
const isMounted = useRef(false);
|
45
47
|
const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);
|
46
48
|
const [searchValue, setSearchValue] = useState(globalFilter ?? '');
|
47
49
|
|
@@ -70,9 +72,14 @@ export const MRT_GlobalFilterTextField = <
|
|
70
72
|
};
|
71
73
|
|
72
74
|
useEffect(() => {
|
73
|
-
if (
|
74
|
-
|
75
|
+
if (isMounted.current) {
|
76
|
+
if (globalFilter === undefined) {
|
77
|
+
handleClear();
|
78
|
+
} else {
|
79
|
+
setSearchValue(globalFilter);
|
80
|
+
}
|
75
81
|
}
|
82
|
+
isMounted.current = true;
|
76
83
|
}, [globalFilter]);
|
77
84
|
|
78
85
|
return (
|
@@ -63,7 +63,7 @@ export const MRT_ColumnActionMenu = ({
|
|
63
63
|
},
|
64
64
|
refs: { filterInputRefs },
|
65
65
|
setColumnSizingInfo,
|
66
|
-
|
66
|
+
setShowColumnFilters,
|
67
67
|
} = table;
|
68
68
|
const { column } = header;
|
69
69
|
const { columnDef } = column;
|
@@ -117,7 +117,7 @@ export const MRT_ColumnActionMenu = ({
|
|
117
117
|
};
|
118
118
|
|
119
119
|
const handleFilterByColumn = () => {
|
120
|
-
|
120
|
+
setShowColumnFilters(true);
|
121
121
|
queueMicrotask(() => filterInputRefs.current[`${column.id}-0`]?.focus());
|
122
122
|
setAnchorEl(null);
|
123
123
|
};
|
@@ -113,7 +113,7 @@ export const MRT_TableRoot: any = <TData extends Record<string, any> = {}>(
|
|
113
113
|
const [showAlertBanner, setShowAlertBanner] = useState<boolean>(
|
114
114
|
props.initialState?.showAlertBanner ?? false,
|
115
115
|
);
|
116
|
-
const [showColumnFilters,
|
116
|
+
const [showColumnFilters, setShowColumnFilters] = useState<boolean>(
|
117
117
|
initialState?.showColumnFilters ?? false,
|
118
118
|
);
|
119
119
|
const [showGlobalFilter, setShowGlobalFilter] = useState<boolean>(
|
@@ -326,7 +326,8 @@ export const MRT_TableRoot: any = <TData extends Record<string, any> = {}>(
|
|
326
326
|
setHoveredRow: props.onHoveredRowChange ?? setHoveredRow,
|
327
327
|
setIsFullScreen: props.onIsFullScreenChange ?? setIsFullScreen,
|
328
328
|
setShowAlertBanner: props.onShowAlertBannerChange ?? setShowAlertBanner,
|
329
|
-
|
329
|
+
setShowColumnFilters:
|
330
|
+
props.onShowColumnFiltersChange ?? setShowColumnFilters,
|
330
331
|
setShowGlobalFilter: props.onShowGlobalFilterChange ?? setShowGlobalFilter,
|
331
332
|
setShowToolbarDropZone:
|
332
333
|
props.onShowToolbarDropZoneChange ?? setShowToolbarDropZone,
|
@@ -360,6 +361,17 @@ export const MRT_TableRoot: any = <TData extends Record<string, any> = {}>(
|
|
360
361
|
}
|
361
362
|
}, [table.getState().isFullScreen]);
|
362
363
|
|
364
|
+
//if page index is out of bounds, set it to the last page
|
365
|
+
useEffect(() => {
|
366
|
+
const { pageIndex, pageSize } = table.getState().pagination;
|
367
|
+
const totalRowCount =
|
368
|
+
props.rowCount ?? table.getPrePaginationRowModel().rows.length;
|
369
|
+
const firstVisibleRowIndex = pageIndex * pageSize;
|
370
|
+
if (firstVisibleRowIndex > totalRowCount) {
|
371
|
+
table.setPageIndex(Math.floor(totalRowCount / pageSize));
|
372
|
+
}
|
373
|
+
}, [props.rowCount, table.getPrePaginationRowModel().rows.length]);
|
374
|
+
|
363
375
|
return (
|
364
376
|
<>
|
365
377
|
<Dialog
|
@@ -59,7 +59,10 @@ export const MRT_TablePagination = <TData extends Record<string, any> = {}>({
|
|
59
59
|
labelRowsPerPage={localization.rowsPerPage}
|
60
60
|
onPageChange={(_: any, newPage: number) => setPageIndex(newPage)}
|
61
61
|
onRowsPerPageChange={handleChangeRowsPerPage}
|
62
|
-
page={
|
62
|
+
page={Math.max(
|
63
|
+
Math.min(pageIndex, Math.ceil(totalRowCount / pageSize) - 1),
|
64
|
+
0,
|
65
|
+
)}
|
63
66
|
rowsPerPage={pageSize}
|
64
67
|
rowsPerPageOptions={[5, 10, 15, 20, 25, 30, 50, 100]}
|
65
68
|
showFirstButton={showFirstLastPageButtons}
|