material-react-table 1.8.0 → 1.8.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.
Files changed (43) hide show
  1. package/dist/cjs/index.js +18 -6
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/types/MaterialReactTable.d.ts +38 -23
  4. package/dist/cjs/types/body/MRT_TableBody.d.ts +4 -3
  5. package/dist/cjs/types/body/MRT_TableBodyCell.d.ts +3 -2
  6. package/dist/cjs/types/body/MRT_TableBodyRow.d.ts +5 -4
  7. package/dist/cjs/types/body/MRT_TableDetailPanel.d.ts +3 -2
  8. package/dist/cjs/types/column.utils.d.ts +21 -5
  9. package/dist/cjs/types/footer/MRT_TableFooter.d.ts +3 -2
  10. package/dist/cjs/types/footer/MRT_TableFooterRow.d.ts +3 -2
  11. package/dist/cjs/types/head/MRT_TableHead.d.ts +3 -2
  12. package/dist/cjs/types/head/MRT_TableHeadRow.d.ts +3 -2
  13. package/dist/cjs/types/sortingFns.d.ts +117 -1
  14. package/dist/esm/material-react-table.esm.js +18 -6
  15. package/dist/esm/material-react-table.esm.js.map +1 -1
  16. package/dist/esm/types/MaterialReactTable.d.ts +38 -23
  17. package/dist/esm/types/body/MRT_TableBody.d.ts +4 -3
  18. package/dist/esm/types/body/MRT_TableBodyCell.d.ts +3 -2
  19. package/dist/esm/types/body/MRT_TableBodyRow.d.ts +5 -4
  20. package/dist/esm/types/body/MRT_TableDetailPanel.d.ts +3 -2
  21. package/dist/esm/types/column.utils.d.ts +21 -5
  22. package/dist/esm/types/footer/MRT_TableFooter.d.ts +3 -2
  23. package/dist/esm/types/footer/MRT_TableFooterRow.d.ts +3 -2
  24. package/dist/esm/types/head/MRT_TableHead.d.ts +3 -2
  25. package/dist/esm/types/head/MRT_TableHeadRow.d.ts +3 -2
  26. package/dist/esm/types/sortingFns.d.ts +117 -1
  27. package/dist/index.d.ts +39 -24
  28. package/package.json +15 -15
  29. package/src/MaterialReactTable.tsx +655 -624
  30. package/src/body/MRT_TableBody.tsx +10 -11
  31. package/src/body/MRT_TableBodyCell.tsx +3 -2
  32. package/src/body/MRT_TableBodyRow.tsx +7 -14
  33. package/src/body/MRT_TableDetailPanel.tsx +3 -2
  34. package/src/buttons/MRT_ToggleRowActionMenuButton.tsx +1 -1
  35. package/src/column.utils.ts +6 -8
  36. package/src/footer/MRT_TableFooter.tsx +3 -2
  37. package/src/footer/MRT_TableFooterRow.tsx +3 -7
  38. package/src/head/MRT_TableHead.tsx +3 -2
  39. package/src/head/MRT_TableHeadCellSortLabel.tsx +4 -0
  40. package/src/head/MRT_TableHeadRow.tsx +3 -7
  41. package/src/menus/MRT_FilterOptionMenu.tsx +8 -3
  42. package/src/table/MRT_Table.tsx +4 -3
  43. package/src/table/MRT_TableRoot.tsx +6 -0
@@ -1,20 +1,19 @@
1
1
  import React, { memo, useMemo } from 'react';
2
- import { useVirtualizer } from '@tanstack/react-virtual';
2
+ import {
3
+ useVirtualizer,
4
+ VirtualItem,
5
+ Virtualizer,
6
+ } from '@tanstack/react-virtual';
3
7
  import TableBody from '@mui/material/TableBody';
4
8
  import Typography from '@mui/material/Typography';
5
9
  import { Memo_MRT_TableBodyRow, MRT_TableBodyRow } from './MRT_TableBodyRow';
6
10
  import { rankGlobalFuzzy } from '../sortingFns';
