material-react-table 0.17.1 → 0.19.0-alpha.1

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 (110) hide show
  1. package/dist/MaterialReactTable.d.ts +170 -230
  2. package/dist/body/MRT_TableBody.d.ts +1 -1
  3. package/dist/body/MRT_TableBodyCell.d.ts +1 -1
  4. package/dist/body/MRT_TableBodyRow.d.ts +1 -1
  5. package/dist/body/MRT_TableDetailPanel.d.ts +1 -1
  6. package/dist/buttons/MRT_ColumnPinningButtons.d.ts +1 -1
  7. package/dist/buttons/MRT_CopyButton.d.ts +1 -1
  8. package/dist/buttons/MRT_EditActionButtons.d.ts +1 -1
  9. package/dist/buttons/MRT_ExpandAllButton.d.ts +1 -1
  10. package/dist/buttons/MRT_ExpandButton.d.ts +1 -1
  11. package/dist/buttons/MRT_FullScreenToggleButton.d.ts +1 -1
  12. package/dist/buttons/MRT_GrabHandleButton.d.ts +1 -1
  13. package/dist/buttons/MRT_ShowHideColumnsButton.d.ts +1 -1
  14. package/dist/buttons/MRT_ToggleDensePaddingButton.d.ts +1 -1
  15. package/dist/buttons/MRT_ToggleFiltersButton.d.ts +1 -1
  16. package/dist/buttons/MRT_ToggleGlobalFilterButton.d.ts +1 -1
  17. package/dist/buttons/MRT_ToggleRowActionMenuButton.d.ts +1 -1
  18. package/dist/filtersFns.d.ts +31 -23
  19. package/dist/footer/MRT_TableFooter.d.ts +1 -1
  20. package/dist/footer/MRT_TableFooterCell.d.ts +1 -1
  21. package/dist/footer/MRT_TableFooterRow.d.ts +1 -1
  22. package/dist/head/MRT_DraggableTableHeadCell.d.ts +1 -1
  23. package/dist/head/MRT_TableHead.d.ts +1 -1
  24. package/dist/head/MRT_TableHeadCell.d.ts +1 -1
  25. package/dist/head/MRT_TableHeadCellColumnActionsButton.d.ts +1 -1
  26. package/dist/head/MRT_TableHeadCellFilterContainer.d.ts +1 -1
  27. package/dist/head/MRT_TableHeadCellFilterLabel.d.ts +1 -1
  28. package/dist/head/MRT_TableHeadCellResizeHandle.d.ts +1 -1
  29. package/dist/head/MRT_TableHeadCellSortLabel.d.ts +1 -1
  30. package/dist/head/MRT_TableHeadRow.d.ts +1 -1
  31. package/dist/inputs/MRT_EditCellTextField.d.ts +1 -1
  32. package/dist/inputs/MRT_FilterRangeFields.d.ts +1 -1
  33. package/dist/inputs/MRT_FilterTextField.d.ts +1 -1
  34. package/dist/inputs/MRT_GlobalFilterTextField.d.ts +1 -1
  35. package/dist/inputs/MRT_SelectCheckbox.d.ts +1 -1
  36. package/dist/material-react-table.cjs.development.js +791 -915
  37. package/dist/material-react-table.cjs.development.js.map +1 -1
  38. package/dist/material-react-table.cjs.production.min.js +1 -1
  39. package/dist/material-react-table.cjs.production.min.js.map +1 -1
  40. package/dist/material-react-table.esm.js +793 -917
  41. package/dist/material-react-table.esm.js.map +1 -1
  42. package/dist/menus/MRT_ColumnActionMenu.d.ts +1 -1
  43. package/dist/menus/MRT_FilterOptionMenu.d.ts +1 -1
  44. package/dist/menus/MRT_RowActionMenu.d.ts +1 -1
  45. package/dist/menus/MRT_ShowHideColumnsMenu.d.ts +1 -1
  46. package/dist/menus/MRT_ShowHideColumnsMenuItems.d.ts +1 -1
  47. package/dist/sortingFns.d.ts +10 -3
  48. package/dist/table/MRT_Table.d.ts +1 -1
  49. package/dist/table/MRT_TableContainer.d.ts +1 -1
  50. package/dist/table/MRT_TablePaper.d.ts +1 -1
  51. package/dist/toolbar/MRT_LinearProgressBar.d.ts +1 -1
  52. package/dist/toolbar/MRT_TablePagination.d.ts +1 -1
  53. package/dist/toolbar/MRT_ToolbarAlertBanner.d.ts +1 -1
  54. package/dist/toolbar/MRT_ToolbarBottom.d.ts +1 -1
  55. package/dist/toolbar/MRT_ToolbarInternalButtons.d.ts +1 -1
  56. package/dist/toolbar/MRT_ToolbarTop.d.ts +1 -1
  57. package/dist/utils.d.ts +10 -16
  58. package/package.json +4 -4
  59. package/src/MaterialReactTable.tsx +168 -334
  60. package/src/body/MRT_TableBody.tsx +5 -6
  61. package/src/body/MRT_TableBodyCell.tsx +19 -36
  62. package/src/body/MRT_TableBodyRow.tsx +9 -12
  63. package/src/body/MRT_TableDetailPanel.tsx +8 -12
  64. package/src/buttons/MRT_ColumnPinningButtons.tsx +3 -3
  65. package/src/buttons/MRT_CopyButton.tsx +5 -7
  66. package/src/buttons/MRT_EditActionButtons.tsx +4 -5
  67. package/src/buttons/MRT_ExpandAllButton.tsx +4 -5
  68. package/src/buttons/MRT_ExpandButton.tsx +6 -9
  69. package/src/buttons/MRT_FullScreenToggleButton.tsx +5 -15
  70. package/src/buttons/MRT_GrabHandleButton.tsx +39 -41
  71. package/src/buttons/MRT_ShowHideColumnsButton.tsx +4 -4
  72. package/src/buttons/MRT_ToggleDensePaddingButton.tsx +5 -15
  73. package/src/buttons/MRT_ToggleFiltersButton.tsx +5 -12
  74. package/src/buttons/MRT_ToggleGlobalFilterButton.tsx +6 -16
  75. package/src/buttons/MRT_ToggleRowActionMenuButton.tsx +6 -6
  76. package/src/filtersFns.ts +24 -23
  77. package/src/footer/MRT_TableFooter.tsx +5 -6
  78. package/src/footer/MRT_TableFooterCell.tsx +8 -11
  79. package/src/footer/MRT_TableFooterRow.tsx +5 -9
  80. package/src/head/MRT_DraggableTableHeadCell.tsx +4 -6
  81. package/src/head/MRT_TableHead.tsx +5 -5
  82. package/src/head/MRT_TableHeadCell.tsx +18 -29
  83. package/src/head/MRT_TableHeadCellColumnActionsButton.tsx +6 -8
  84. package/src/head/MRT_TableHeadCellFilterContainer.tsx +5 -7
  85. package/src/head/MRT_TableHeadCellFilterLabel.tsx +13 -19
  86. package/src/head/MRT_TableHeadCellResizeHandle.tsx +12 -11
  87. package/src/head/MRT_TableHeadCellSortLabel.tsx +3 -5
  88. package/src/head/MRT_TableHeadRow.tsx +6 -6
  89. package/src/inputs/MRT_EditCellTextField.tsx +13 -15
  90. package/src/inputs/MRT_FilterRangeFields.tsx +4 -4
  91. package/src/inputs/MRT_FilterTextField.tsx +27 -64
  92. package/src/inputs/MRT_GlobalFilterTextField.tsx +5 -10
  93. package/src/inputs/MRT_SelectCheckbox.tsx +9 -36
  94. package/src/menus/MRT_ColumnActionMenu.tsx +5 -9
  95. package/src/menus/MRT_FilterOptionMenu.tsx +16 -48
  96. package/src/menus/MRT_RowActionMenu.tsx +4 -5
  97. package/src/menus/MRT_ShowHideColumnsMenu.tsx +8 -9
  98. package/src/menus/MRT_ShowHideColumnsMenuItems.tsx +11 -10
  99. package/src/sortingFns.ts +11 -3
  100. package/src/table/MRT_Table.tsx +7 -11
  101. package/src/table/MRT_TableContainer.tsx +5 -6
  102. package/src/table/MRT_TablePaper.tsx +7 -8
  103. package/src/table/MRT_TableRoot.tsx +123 -156
  104. package/src/toolbar/MRT_LinearProgressBar.tsx +4 -5
  105. package/src/toolbar/MRT_TablePagination.tsx +7 -9
  106. package/src/toolbar/MRT_ToolbarAlertBanner.tsx +15 -11
  107. package/src/toolbar/MRT_ToolbarBottom.tsx +8 -9
  108. package/src/toolbar/MRT_ToolbarInternalButtons.tsx +10 -10
  109. package/src/toolbar/MRT_ToolbarTop.tsx +11 -11
  110. package/src/utils.ts +56 -50
