@mini_7/material-react-table-mcp 4.0.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/README.md +68 -0
- package/data/MIGRATION.md +136 -0
- package/data/api.json +5379 -0
- package/data/examples/advanced.tsx +309 -0
- package/data/examples/aggregation-and-grouping.tsx +153 -0
- package/data/examples/aggregation-multi.tsx +105 -0
- package/data/examples/alternate-column-filtering.tsx +49 -0
- package/data/examples/alternate-detail-panel.tsx +81 -0
- package/data/examples/alternate-pagination.tsx +23 -0
- package/data/examples/basic.tsx +109 -0
- package/data/examples/chart-detail-panel.tsx +89 -0
- package/data/examples/column-actions-space.tsx +44 -0
- package/data/examples/column-alignment.tsx +70 -0
- package/data/examples/custom-column-actions.tsx +109 -0
- package/data/examples/custom-column-filtering-ui.tsx +89 -0
- package/data/examples/custom-headless.tsx +125 -0
- package/data/examples/custom-top-toolbar.tsx +88 -0
- package/data/examples/customize-display-columns.tsx +85 -0
- package/data/examples/customize-filter-components.tsx +101 -0
- package/data/examples/customize-filter-modes.tsx +73 -0
- package/data/examples/customize-filter-variants.tsx +116 -0
- package/data/examples/customize-global-filter-component.tsx +52 -0
- package/data/examples/customize-remove-column-grouping.tsx +94 -0
- package/data/examples/customize-row-selection.tsx +54 -0
- package/data/examples/customize-table-styles.tsx +100 -0
- package/data/examples/disable-column-actions.tsx +37 -0
- package/data/examples/disable-column-hiding.tsx +90 -0
- package/data/examples/disable-density-toggle.tsx +49 -0
- package/data/examples/dynamic-columns.tsx +189 -0
- package/data/examples/editing-crud-cell.tsx +377 -0
- package/data/examples/editing-crud-modal.tsx +370 -0
- package/data/examples/editing-crud-row.tsx +333 -0
- package/data/examples/editing-crud-table.tsx +369 -0
- package/data/examples/editing-crud-tree.tsx +416 -0
- package/data/examples/enable-cell-actions.tsx +76 -0
- package/data/examples/enable-click-to-copy.tsx +39 -0
- package/data/examples/enable-column-grouping.tsx +120 -0
- package/data/examples/enable-column-ordering.tsx +48 -0
- package/data/examples/enable-column-pinning.tsx +69 -0
- package/data/examples/enable-column-resizing.tsx +56 -0
- package/data/examples/enable-column-virtualization.tsx +27 -0
- package/data/examples/enable-detail-panel-conditionally.tsx +78 -0
- package/data/examples/enable-detail-panel-virtualized.tsx +80 -0
- package/data/examples/enable-expanding-tree.tsx +110 -0
- package/data/examples/enable-filter-facet-values.tsx +65 -0
- package/data/examples/enable-row-dragging.tsx +137 -0
- package/data/examples/enable-row-numbers-original.tsx +48 -0
- package/data/examples/enable-row-numbers-static.tsx +48 -0
- package/data/examples/enable-row-ordering.tsx +57 -0
- package/data/examples/enable-row-pinning-select.tsx +76 -0
- package/data/examples/enable-row-pinning-static.tsx +50 -0
- package/data/examples/enable-row-pinning-sticky.tsx +69 -0
- package/data/examples/enable-row-selection.tsx +96 -0
- package/data/examples/enable-row-virtualization.tsx +101 -0
- package/data/examples/enable-sticky-header.tsx +59 -0
- package/data/examples/expanding-tree-expanded.tsx +121 -0
- package/data/examples/expanding-tree-flat-parse.tsx +125 -0
- package/data/examples/expanding-tree-root-expanded.tsx +151 -0
- package/data/examples/export-to-csv.tsx +114 -0
- package/data/examples/export-to-pdf.tsx +104 -0
- package/data/examples/external-toolbar.tsx +108 -0
- package/data/examples/font-awesome-icons.tsx +106 -0
- package/data/examples/infinite-scrolling.tsx +208 -0
- package/data/examples/lazy-detail-panel.tsx +262 -0
- package/data/examples/lazy-sub-rows.tsx +190 -0
- package/data/examples/linear-progress.tsx +66 -0
- package/data/examples/loading.tsx +50 -0
- package/data/examples/localization-i18n-ar.tsx +65 -0
- package/data/examples/localization-i18n-az.tsx +60 -0
- package/data/examples/localization-i18n-bg.tsx +60 -0
- package/data/examples/localization-i18n-cs.tsx +60 -0
- package/data/examples/localization-i18n-da.tsx +60 -0
- package/data/examples/localization-i18n-de.tsx +60 -0
- package/data/examples/localization-i18n-el.tsx +60 -0
- package/data/examples/localization-i18n-en.tsx +60 -0
- package/data/examples/localization-i18n-es.tsx +60 -0
- package/data/examples/localization-i18n-et.tsx +60 -0
- package/data/examples/localization-i18n-fa.tsx +66 -0
- package/data/examples/localization-i18n-fi.tsx +60 -0
- package/data/examples/localization-i18n-fr.tsx +60 -0
- package/data/examples/localization-i18n-he.tsx +66 -0
- package/data/examples/localization-i18n-hr.tsx +60 -0
- package/data/examples/localization-i18n-hu.tsx +60 -0
- package/data/examples/localization-i18n-hy.tsx +65 -0
- package/data/examples/localization-i18n-id.tsx +60 -0
- package/data/examples/localization-i18n-it.tsx +60 -0
- package/data/examples/localization-i18n-ja.tsx +60 -0
- package/data/examples/localization-i18n-ko.tsx +60 -0
- package/data/examples/localization-i18n-nl.tsx +60 -0
- package/data/examples/localization-i18n-no.tsx +60 -0
- package/data/examples/localization-i18n-np.tsx +60 -0
- package/data/examples/localization-i18n-pl.tsx +60 -0
- package/data/examples/localization-i18n-pt-BR.tsx +60 -0
- package/data/examples/localization-i18n-pt.tsx +60 -0
- package/data/examples/localization-i18n-ro.tsx +60 -0
- package/data/examples/localization-i18n-ru.tsx +60 -0
- package/data/examples/localization-i18n-sk.tsx +60 -0
- package/data/examples/localization-i18n-sr-Cyrl-RS.tsx +60 -0
- package/data/examples/localization-i18n-sr-Latn-RS.tsx +60 -0
- package/data/examples/localization-i18n-sv.tsx +60 -0
- package/data/examples/localization-i18n-tr.tsx +60 -0
- package/data/examples/localization-i18n-uk.tsx +60 -0
- package/data/examples/localization-i18n-vi.tsx +60 -0
- package/data/examples/localization-i18n-zh-hans.tsx +60 -0
- package/data/examples/localization-i18n-zh-hant.tsx +60 -0
- package/data/examples/manual-selection.tsx +105 -0
- package/data/examples/minimal.tsx +78 -0
- package/data/examples/mui-theme.tsx +136 -0
- package/data/examples/multi-sorting.tsx +58 -0
- package/data/examples/persistent-state.tsx +184 -0
- package/data/examples/react-query.tsx +182 -0
- package/data/examples/remote.tsx +150 -0
- package/data/examples/row-actions-buttons.tsx +89 -0
- package/data/examples/row-actions-menu-items.tsx +64 -0
- package/data/examples/single-row-selection.tsx +98 -0
- package/data/examples/virtualized.tsx +138 -0
- package/data/guides/accessibility.md +119 -0
- package/data/guides/aggregation.md +210 -0
- package/data/guides/async-loading.md +132 -0
- package/data/guides/best-practices.md +363 -0
- package/data/guides/cell-actions.md +139 -0
- package/data/guides/click-to-copy.md +67 -0
- package/data/guides/column-actions.md +69 -0
- package/data/guides/column-filtering.md +366 -0
- package/data/guides/column-grouping.md +192 -0
- package/data/guides/column-hiding.md +133 -0
- package/data/guides/column-ordering-dnd.md +99 -0
- package/data/guides/column-pinning.md +72 -0
- package/data/guides/column-resizing.md +157 -0
- package/data/guides/column-size.md +162 -0
- package/data/guides/customize-components.md +395 -0
- package/data/guides/customize-icons.md +35 -0
- package/data/guides/data-columns.md +292 -0
- package/data/guides/density-toggle.md +46 -0
- package/data/guides/detail-panel.md +195 -0
- package/data/guides/display-columns.md +135 -0
- package/data/guides/editing.md +367 -0
- package/data/guides/expanding-sub-rows.md +194 -0
- package/data/guides/full-screen-toggle.md +63 -0
- package/data/guides/global-filtering.md +237 -0
- package/data/guides/localization.md +57 -0
- package/data/guides/memoization.md +157 -0
- package/data/guides/pagination.md +171 -0
- package/data/guides/row-actions.md +116 -0
- package/data/guides/row-numbers.md +24 -0
- package/data/guides/row-ordering-dnd.md +51 -0
- package/data/guides/row-pinning.md +96 -0
- package/data/guides/row-selection.md +237 -0
- package/data/guides/sorting.md +190 -0
- package/data/guides/state-management.md +165 -0
- package/data/guides/sticky-header.md +41 -0
- package/data/guides/table-event-listeners.md +103 -0
- package/data/guides/toolbar-customization.md +251 -0
- package/data/guides/virtualization.md +183 -0
- package/data/index.json +1930 -0
- package/data/reference/mrt-components.md +183 -0
- package/data/reference/mrt-hooks.md +125 -0
- package/data/skills/composable-components/SKILL.md +189 -0
- package/data/skills/customization/SKILL.md +190 -0
- package/data/skills/drag-and-drop-ordering/SKILL.md +227 -0
- package/data/skills/editing/SKILL.md +243 -0
- package/data/skills/filtering/SKILL.md +213 -0
- package/data/skills/getting-started/SKILL.md +213 -0
- package/data/skills/localization/SKILL.md +182 -0
- package/data/skills/migrate-v3-to-v4/SKILL.md +161 -0
- package/data/skills/state-and-server-data/SKILL.md +200 -0
- package/data/skills/virtualization/SKILL.md +203 -0
- package/dist/data.js +137 -0
- package/dist/index.js +232 -0
- package/package.json +50 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
## Aggregation Feature Guide
|
|
2
|
+
|
|
3
|
+
Material React Table has built-in aggregation features. There are options for both automatic client-side grouping and aggregation, as well as manual server-side grouping and aggregation. This guide will walk you through the different options and how to use and customize them.
|
|
4
|
+
|
|
5
|
+
> See the [Column Grouping Guide](/docs/guides/column-grouping) as a prerequisite to this guide. The Aggregation and Grouping Guide was recently split into two separate guides.
|
|
6
|
+
|
|
7
|
+
### Relevant Table Options
|
|
8
|
+
|
|
9
|
+
Relevant table options (get_mrt_api has full details):
|
|
10
|
+
|
|
11
|
+
- `aggregationFns` - type `Record<string, AggregationFn>` - This option allows you to define custom aggregation functions that can be referenced in a column's aggregationFn option by their key
|
|
12
|
+
- `enableExpandAll` - type `boolean` - default `true`
|
|
13
|
+
- `enableGrouping` - type `boolean`
|
|
14
|
+
- `enableStickyFooter` - type `boolean`
|
|
15
|
+
- `groupedColumnMode` - type `false | 'reorder' | 'remove'` - default `reorder` - Grouping columns are automatically reordered by default to the start of the columns list. If you would rather remove them or leave them as-is, set the appropriate mode here.
|
|
16
|
+
- `manualGrouping` - type `boolean` - Enables manual grouping. If this option is set to true, the table will not automatically group rows using getGroupedRowModel() and instead will expect you to manually group the rows before passing them to the table. This is useful if you are doing server-side grouping and aggregation.
|
|
17
|
+
- `muiToolbarAlertBannerChipProps` - type `ChipProps| ({ table }} => ChipProps`
|
|
18
|
+
- `onGroupingChange` - type `OnChangeFn<GroupingState>` - If this function is provided, it will be called when the grouping state changes and you will be expected to manage the state yourself. You can pass the managed state back to the table via the tableOptions.state.grouping option.
|
|
19
|
+
- `positionToolbarAlertBanner` - type `'bottom' | 'top' | 'none'` - default `'top'`
|
|
20
|
+
|
|
21
|
+
### Relevant Column Options
|
|
22
|
+
|
|
23
|
+
Relevant column options (get_mrt_api has full details):
|
|
24
|
+
|
|
25
|
+
- `AggregatedCell` - type `({ cell, column, row, table }) => ReactNode` - Define a custom cell render for an aggregated cell.
|
|
26
|
+
- `enableGrouping` - type `boolean`
|
|
27
|
+
- `Footer` - type `ReactNode | ({ column, footer, table }) => ReactNode` - Render custom markup for a column footer.
|
|
28
|
+
- `GroupedCell` - type `({ cell, column, row, table }) => ReactNode` - Define a custom cell render for a grouped cell.
|
|
29
|
+
- `PlaceholderCell` - type `({ cell, column, row, table }) => ReactNode` - Define a custom cell render for a placeholder cell.
|
|
30
|
+
|
|
31
|
+
### Relevant State
|
|
32
|
+
|
|
33
|
+
Relevant state options (get_mrt_api has full details):
|
|
34
|
+
|
|
35
|
+
- `expanded` - type `Record<string, boolean> | boolean` - default `{}`
|
|
36
|
+
- `grouping` - type `Array<string>` - default `[]`
|
|
37
|
+
|
|
38
|
+
### Aggregation on Grouped Rows
|
|
39
|
+
|
|
40
|
+
One of the cool features of Material React Table is that it can automatically aggregate the data in grouped rows. To enable this, you must specify both an `aggregationFn` and an `AggregatedCell` render option on a column definition.
|
|
41
|
+
|
|
42
|
+
#### Built-in Aggregation Functions
|
|
43
|
+
|
|
44
|
+
There are several built-in aggregation functions available that you can use. They are:
|
|
45
|
+
|
|
46
|
+
- `count` - Finds the number of rows in a group
|
|
47
|
+
- `extent` - Finds the minimum and maximum values of a group of rows
|
|
48
|
+
- `max` - Finds the maximum value of a group of rows
|
|
49
|
+
- `mean` - Finds the average value of a group of rows
|
|
50
|
+
- `median` - Finds the median value of a group of rows
|
|
51
|
+
- `min` - Finds the minimum value of a group of rows
|
|
52
|
+
- `sum` - sums the values of a group of rows
|
|
53
|
+
- `uniqueCount` - Finds the number of unique values of a group of rows
|
|
54
|
+
- `unique` - Finds the unique values of a group of rows
|
|
55
|
+
|
|
56
|
+
_All of these built-in aggregation functions are from [TanStack Table](https://tanstack.com/table/v9/docs/framework/react/guide/grouping)_
|
|
57
|
+
|
|
58
|
+
```jsx
|
|
59
|
+
const columns = [
|
|
60
|
+
{
|
|
61
|
+
accessorKey: 'team', //grouped by team in initial state below
|
|
62
|
+
header: 'Team',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
accessorKey: 'player',
|
|
66
|
+
header: 'Player',
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
accessorKey: 'points',
|
|
70
|
+
header: 'Points',
|
|
71
|
+
aggregationFn: 'sum', //calc total points for each team by adding up all the points for each player on the team
|
|
72
|
+
AggregatedCell: ({ cell }) => <div>Team Score: {cell.getValue()}</div>,
|
|
73
|
+
},
|
|
74
|
+
];
|
|
75
|
+
|
|
76
|
+
const table = useMaterialReactTable({
|
|
77
|
+
columns,
|
|
78
|
+
data,
|
|
79
|
+
enableGrouping: true,
|
|
80
|
+
initialState: { grouping: ['team'], expanded: true },
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
return <MaterialReactTable table={table} />;
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
#### Custom Aggregation Functions
|
|
87
|
+
|
|
88
|
+
If none of these pre-built aggregation functions work for you, you can also pass in a custom aggregation function. The aggregation function will be passed in an array of values from the column that you are aggregating. It should return a single value that will be displayed in the aggregated cell.
|
|
89
|
+
|
|
90
|
+
If you are specifying a custom aggregation function, it must implement the following type:
|
|
91
|
+
|
|
92
|
+
```jsx
|
|
93
|
+
export type AggregationFn<TData extends AnyData> = (
|
|
94
|
+
getLeafRows: () => Row<TData>[],
|
|
95
|
+
getChildRows: () => Row<TData>[]
|
|
96
|
+
) => any
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Aggregation on All Rows in Footer
|
|
100
|
+
|
|
101
|
+
Material React Table does not automatically aggregate all rows for you to calculate totals for the entire table. However, it is still easy enough to do this manually and add in your custom calculations into the `footer` or `Footer` of a column definition. It is recommended that you do any necessary aggregation calculations on your data in a useMemo hook before passing it to the columns footer in your columns definition.
|
|
102
|
+
|
|
103
|
+
```jsx
|
|
104
|
+
//calculate the total points for all players in the table in a useMemo hook
|
|
105
|
+
const averageScore = useMemo(() => {
|
|
106
|
+
const totalPoints = data.reduce((acc, row) => acc + row.points, 0);
|
|
107
|
+
const totalPlayers = data.length;
|
|
108
|
+
return totalPoints / totalPlayers;
|
|
109
|
+
}, [data]);
|
|
110
|
+
|
|
111
|
+
const columns = useMemo(
|
|
112
|
+
() => [
|
|
113
|
+
{
|
|
114
|
+
accessorKey: 'name',
|
|
115
|
+
header: 'Name',
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
accessorKey: 'score',
|
|
119
|
+
header: 'Score',
|
|
120
|
+
Footer: () => <div>Average Score: {averageScore}</div>, //do not do calculations in render, do them in useMemo hook and pass them in here
|
|
121
|
+
},
|
|
122
|
+
],
|
|
123
|
+
[averageScore],
|
|
124
|
+
);
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
> Please remember to perform heavy aggregation calculations in a useMemo hook to avoid unnecessary re-renders!
|
|
128
|
+
|
|
129
|
+
### Custom Cell Renders for Aggregation and Grouping
|
|
130
|
+
|
|
131
|
+
There are a few custom cell render overrides that you should be aware of when using grouping and aggregation features.
|
|
132
|
+
|
|
133
|
+
#### AggregatedCell Column Option
|
|
134
|
+
|
|
135
|
+
"Aggregation Cells" are cells in an aggregated row (not a normal data row) that can display aggregates (avg, sum, etc.) of the data in a group. The cell that the table is grouped on, however, is not an Aggregate Cell, but rather a [GroupedCell](#groupedcell-column-option).
|
|
136
|
+
|
|
137
|
+
You can specify the custom render for these cells with the `AggregatedCell` render option on a column definition.
|
|
138
|
+
|
|
139
|
+
```jsx
|
|
140
|
+
const columns = [
|
|
141
|
+
{
|
|
142
|
+
accessorKey: 'points',
|
|
143
|
+
header: 'Points',
|
|
144
|
+
aggregationFn: 'sum',
|
|
145
|
+
AggregatedCell: ({ cell }) => <div>Total Score: {cell.getValue()}</div>,
|
|
146
|
+
},
|
|
147
|
+
];
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
#### GroupedCell Column Option
|
|
151
|
+
|
|
152
|
+
"Grouped Cells" are cells in a grouped row (not a normal data row) that by default display the value that the rows are grouped on and the number of rows in the group. You can override the default render for these cells with the `GroupedCell` render option on a column definition.
|
|
153
|
+
|
|
154
|
+
```jsx
|
|
155
|
+
const columns = [
|
|
156
|
+
{
|
|
157
|
+
accessorKey: 'team',
|
|
158
|
+
header: 'Team',
|
|
159
|
+
GroupedCell: ({ cell }) => <div>Team: {cell.getValue()}</div>,
|
|
160
|
+
},
|
|
161
|
+
];
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
#### PlaceholderCell Column Option
|
|
165
|
+
|
|
166
|
+
"Placeholder Cells" are cells that are usually meant to be empty in grouped rows and columns. They are simply rendered with a value of `null` by default, but you can override the default render for these cells with the `PlaceholderCell` render option on a column definition.
|
|
167
|
+
|
|
168
|
+
```jsx
|
|
169
|
+
const columns = [
|
|
170
|
+
{
|
|
171
|
+
accessorKey: 'team',
|
|
172
|
+
header: 'Team',
|
|
173
|
+
PlaceholderCell: ({ cell, row }) => (
|
|
174
|
+
<div>{row.original.someOtherRowValue}</div>
|
|
175
|
+
),
|
|
176
|
+
},
|
|
177
|
+
];
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Aggregation/Grouping Example
|
|
181
|
+
|
|
182
|
+
> Live example: `aggregation-and-grouping` (call get_mrt_example with that id).
|
|
183
|
+
|
|
184
|
+
### Multiple Aggregations Per column
|
|
185
|
+
|
|
186
|
+
You may want to calculate more than one aggregation per column. This is now easier if you are upgraded to at least v1.3.0. You can now specify an array of `aggregationFn`s, and then reference the aggregation results from an array in the `AggregatedCell` render option.
|
|
187
|
+
|
|
188
|
+
```jsx
|
|
189
|
+
const columns = [
|
|
190
|
+
{
|
|
191
|
+
header: 'Salary',
|
|
192
|
+
accessorKey: 'salary',
|
|
193
|
+
aggregationFn: ['count', 'mean'], //multiple aggregation functions
|
|
194
|
+
AggregatedCell: ({ cell, table }) => (
|
|
195
|
+
<div>
|
|
196
|
+
{/*get the count from the first aggregation*/}
|
|
197
|
+
<div>Count: {cell.getValue()[0]}</div>
|
|
198
|
+
{/*get the average from the second aggregation*/}
|
|
199
|
+
<div>Average Salary: {cell.getValue()[1]}</div>
|
|
200
|
+
</div>
|
|
201
|
+
),
|
|
202
|
+
},
|
|
203
|
+
];
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
> Live example: `aggregation-multi` (call get_mrt_example with that id).
|
|
207
|
+
|
|
208
|
+
### Manual Grouping
|
|
209
|
+
|
|
210
|
+
Manual Grouping means that the `data` that you pass to the table is already grouped and aggregated, and you do not want Material React Table to do any of the grouping or aggregation for you. This is useful if you are using a backend API to do the grouping and aggregation for you, and you just want to display the results. However, you will need to put your data in the specific format that the `expanding` features understand.
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
## Async Loading UI Feature Guide
|
|
2
|
+
|
|
3
|
+
While you are fetching your data, you may want to show some loading indicators. Material React Table has some nice loading UI features built in that look better than a simple spinner.
|
|
4
|
+
|
|
5
|
+
> This guide is mostly focused on the loading UI features. Make sure to also check out the [Remote Data](/docs/examples/remote) and [React Query](/docs/examples/react-query) examples for server-side logic examples.
|
|
6
|
+
|
|
7
|
+
### Relevant Table Options
|
|
8
|
+
|
|
9
|
+
Relevant table options (get_mrt_api has full details):
|
|
10
|
+
|
|
11
|
+
- `muiCircularProgressProps` - type `CircularProgressProps | ({ table }) => CircularProgressProps`
|
|
12
|
+
- `muiLinearProgressProps` - type `LinearProgressProps | ({ isTopToolbar, table }) => LinearProgressProps`
|
|
13
|
+
- `muiSkeletonProps` - type `SkeletonProps | ({ cell, column, row, table }) => SkeletonProps`
|
|
14
|
+
|
|
15
|
+
### Relevant State Options
|
|
16
|
+
|
|
17
|
+
Relevant state options (get_mrt_api has full details):
|
|
18
|
+
|
|
19
|
+
- `isLoading` - type `boolean` - default `false`
|
|
20
|
+
- `isSaving` - type `boolean` - default `false`
|
|
21
|
+
- `showLoadingOverlay` - type `boolean` - default `false`
|
|
22
|
+
- `showProgressBars` - type `boolean` - default `false`
|
|
23
|
+
- `showSkeletons` - type `boolean` - default `false`
|
|
24
|
+
|
|
25
|
+
### isLoading UI
|
|
26
|
+
|
|
27
|
+
There are three different loading UI features that are built into Material React Table:
|
|
28
|
+
|
|
29
|
+
1. Loading Overlay - shows spinner overlay over the table container.
|
|
30
|
+
2. Cell Skeletons - show pretty and shimmering skeletons for each cell.
|
|
31
|
+
3. Linear Progress Bars - shows progress bars above and/or below the table.
|
|
32
|
+
|
|
33
|
+
You can use any combination of these loading UIs by managing the `showLoadingOverlay`, `showSkeletons`, and `showProgressBars` states.
|
|
34
|
+
|
|
35
|
+
There are also two other loading states that are shortcuts for combining some of the above states:
|
|
36
|
+
|
|
37
|
+
- `isLoading` - shows loading overlay and cell skeletons.
|
|
38
|
+
- `isSaving` - shows the progress bars and adds spinners to the save buttons in editing features.
|
|
39
|
+
|
|
40
|
+
Here is some of the recommended loading UI that you might use with React Query:
|
|
41
|
+
|
|
42
|
+
```jsx
|
|
43
|
+
const {
|
|
44
|
+
data = [],
|
|
45
|
+
isLoading: isLoadingTodos,
|
|
46
|
+
isRefetching: isRefetchingTodos,
|
|
47
|
+
} = useQuery({
|
|
48
|
+
/**/
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
const { mutate, isPending: isSavingTodos } = useMutation({
|
|
52
|
+
/**/
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
const table = useMaterialReactTable({
|
|
56
|
+
columns,
|
|
57
|
+
data,
|
|
58
|
+
state: {
|
|
59
|
+
isLoading: isLoadingTodos, //cell skeletons and loading overlay
|
|
60
|
+
showProgressBars: isRefetchingTodos, //progress bars while refetching
|
|
61
|
+
isSaving: isSavingTodos, //progress bars and save button spinners
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
return <MaterialReactTable table={table} />;
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
> Note: The Loading Overlay UI makes the table container non-interactive while it is showing. This is usually desired while no data is yet in the table. Consider avoiding using the Loading Overlay UI during "refetching" operations like filtering, sorting, or pagination.
|
|
69
|
+
|
|
70
|
+
### Customize Loading UI
|
|
71
|
+
|
|
72
|
+
You can customize the loading UI by passing props to the `muiSkeletonProps`, `muiLinearProgressProps`, and `muiCircularProgressProps` props.
|
|
73
|
+
|
|
74
|
+
```jsx
|
|
75
|
+
const table = useMaterialReactTable({
|
|
76
|
+
columns,
|
|
77
|
+
data,
|
|
78
|
+
muiSkeletonProps: {
|
|
79
|
+
animation: 'wave',
|
|
80
|
+
},
|
|
81
|
+
muiLinearProgressProps: {
|
|
82
|
+
color: 'secondary',
|
|
83
|
+
},
|
|
84
|
+
muiCircularProgressProps: {
|
|
85
|
+
color: 'secondary',
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
return <MaterialReactTable table={table} />;
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
> Live example: `loading` (call get_mrt_example with that id).
|
|
93
|
+
|
|
94
|
+
#### Custom Loading Spinner component
|
|
95
|
+
|
|
96
|
+
> New in v2.11.0
|
|
97
|
+
|
|
98
|
+
If you need to use a custom loading spinner component other than the built-in MUI one, you can now pass in custom component in the `muiCircularProgressProps` `Component` prop.
|
|
99
|
+
|
|
100
|
+
```jsx
|
|
101
|
+
import { MyCustomSpinner } from './MyCustomSpinner';
|
|
102
|
+
|
|
103
|
+
const table = useMaterialReactTable({
|
|
104
|
+
columns,
|
|
105
|
+
data,
|
|
106
|
+
muiCircularProgressProps: {
|
|
107
|
+
Component: <MyCustomSpinner />,
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Only Show Progress Bars or Skeletons
|
|
113
|
+
|
|
114
|
+
If you do not want both progress bars and cell skeletons to show, you can use the `showProgressBars` and `showSkeletons` states, instead.
|
|
115
|
+
|
|
116
|
+
```jsx
|
|
117
|
+
const table = useMaterialReactTable({
|
|
118
|
+
columns,
|
|
119
|
+
data,
|
|
120
|
+
state: {
|
|
121
|
+
showProgressBars: true, //or showSkeletons
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
> Live example: `linear-progress` (call get_mrt_example with that id).
|
|
127
|
+
|
|
128
|
+
### Full Loading and Server-Side Logic Example
|
|
129
|
+
|
|
130
|
+
Here is a copy of the full [React Query](/docs/examples/react-query) example.
|
|
131
|
+
|
|
132
|
+
> Live example: `react-query` (call get_mrt_example with that id).
|