7
- import type {
8
- MRT_Row,
9
- MRT_TableInstance,
10
- MRT_VirtualItem,
11
- MRT_Virtualizer,
12
- } from '..';
11
+ import type { MRT_Row, MRT_TableInstance } from '..';
13
12
 
14
13
  interface Props {
15
- columnVirtualizer?: MRT_Virtualizer<HTMLDivElement, HTMLTableCellElement>;
14
+ columnVirtualizer?: Virtualizer<HTMLDivElement, HTMLTableCellElement>;
16
15
  table: MRT_TableInstance;
17
- virtualColumns?: MRT_VirtualItem[];
16
+ virtualColumns?: VirtualItem[];
18
17
  virtualPaddingLeft?: number;
19
18
  virtualPaddingRight?: number;
20
19
  }
@@ -117,7 +116,7 @@ export const MRT_TableBody = ({
117
116
  ]);
118
117
 
119
118
  const rowVirtualizer:
120
- | MRT_Virtualizer<HTMLDivElement, HTMLTableRowElement>
119
+ | Virtualizer<HTMLDivElement, HTMLTableRowElement>
121
120
  | undefined = enableRowVirtualization
122
121
  ? useVirtualizer({
123
122
  count: rows.length,
@@ -202,7 +201,7 @@ export const MRT_TableBody = ({
202
201
  virtualPaddingLeft,
203
202
  virtualPaddingRight,
204
203
  virtualRow: rowVirtualizer
205
- ? (rowOrVirtualRow as MRT_VirtualItem)
204
+ ? (rowOrVirtualRow as VirtualItem)
206
205
  : undefined,
207
206
  };
208
207
  return memoMode === 'rows' ? (
@@ -19,7 +19,8 @@ import {
19
19
  getIsFirstColumn,
20
20
  getIsLastColumn,
21
21
  } from '../column.utils';
22
- import type { MRT_Cell, MRT_TableInstance, MRT_VirtualItem } from '..';
22
+ import type { VirtualItem } from '@tanstack/react-virtual';
23
+ import type { MRT_Cell, MRT_TableInstance } from '..';
23
24
 
24
25
  interface Props {
25
26
  cell: MRT_Cell;
@@ -29,7 +30,7 @@ interface Props {
29
30
  rowIndex: number;
30
31
  rowRef: RefObject<HTMLTableRowElement>;
31
32
  table: MRT_TableInstance;
32
- virtualCell?: MRT_VirtualItem;
33
+ virtualCell?: VirtualItem;
33
34
  }
34
35
 
35
36
  export const MRT_TableBodyCell = ({
@@ -3,25 +3,20 @@ import TableRow from '@mui/material/TableRow';
3
3
  import { darken, lighten } from '@mui/material/styles';
4
4
  import { Memo_MRT_TableBodyCell, MRT_TableBodyCell } from './MRT_TableBodyCell';
5
5
  import { MRT_TableDetailPanel } from './MRT_TableDetailPanel';
6
- import type {
7
- MRT_Cell,
8
- MRT_Row,
9
- MRT_TableInstance,
10
- MRT_VirtualItem,
11
- MRT_Virtualizer,
12
- } from '..';
6
+ import type { VirtualItem, Virtualizer } from '@tanstack/react-virtual';
7
+ import type { MRT_Cell, MRT_Row, MRT_TableInstance } from '..';
13
8
 
14
9
  interface Props {
15
- columnVirtualizer?: MRT_Virtualizer<HTMLDivElement, HTMLTableCellElement>;
10
+ columnVirtualizer?: Virtualizer<HTMLDivElement, HTMLTableCellElement>;
16
11
  measureElement?: (element: HTMLTableRowElement) => void;
17
12
  numRows: number;
18
13
  row: MRT_Row;
19
14
  rowIndex: number;
20
15
  table: MRT_TableInstance;
21
- virtualColumns?: MRT_VirtualItem[];
16
+ virtualColumns?: VirtualItem[];
22
17
  virtualPaddingLeft?: number;
23
18
  virtualPaddingRight?: number;
24
- virtualRow?: MRT_VirtualItem;
19
+ virtualRow?: VirtualItem;
25
20
  }
26
21
 
27
22
  export const MRT_TableBodyRow = ({
@@ -108,9 +103,7 @@ export const MRT_TableBodyRow = ({
108
103
  ) : null}
109
104
  {(virtualColumns ?? row.getVisibleCells()).map((cellOrVirtualCell) => {
110
105
  const cell = columnVirtualizer
111
- ? row.getVisibleCells()[
112
- (cellOrVirtualCell as MRT_VirtualItem).index
113
- ]
106
+ ? row.getVisibleCells()[(cellOrVirtualCell as VirtualItem).index]
114
107
  : (cellOrVirtualCell as MRT_Cell);
115
108
  const props = {
116
109
  cell,
@@ -122,7 +115,7 @@ export const MRT_TableBodyRow = ({
122
115
  rowRef,
123
116
  table,
124
117
  virtualCell: columnVirtualizer
125
- ? (cellOrVirtualCell as MRT_VirtualItem)
118
+ ? (cellOrVirtualCell as VirtualItem)
126
119
  : undefined,
127
120
  };
128
121
  return memoMode === 'cells' &&
@@ -3,13 +3,14 @@ import Collapse from '@mui/material/Collapse';
3
3
  import TableCell from '@mui/material/TableCell';
4
4
  import TableRow from '@mui/material/TableRow';
5
5
  import { lighten } from '@mui/material/styles';
6
- import type { MRT_Row, MRT_TableInstance, MRT_VirtualItem } from '..';
6
+ import type { VirtualItem } from '@tanstack/react-virtual';
7
+ import type { MRT_Row, MRT_TableInstance } from '..';
7
8
 
8
9
  interface Props {
9
10
  parentRowRef: React.RefObject<HTMLTableRowElement>;
10
11
  row: MRT_Row;
11
12
  table: MRT_TableInstance;
12
- virtualRow?: MRT_VirtualItem;
13
+ virtualRow?: VirtualItem;
13
14
  }
14
15
 
15
16
  export const MRT_TableDetailPanel = ({
@@ -61,7 +61,7 @@ export const MRT_ToggleRowActionMenuButton = <
61
61
  return (
62
62
  <>
63
63
  {renderRowActions ? (
64
- <>{renderRowActions({ cell, row, table })}</>
64
+ renderRowActions({ cell, row, table })
65
65
  ) : row.id === editingRow?.id && editingMode === 'row' ? (
66
66
  <MRT_EditActionButtons row={row} table={table} />
67
67
  ) : !renderRowActionMenuItems &&
@@ -1,8 +1,4 @@
1
- import type {
2
- ColumnOrderState,
3
- GroupingState,
4
- Row,
5
- } from '@tanstack/react-table';
1
+ import type { Row } from '@tanstack/react-table';
6
2
  import { MRT_AggregationFns } from './aggregationFns';
7
3
  import { MRT_FilterFns } from './filterFns';
8
4
  import { MRT_SortingFns } from './sortingFns';
@@ -13,9 +9,11 @@ import type {
13
9
  MaterialReactTableProps,
14
10
  MRT_Column,
15
11
  MRT_ColumnDef,
12
+ MRT_ColumnOrderState,
16
13
  MRT_DefinedColumnDef,
17
14
  MRT_DisplayColumnIds,
18
15
  MRT_FilterOption,
16
+ MRT_GroupingState,
19
17
  MRT_Header,
20
18
  MRT_TableInstance,
21
19
  } from '.';
@@ -120,8 +118,8 @@ export const prepareColumns = <TData extends Record<string, any> = {}>({
120
118
  export const reorderColumn = <TData extends Record<string, any> = {}>(
121
119
  draggedColumn: MRT_Column<TData>,
122
120
  targetColumn: MRT_Column<TData>,
123
- columnOrder: ColumnOrderState,
124
- ): ColumnOrderState => {
121
+ columnOrder: MRT_ColumnOrderState,
122
+ ): MRT_ColumnOrderState => {
125
123
  if (draggedColumn.getCanPin()) {
126
124
  draggedColumn.pin(targetColumn.getIsPinned());
127
125
  }
@@ -135,7 +133,7 @@ export const reorderColumn = <TData extends Record<string, any> = {}>(
135
133
 
136
134
  export const showExpandColumn = <TData extends Record<string, any> = {}>(
137
135
  props: MaterialReactTableProps<TData>,
138
- grouping?: GroupingState,
136
+ grouping?: MRT_GroupingState,
139
137
  ) =>
140
138
  !!(
141
139
  props.enableExpanding ||
@@ -1,11 +1,12 @@
1
1
  import React from 'react';
2
2
  import TableFooter from '@mui/material/TableFooter';
3
3
  import { MRT_TableFooterRow } from './MRT_TableFooterRow';
4
- import type { MRT_TableInstance, MRT_VirtualItem } from '..';
4
+ import type { VirtualItem } from '@tanstack/react-virtual';
5
+ import type { MRT_TableInstance } from '..';
5
6
 
6
7
  interface Props {
7
8
  table: MRT_TableInstance;
8
- virtualColumns?: MRT_VirtualItem[];
9
+ virtualColumns?: VirtualItem[];
9
10
  virtualPaddingLeft?: number;
10
11
  virtualPaddingRight?: number;
11
12
  }
@@ -2,17 +2,13 @@ import React from 'react';
2
2
  import TableRow from '@mui/material/TableRow';
3
3
  import { lighten } from '@mui/material/styles';
4
4
  import { MRT_TableFooterCell } from './MRT_TableFooterCell';
5
- import type {
6
- MRT_Header,
7
- MRT_HeaderGroup,
8
- MRT_TableInstance,
9
- MRT_VirtualItem,
10
- } from '..';
5
+ import { VirtualItem } from '@tanstack/react-virtual';
6
+ import type { MRT_Header, MRT_HeaderGroup, MRT_TableInstance } from '..';
11
7
 
12
8
  interface Props {
13
9
  footerGroup: MRT_HeaderGroup;
14
10
  table: MRT_TableInstance;
15
- virtualColumns?: MRT_VirtualItem[];
11
+ virtualColumns?: VirtualItem[];
16
12
  virtualPaddingLeft?: number;
17
13
  virtualPaddingRight?: number;
18
14
  }
@@ -1,11 +1,12 @@
1
1
  import React from 'react';
2
2
  import TableHead from '@mui/material/TableHead';
3
3
  import { MRT_TableHeadRow } from './MRT_TableHeadRow';
4
- import type { MRT_TableInstance, MRT_VirtualItem } from '..';
4
+ import type { VirtualItem } from '@tanstack/react-virtual';
5
+ import type { MRT_TableInstance } from '..';
5
6
 
6
7
  interface Props {
7
8
  table: MRT_TableInstance;
8
- virtualColumns?: MRT_VirtualItem[];
9
+ virtualColumns?: VirtualItem[];
9
10
  virtualPaddingLeft?: number;
10
11
  virtualPaddingRight?: number;
11
12
  }
@@ -49,6 +49,10 @@ export const MRT_TableHeadCellSortLabel = ({
49
49
  : undefined,
50
50
  }}
51
51
  IconComponent={ArrowDownwardIcon}
52
+ onClick={(e) => {
53
+ e.stopPropagation();
54
+ header.column.getToggleSortingHandler()?.(e);
55
+ }}
52
56
  />
53
57
  </Tooltip>
54
58
  );
@@ -2,17 +2,13 @@ import React from 'react';
2
2
  import TableRow from '@mui/material/TableRow';
3
3
  import { alpha, lighten } from '@mui/material/styles';
4
4
  import { MRT_TableHeadCell } from './MRT_TableHeadCell';
5
- import type {
6
- MRT_Header,
7
- MRT_HeaderGroup,
8
- MRT_TableInstance,
9
- MRT_VirtualItem,
10
- } from '..';
5
+ import type { VirtualItem } from '@tanstack/react-virtual';
6
+ import type { MRT_Header, MRT_HeaderGroup, MRT_TableInstance } from '..';
11
7
 
12
8
  interface Props {
13
9
  headerGroup: MRT_HeaderGroup;
14
10
  table: MRT_TableInstance;
15
- virtualColumns?: MRT_VirtualItem[];
11
+ virtualColumns?: VirtualItem[];
16
12
  virtualPaddingLeft?: number;
17
13
  virtualPaddingRight?: number;
18
14
  }
@@ -165,7 +165,10 @@ export const MRT_FilterOptionMenu = <TData extends Record<string, any> = {}>({
165
165
  option as string,
166
166
  )
167
167
  ) {
168
- if ((currentFilterValue as Array<any>)?.length) {
168
+ if (
169
+ currentFilterValue instanceof String ||
170
+ (currentFilterValue as Array<any>)?.length
171
+ ) {
169
172
  column.setFilterValue([]);
170
173
  setFilterValue?.([]);
171
174
  }
@@ -175,8 +178,10 @@ export const MRT_FilterOptionMenu = <TData extends Record<string, any> = {}>({
175
178
  option as MRT_FilterOption,
176
179
  )
177
180
  ) {
178
- column.setFilterValue(['', '']);
179
- setFilterValue?.('');
181
+ if (!(currentFilterValue as Array<any>)?.every((v) => v === '')) {
182
+ column.setFilterValue(['', '']);
183
+ setFilterValue?.('');
184
+ }
180
185
  } else {
181
186
  if (
182
187
  !['', undefined].includes(currentFilterValue as string | undefined)
@@ -3,13 +3,14 @@ import {
3
3
  defaultRangeExtractor,
4
4
  Range,
5
5
  useVirtualizer,
6
+ Virtualizer,
6
7
  } from '@tanstack/react-virtual';
7
8
  import Table from '@mui/material/Table';
8
9
  import { MRT_TableHead } from '../head/MRT_TableHead';
9
10
  import { Memo_MRT_TableBody, MRT_TableBody } from '../body/MRT_TableBody';
10
11
  import { MRT_TableFooter } from '../footer/MRT_TableFooter';
11
12
  import { parseCSSVarId } from '../column.utils';
12
- import type { MRT_TableInstance, MRT_Virtualizer } from '..';
13
+ import type { MRT_TableInstance } from '..';
13
14
 
14
15
  interface Props {
15
16
  table: MRT_TableInstance;
@@ -63,7 +64,7 @@ export const MRT_Table = ({ table }: Props) => {
63
64
  colSizes[`--col-${parseCSSVarId(header.column.id)}-size`] = colSize;
64
65
  }
65
66
  return colSizes;
66
- }, [columns, columnSizing, columnSizingInfo]);
67
+ }, [columns, columnSizing, columnSizingInfo, columnVisibility]);
67
68
 
68
69
  //get first 16 column widths and average them
69
70
  const averageColumnWidth = useMemo(() => {
@@ -94,7 +95,7 @@ export const MRT_Table = ({ table }: Props) => {
94
95
  );
95
96
 
96
97
  const columnVirtualizer:
97
- | MRT_Virtualizer<HTMLDivElement, HTMLTableCellElement>
98
+ | Virtualizer<HTMLDivElement, HTMLTableCellElement>
98
99
  | undefined = enableColumnVirtualization
99
100
  ? useVirtualizer({
100
101
  count: table.getVisibleLeafColumns().length,
@@ -332,6 +332,12 @@ export const MRT_TableRoot: any = <TData extends Record<string, any> = {}>(
332
332
  props.onShowToolbarDropZoneChange ?? setShowToolbarDropZone,
333
333
  } as MRT_TableInstance<TData>;
334
334
 
335
+ if (props.tableFeatures) {
336
+ props.tableFeatures.forEach((feature) => {
337
+ Object.assign(table, feature(table));
338
+ });
339
+ }
340
+
335
341
  if (props.tableInstanceRef) {
336
342
  props.tableInstanceRef.current = table;
337
343
  }