@@ -1,11 +1,6 @@
1
1
  import React, { useEffect, useMemo, useState } from 'react';
2
2
  import {
3
- FilterFn,
4
- ReactTableGenerics,
5
- Table,
6
3
  TableState,
7
- createTable,
8
- filterFns,
9
4
  getCoreRowModel,
10
5
  getExpandedRowModel,
11
6
  getFacetedRowModel,
@@ -13,14 +8,12 @@ import {
13
8
  getGroupedRowModel,
14
9
  getPaginationRowModel,
15
10
  getSortedRowModel,
16
- useTableInstance,
17
- sortingFns,
11
+ useReactTable,
18
12
  } from '@tanstack/react-table';
19
13
  import {
20
14
  MRT_Cell,
21
15
  MRT_ColumnDef,
22
- MRT_FilterFn,
23
- MRT_FILTER_OPTION,
16
+ MRT_FilterOption,
24
17
  MRT_Row,
25
18
  MRT_TableInstance,
26
19
  MRT_TableState,
@@ -33,14 +26,11 @@ import { MaterialReactTableProps } from '../MaterialReactTable';
33
26
  import { MRT_TablePaper } from './MRT_TablePaper';
34
27
  import { Box, Dialog, Grow } from '@mui/material';
35
28
  import {
36
- createDataColumn,
37
- createDisplayColumn,
38
- createGroup,
29
+ prepareColumns,
39
30
  getAllLeafColumnDefs,
40
31
  getDefaultColumnOrderIds,
41
32
  } from '../utils';
42
33
  import { MRT_FilterFns } from '../filtersFns';
43
- import { MRT_SortingFns } from '../sortingFns';
44
34
 
45
35
  export const MRT_TableRoot = <D extends Record<string, any> = {}>(
46
36
  props: MaterialReactTableProps<D>,
@@ -73,6 +63,9 @@ export const MRT_TableRoot = <D extends Record<string, any> = {}>(
73
63
  const [isFullScreen, setIsFullScreen] = useState(
74
64
  initialState?.isFullScreen ?? false,
75
65
  );
66
+ const [showAlertBanner, setShowAlertBanner] = useState(
67
+ props.initialState?.showAlertBanner ?? false,
68
+ );
76
69
  const [showFilters, setShowFilters] = useState(
77
70
  initialState?.showFilters ?? false,
78
71
  );
@@ -81,125 +74,114 @@ export const MRT_TableRoot = <D extends Record<string, any> = {}>(
81
74
  );
82
75
 
83
76
  const [currentFilterFns, setCurrentFilterFns] = useState<{
84
- [key: string]: MRT_FilterFn;
77
+ [key: string]: MRT_FilterOption;
85
78
  }>(() =>
86
79
  Object.assign(
87
80
  {},
88
- ...getAllLeafColumnDefs(props.columns as MRT_ColumnDef[]).map((c) => ({
89
- [c.id as string]:
90
- c.filterFn ??
91
- initialState?.currentFilterFns?.[c.id] ??
92
- (!!c.filterSelectOptions?.length ? 'equals' : 'fuzzy'),
93
- })),
81
+ ...getAllLeafColumnDefs(props.columns as MRT_ColumnDef<D>[]).map(
82
+ (col) => ({
83
+ [col.id?.toString() ?? col.accessorKey?.toString() ?? '']:
84
+ col.filterFn instanceof Function
85
+ ? col.filterFn.name ?? 'custom'
86
+ : col.filterFn ??
87
+ initialState?.currentFilterFns?.[
88
+ col.id?.toString() ?? col.accessorKey?.toString() ?? ''
89
+ ] ??
90
+ (!!col.filterSelectOptions?.length ? 'equals' : 'fuzzy'),
91
+ }),
92
+ ),
94
93
  ),
95
94
  );
96
95
 
97
- const [currentGlobalFilterFn, setCurrentGlobalFilterFn] = useState<
98
- MRT_FILTER_OPTION | FilterFn<ReactTableGenerics> | string | number | symbol
99
- >(props.globalFilterFn ?? 'fuzzy');
96
+ const [currentGlobalFilterFn, setCurrentGlobalFilterFn] =
97
+ useState<MRT_FilterOption>(
98
+ props.globalFilterFn instanceof String
99
+ ? (props.globalFilterFn as MRT_FilterOption)
100
+ : 'fuzzy',
101
+ );
100
102
 
101
- const table = useMemo(
103
+ const displayColumns = useMemo(
102
104
  () =>
103
- // @ts-ignore
104
- createTable().setOptions({
105
- filterFns: { ...filterFns, ...MRT_FilterFns, ...props.filterFns },
106
- getCoreRowModel: getCoreRowModel(),
107
- getExpandedRowModel: getExpandedRowModel(),
108
- getFacetedRowModel: getFacetedRowModel(),
109
- getFilteredRowModel: getFilteredRowModel(),
110
- getGroupedRowModel: getGroupedRowModel(),
111
- getPaginationRowModel: getPaginationRowModel(),
112
- getSortedRowModel: getSortedRowModel(),
113
- sortingFns: { ...sortingFns, ...MRT_SortingFns, ...props.sortingFns },
114
- }) as Table<D>,
115
- [],
105
+ (
106
+ [
107
+ columnOrder.includes('mrt-row-actions') && {
108
+ Cell: ({ cell }) => (
109
+ <MRT_ToggleRowActionMenuButton
110
+ row={cell.row as any}
111
+ table={table}
112
+ />
113
+ ),
114
+ columnDefType: 'display',
115
+ header: props.localization?.actions,
116
+ id: 'mrt-row-actions',
117
+ muiTableBodyCellProps: props.muiTableBodyCellProps,
118
+ muiTableHeadCellProps: props.muiTableHeadCellProps,
119
+ size: 70,
120
+ },
121
+ columnOrder.includes('mrt-expand') && {
122
+ Cell: ({ cell }) => (
123
+ <MRT_ExpandButton row={cell.row as any} table={table} />
124
+ ),
125
+ Header: () =>
126
+ props.enableExpandAll ? (
127
+ <MRT_ExpandAllButton table={table} />
128
+ ) : null,
129
+ columnDefType: 'display',
130
+ header: props.localization?.expand,
131
+ id: 'mrt-expand',
132
+ muiTableBodyCellProps: props.muiTableBodyCellProps,
133
+ muiTableHeadCellProps: props.muiTableHeadCellProps,
134
+ size: 60,
135
+ },
136
+ columnOrder.includes('mrt-select') && {
137
+ Cell: ({ cell }) => (
138
+ <MRT_SelectCheckbox row={cell.row as any} table={table} />
139
+ ),
140
+ Header: () =>
141
+ props.enableSelectAll ? (
142
+ <MRT_SelectCheckbox selectAll table={table} />
143
+ ) : null,
144
+ columnDefType: 'display',
145
+ header: props.localization?.select,
146
+ id: 'mrt-select',
147
+ muiTableBodyCellProps: props.muiTableBodyCellProps,
148
+ muiTableHeadCellProps: props.muiTableHeadCellProps,
149
+ size: 60,
150
+ },
151
+ columnOrder.includes('mrt-row-numbers') && {
152
+ Cell: ({ cell }) => cell.row.index + 1,
153
+ Header: () => props.localization?.rowNumber,
154
+ columnDefType: 'display',
155
+ header: props.localization?.rowNumbers,
156
+ id: 'mrt-row-numbers',
157
+ muiTableBodyCellProps: props.muiTableBodyCellProps,
158
+ muiTableHeadCellProps: props.muiTableHeadCellProps,
159
+ size: 60,
160
+ },
161
+ ] as MRT_ColumnDef<D>[]
162
+ ).filter(Boolean),
163
+ [
164
+ columnOrder,
165
+ props.editingMode,
166
+ props.enableEditing,
167
+ props.enableExpandAll,
168
+ props.enableExpanding,
169
+ props.enableGrouping,
170
+ props.enableRowActions,
171
+ props.enableRowNumbers,
172
+ props.enableRowSelection,
173
+ props.enableSelectAll,
174
+ props.localization,
175
+ props.muiTableBodyCellProps,
176
+ props.muiTableHeadCellProps,
177
+ props.positionActionsColumn,
178
+ ],
116
179
  );
117
180
 
118
- const displayColumns = useMemo(() => {
119
- return [
120
- columnOrder.includes('mrt-row-actions') &&
121
- createDisplayColumn(table, {
122
- Cell: ({ cell }) => (
123
- <MRT_ToggleRowActionMenuButton
124
- row={cell.row as any}
125
- instance={instance}
126
- />
127
- ),
128
- header: props.localization?.actions,
129
- id: 'mrt-row-actions',
130
- muiTableBodyCellProps: props.muiTableBodyCellProps,
131
- muiTableHeadCellProps: props.muiTableHeadCellProps,
132
- size: 70,
133
- }),
134
- columnOrder.includes('mrt-expand') &&
135
- createDisplayColumn(table, {
136
- Cell: ({ cell }) => (
137
- <MRT_ExpandButton row={cell.row as any} instance={instance} />
138
- ),
139
- Header: () =>
140
- props.enableExpandAll ? (
141
- <MRT_ExpandAllButton instance={instance} />
142
- ) : null,
143
- header: props.localization?.expand,
144
- id: 'mrt-expand',
145
- muiTableBodyCellProps: props.muiTableBodyCellProps,
146
- muiTableHeadCellProps: props.muiTableHeadCellProps,
147
- size: 60,
148
- }),
149
- columnOrder.includes('mrt-select') &&
150
- createDisplayColumn(table, {
151
- Cell: ({ cell }) => (
152
- <MRT_SelectCheckbox row={cell.row as any} instance={instance} />
153
- ),
154
- Header: () =>
155
- props.enableSelectAll ? (
156
- <MRT_SelectCheckbox selectAll instance={instance} />
157
- ) : null,
158
- header: props.localization?.select,
159
- id: 'mrt-select',
160
- muiTableBodyCellProps: props.muiTableBodyCellProps,
161
- muiTableHeadCellProps: props.muiTableHeadCellProps,
162
- size: 60,
163
- }),
164
- columnOrder.includes('mrt-row-numbers') &&
165
- createDisplayColumn(table, {
166
- Cell: ({ cell }) => cell.row.index + 1,
167
- Header: () => props.localization?.rowNumber,
168
- header: props.localization?.rowNumbers,
169
- id: 'mrt-row-numbers',
170
- muiTableBodyCellProps: props.muiTableBodyCellProps,
171
- muiTableHeadCellProps: props.muiTableHeadCellProps,
172
- size: 60,
173
- }),
174
- ].filter(Boolean) as MRT_ColumnDef<D>[];
175
- }, [
176
- columnOrder,
177
- props.editingMode,
178
- props.enableEditing,
179
- props.enableExpandAll,
180
- props.enableExpanding,
181
- props.enableGrouping,
182
- props.enableRowActions,
183
- props.enableRowNumbers,
184
- props.enableRowSelection,
185
- props.enableSelectAll,
186
- props.localization,
187
- props.muiTableBodyCellProps,
188
- props.muiTableHeadCellProps,
189
- props.positionActionsColumn,
190
- table,
191
- ]);
192
-
193
- const columns = useMemo(
194
- () => [
195
- ...displayColumns,
196
- ...props.columns.map((column) =>
197
- column.columns
198
- ? createGroup(table, column as any, currentFilterFns)
199
- : createDataColumn(table, column as any, currentFilterFns),
200
- ),
201
- ],
202
- [table, props.columns, currentFilterFns],
181
+ const columnDefs = useMemo(
182
+ () =>
183
+ prepareColumns([...displayColumns, ...props.columns], currentFilterFns),
184
+ [currentFilterFns, displayColumns, props.columns],
203
185
  );
204
186
 
205
187
  const data: D[] = useMemo(
@@ -210,8 +192,8 @@ export const MRT_TableRoot = <D extends Record<string, any> = {}>(
210
192
  Object.assign(
211
193
  {},
212
194
  ...getAllLeafColumnDefs(props.columns as MRT_ColumnDef[]).map(
213
- (c) => ({
214
- [c.id]: null,
195
+ (col) => ({
196
+ [col.id ?? col.accessorKey ?? '']: null,
215
197
  }),
216
198
  ),
217
199
  ),
@@ -221,17 +203,24 @@ export const MRT_TableRoot = <D extends Record<string, any> = {}>(
221
203
  );
222
204
 
223
205
  //@ts-ignore
224
- const instance = {
225
- //@ts-ignore
226
- ...useTableInstance(table, {
206
+ const table = {
207
+ ...useReactTable({
208
+ getCoreRowModel: getCoreRowModel(),
209
+ getExpandedRowModel: getExpandedRowModel(),
210
+ getFacetedRowModel: getFacetedRowModel(),
211
+ getFilteredRowModel: getFilteredRowModel(),
212
+ getGroupedRowModel: getGroupedRowModel(),
213
+ getPaginationRowModel: getPaginationRowModel(),
214
+ getSortedRowModel: getSortedRowModel(),
227
215
  onColumnOrderChange: setColumnOrder,
228
216
  ...props,
229
217
  //@ts-ignore
230
- columns,
218
+ columns: columnDefs,
231
219
  data,
232
- getSubRows: (row) => (row as MRT_Row)?.subRows,
220
+ getSubRows: (row) => row?.subRows,
233
221
  //@ts-ignore
234
- globalFilterFn: currentGlobalFilterFn,
222
+ globalFilterFn:
223
+ MRT_FilterFns[currentGlobalFilterFn] ?? MRT_FilterFns.fuzzy,
235
224
  initialState,
236
225
  state: {
237
226
  columnOrder,
@@ -241,6 +230,7 @@ export const MRT_TableRoot = <D extends Record<string, any> = {}>(
241
230
  currentGlobalFilterFn,
242
231
  density,
243
232
  isFullScreen,
233
+ showAlertBanner,
244
234
  showFilters,
245
235
  showGlobalFilter,
246
236
  ...props.state,
@@ -256,34 +246,11 @@ export const MRT_TableRoot = <D extends Record<string, any> = {}>(
256
246
  props.onCurrentGlobalFilterFnChange ?? setCurrentGlobalFilterFn,
257
247
  setDensity: props.onDensityChange ?? setDensity,
258
248
  setIsFullScreen: props.onIsFullScreenChange ?? setIsFullScreen,
249
+ setShowAlertBanner: props.onShowAlertBannerChange ?? setShowAlertBanner,
259
250
  setShowFilters: props.onShowFiltersChange ?? setShowFilters,
260
251
  setShowGlobalFilter: props.onShowGlobalFilterChange ?? setShowGlobalFilter,
261
252
  } as MRT_TableInstance;
262
253
 
263
- useEffect(() => {
264
- props?.onColumnOrderChanged?.({
265
- columnOrder: instance.getState().columnOrder,
266
- //@ts-ignore
267
- instance,
268
- });
269
- }, [instance.getState().columnOrder]);
270
-
271
- useEffect(() => {
272
- props?.onColumnPinningChanged?.({
273
- columnPinning: instance.getState().columnPinning,
274
- //@ts-ignore
275
- instance,
276
- });
277
- }, [instance.getState().columnPinning]);
278
-
279
- useEffect(() => {
280
- props?.onColumnVisibilityChanged?.({
281
- columnPinning: instance.getState().columnVisibility,
282
- //@ts-ignore
283
- instance,
284
- });
285
- }, [instance.getState().columnVisibility]);
286
-
287
254
  return (
288
255
  <>
289
256
  <Dialog
@@ -296,9 +263,9 @@ export const MRT_TableRoot = <D extends Record<string, any> = {}>(
296
263
  open={isFullScreen}
297
264
  transitionDuration={400}
298
265
  >
299
- <MRT_TablePaper instance={instance} />
266
+ <MRT_TablePaper table={table} />
300
267
  </Dialog>
301
- {!isFullScreen && <MRT_TablePaper instance={instance} />}
268
+ {!isFullScreen && <MRT_TablePaper table={table} />}
302
269
  </>
303
270
  );
304
271
  };
@@ -4,20 +4,19 @@ import { MRT_TableInstance } from '..';
4
4
 
5
5
  interface Props {
6
6
  alignTo: 'bottom' | 'top';
7
- instance: MRT_TableInstance;
7
+ table: MRT_TableInstance;
8
8
  }
9
9
 
10
- export const MRT_LinearProgressBar: FC<Props> = ({ alignTo, instance }) => {
10
+ export const MRT_LinearProgressBar: FC<Props> = ({ alignTo, table }) => {
11
11
  const {
12
12
  options: { muiLinearProgressProps },
13
13
  getState,
14
- } = instance;
15
-
14
+ } = table;
16
15
  const { isLoading, showProgressBars } = getState();
17
16
 
18
17
  const linearProgressProps =
19
18
  muiLinearProgressProps instanceof Function
20
- ? muiLinearProgressProps({ instance })
19
+ ? muiLinearProgressProps({ table })
21
20
  : muiLinearProgressProps;
22
21
 
23
22
  return (
@@ -3,11 +3,11 @@ import { TablePagination } from '@mui/material';
3
3
  import { MRT_TableInstance } from '..';
4
4
 
5
5
  interface Props {
6
- instance: MRT_TableInstance;
6
+ table: MRT_TableInstance;
7
7
  position: 'top' | 'bottom';
8
8
  }
9
9
 
10
- export const MRT_TablePagination: FC<Props> = ({ instance, position }) => {
10
+ export const MRT_TablePagination: FC<Props> = ({ table, position }) => {
11
11
  const {
12
12
  getPrePaginationRowModel,
13
13
  getState,
@@ -18,26 +18,24 @@ export const MRT_TablePagination: FC<Props> = ({ instance, position }) => {
18
18
  enableToolbarInternalActions,
19
19
  rowCount,
20
20
  },
21
- } = instance;
22
-
21
+ } = table;
23
22
  const {
24
23
  pagination: { pageSize = 10, pageIndex = 0 },
25
24
  showGlobalFilter,
26
25
  } = getState();
27
26
 
27
+ const totalRowCount = rowCount ?? getPrePaginationRowModel().rows.length;
28
+ const showFirstLastPageButtons = totalRowCount / pageSize > 2;
29
+
28
30
  const tablePaginationProps =
29
31
  muiTablePaginationProps instanceof Function
30
- ? muiTablePaginationProps({ instance })
32
+ ? muiTablePaginationProps({ table })
31
33
  : muiTablePaginationProps;
32
34
 
33
35
  const handleChangeRowsPerPage = (event: ChangeEvent<HTMLInputElement>) => {
34
36
  setPageSize(+event.target.value);
35
37
  };
36
38
 
37
- const totalRowCount = rowCount ?? getPrePaginationRowModel().rows.length;
38
-
39
- const showFirstLastPageButtons = totalRowCount / pageSize > 2;
40
-
41
39
  return (
42
40
  <TablePagination
43
41
  SelectProps={{
@@ -1,28 +1,27 @@
1
1
  import React, { FC, Fragment } from 'react';
2
- import { Alert, Box, Chip, Collapse } from '@mui/material';
2
+ import { Alert, AlertTitle, Box, Chip, Collapse } from '@mui/material';
3
3
  import { MRT_TableInstance } from '..';
4
4
 
5
5
  interface Props {
6
6
  stackAlertBanner?: boolean;
7
- instance: MRT_TableInstance;
7
+ table: MRT_TableInstance;
8
8
  }
9
9
 
10
10
  export const MRT_ToolbarAlertBanner: FC<Props> = ({
11
11
  stackAlertBanner,
12
- instance,
12
+ table,
13
13
  }) => {
14
14
  const {
15
15
  getPrePaginationRowModel,
16
16
  getSelectedRowModel,
17
17
  getState,
18
18
  options: { localization, muiTableToolbarAlertBannerProps },
19
- } = instance;
20
-
21
- const { grouping } = getState();
19
+ } = table;
20
+ const { grouping, showAlertBanner } = getState();
22
21
 
23
22
  const alertProps =
24
23
  muiTableToolbarAlertBannerProps instanceof Function
25
- ? muiTableToolbarAlertBannerProps({ instance })
24
+ ? muiTableToolbarAlertBannerProps({ table })
26
25
  : muiTableToolbarAlertBannerProps;
27
26
 
28
27
  const selectMessage =
@@ -47,8 +46,8 @@ export const MRT_ToolbarAlertBanner: FC<Props> = ({
47
46
  {index > 0 ? localization.thenBy : ''}
48
47
  <Chip
49
48
  color="secondary"
50
- label={instance.getColumn(columnId).columnDef.header}
51
- onDelete={() => instance.getColumn(columnId).toggleGrouping()}
49
+ label={table.getColumn(columnId).columnDef.header}
50
+ onDelete={() => table.getColumn(columnId).toggleGrouping()}
52
51
  />
53
52
  </Fragment>
54
53
  ))}
@@ -57,12 +56,13 @@ export const MRT_ToolbarAlertBanner: FC<Props> = ({
57
56
 
58
57
  return (
59
58
  <Collapse
60
- in={!!selectMessage || !!groupedByMessage}
59
+ in={showAlertBanner || !!selectMessage || !!groupedByMessage}
61
60
  timeout={stackAlertBanner ? 200 : 0}
62
61
  >
63
62
  <Alert
64
63
  color="info"
65
64
  icon={false}
65
+ {...alertProps}
66
66
  sx={{
67
67
  borderRadius: 0,
68
68
  fontSize: '1rem',
@@ -75,9 +75,13 @@ export const MRT_ToolbarAlertBanner: FC<Props> = ({
75
75
  zIndex: 2,
76
76
  ...alertProps?.sx,
77
77
  }}
78
- {...alertProps}
79
78
  >
79
+ {alertProps?.title && <AlertTitle>{alertProps.title}</AlertTitle>}
80
80
  <Box sx={{ p: '0.5rem 1rem' }}>
81
+ {alertProps?.children}
82
+ {alertProps?.children && (selectMessage || groupedByMessage) && (
83
+ <br />
84
+ )}
81
85
  {selectMessage}
82
86
  {selectMessage && groupedByMessage && <br />}
83
87
  {groupedByMessage}
@@ -7,10 +7,10 @@ import { commonToolbarStyles } from './MRT_ToolbarTop';
7
7
  import { MRT_TableInstance } from '..';
8
8
 
9
9
  interface Props {
10
- instance: MRT_TableInstance;
10
+ table: MRT_TableInstance;
11
11
  }
12
12
 
13
- export const MRT_ToolbarBottom: FC<Props> = ({ instance }) => {
13
+ export const MRT_ToolbarBottom: FC<Props> = ({ table }) => {
14
14
  const {
15
15
  getState,
16
16
  options: {
@@ -21,15 +21,14 @@ export const MRT_ToolbarBottom: FC<Props> = ({ instance }) => {
21
21
  renderToolbarBottomCustomActions,
22
22
  tableId,
23
23
  },
24
- } = instance;
25
-
24
+ } = table;
26
25
  const { isFullScreen } = getState();
27
26
 
28
27
  const isMobile = useMediaQuery('(max-width:720px)');
29
28
 
30
29
  const toolbarProps =
31
30
  muiTableToolbarBottomProps instanceof Function
32
- ? muiTableToolbarBottomProps({ instance })
31
+ ? muiTableToolbarBottomProps({ table })
33
32
  : muiTableToolbarBottomProps;
34
33
 
35
34
  const stackAlertBanner =
@@ -54,9 +53,9 @@ export const MRT_ToolbarBottom: FC<Props> = ({ instance }) => {
54
53
  } as any)
55
54
  }
56
55
  >
57
- <MRT_LinearProgressBar alignTo="top" instance={instance} />
56
+ <MRT_LinearProgressBar alignTo="top" table={table} />
58
57
  {positionToolbarAlertBanner === 'bottom' && (
59
- <MRT_ToolbarAlertBanner instance={instance} />
58
+ <MRT_ToolbarAlertBanner table={table} />
60
59
  )}
61
60
  <Box
62
61
  sx={{
@@ -67,7 +66,7 @@ export const MRT_ToolbarBottom: FC<Props> = ({ instance }) => {
67
66
  >
68
67
  {renderToolbarBottomCustomActions ? (
69
68
  <Box sx={{ p: '0.5rem' }}>
70
- {renderToolbarBottomCustomActions({ instance })}
69
+ {renderToolbarBottomCustomActions({ table })}
71
70
  </Box>
72
71
  ) : (
73
72
  <span />
@@ -83,7 +82,7 @@ export const MRT_ToolbarBottom: FC<Props> = ({ instance }) => {
83
82
  >
84
83
  {enablePagination &&
85
84
  ['bottom', 'both'].includes(positionPagination ?? '') && (
86
- <MRT_TablePagination instance={instance} position="bottom" />
85
+ <MRT_TablePagination table={table} position="bottom" />
87
86
  )}
88
87
  </Box>
89
88
  </Box>
@@ -9,10 +9,10 @@ import { MRT_TableInstance } from '..';
9
9
  import { MRT_GlobalFilterTextField } from '../inputs/MRT_GlobalFilterTextField';
10
10
 
11
11
  interface Props {
12
- instance: MRT_TableInstance;
12
+ table: MRT_TableInstance;
13
13
  }
14
14
 
15
- export const MRT_ToolbarInternalButtons: FC<Props> = ({ instance }) => {
15
+ export const MRT_ToolbarInternalButtons: FC<Props> = ({ table }) => {
16
16
  const {
17
17
  options: {
18
18
  enableColumnFilters,
@@ -26,7 +26,7 @@ export const MRT_ToolbarInternalButtons: FC<Props> = ({ instance }) => {
26
26
  positionGlobalFilter,
27
27
  renderToolbarInternalActions,
28
28
  },
29
- } = instance;
29
+ } = table;
30
30
 
31
31
  return (
32
32
  <Box
@@ -42,26 +42,26 @@ export const MRT_ToolbarInternalButtons: FC<Props> = ({ instance }) => {
42
42
  MRT_ToggleDensePaddingButton,
43
43
  MRT_ToggleFiltersButton,
44
44
  MRT_ToggleGlobalFilterButton,
45
- instance,
45
+ table,
46
46
  }) ?? (
47
47
  <>
48
48
  {enableGlobalFilter && positionGlobalFilter === 'right' && (
49
- <MRT_GlobalFilterTextField instance={instance} />
49
+ <MRT_GlobalFilterTextField table={table} />
50
50
  )}
51
51
  {enableFilters && enableGlobalFilter && (
52
- <MRT_ToggleGlobalFilterButton instance={instance} />
52
+ <MRT_ToggleGlobalFilterButton table={table} />
53
53
  )}
54
54
  {enableFilters && enableColumnFilters && (
55
- <MRT_ToggleFiltersButton instance={instance} />
55
+ <MRT_ToggleFiltersButton table={table} />
56
56
  )}
57
57
  {(enableHiding || enableColumnOrdering || enablePinning) && (
58
- <MRT_ShowHideColumnsButton instance={instance} />
58
+ <MRT_ShowHideColumnsButton table={table} />
59
59
  )}
60
60
  {enableDensityToggle && (
61
- <MRT_ToggleDensePaddingButton instance={instance} />
61
+ <MRT_ToggleDensePaddingButton table={table} />
62
62
  )}
63
63
  {enableFullScreenToggle && (
64
- <MRT_FullScreenToggleButton instance={instance} />
64
+ <MRT_FullScreenToggleButton table={table} />
65
65
  )}
66
66
  </>
67
67
  )}