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.
@@ -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
- setShowFilters: Dispatch<SetStateAction<boolean>>;
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
- onShowFiltersChange?: OnChangeFn<boolean>;
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
- setShowFilters: Dispatch<SetStateAction<boolean>>;
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
- onShowFiltersChange?: OnChangeFn<boolean>;
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",
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.4",
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
- setShowFilters: Dispatch<SetStateAction<boolean>>;
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
- onShowFiltersChange?: OnChangeFn<boolean>;
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
- setShowFilters,
24
+ setShowColumnFilters,
25
25
  } = table;
26
26
  const { showColumnFilters } = getState();
27
27
 
28
28
  const handleToggleShowFilters = () => {
29
- setShowFilters(!showColumnFilters);
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
- setShowFilters,
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
- setShowFilters(true);
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 (globalFilter === undefined) {
74
- handleClear();
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
- setShowFilters,
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
- setShowFilters(true);
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, setShowFilters] = useState<boolean>(
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
- setShowFilters: props.onShowFiltersChange ?? setShowFilters,
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={pageIndex}
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}