@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.
Files changed (170) hide show
  1. package/README.md +68 -0
  2. package/data/MIGRATION.md +136 -0
  3. package/data/api.json +5379 -0
  4. package/data/examples/advanced.tsx +309 -0
  5. package/data/examples/aggregation-and-grouping.tsx +153 -0
  6. package/data/examples/aggregation-multi.tsx +105 -0
  7. package/data/examples/alternate-column-filtering.tsx +49 -0
  8. package/data/examples/alternate-detail-panel.tsx +81 -0
  9. package/data/examples/alternate-pagination.tsx +23 -0
  10. package/data/examples/basic.tsx +109 -0
  11. package/data/examples/chart-detail-panel.tsx +89 -0
  12. package/data/examples/column-actions-space.tsx +44 -0
  13. package/data/examples/column-alignment.tsx +70 -0
  14. package/data/examples/custom-column-actions.tsx +109 -0
  15. package/data/examples/custom-column-filtering-ui.tsx +89 -0
  16. package/data/examples/custom-headless.tsx +125 -0
  17. package/data/examples/custom-top-toolbar.tsx +88 -0
  18. package/data/examples/customize-display-columns.tsx +85 -0
  19. package/data/examples/customize-filter-components.tsx +101 -0
  20. package/data/examples/customize-filter-modes.tsx +73 -0
  21. package/data/examples/customize-filter-variants.tsx +116 -0
  22. package/data/examples/customize-global-filter-component.tsx +52 -0
  23. package/data/examples/customize-remove-column-grouping.tsx +94 -0
  24. package/data/examples/customize-row-selection.tsx +54 -0
  25. package/data/examples/customize-table-styles.tsx +100 -0
  26. package/data/examples/disable-column-actions.tsx +37 -0
  27. package/data/examples/disable-column-hiding.tsx +90 -0
  28. package/data/examples/disable-density-toggle.tsx +49 -0
  29. package/data/examples/dynamic-columns.tsx +189 -0
  30. package/data/examples/editing-crud-cell.tsx +377 -0
  31. package/data/examples/editing-crud-modal.tsx +370 -0
  32. package/data/examples/editing-crud-row.tsx +333 -0
  33. package/data/examples/editing-crud-table.tsx +369 -0
  34. package/data/examples/editing-crud-tree.tsx +416 -0
  35. package/data/examples/enable-cell-actions.tsx +76 -0
  36. package/data/examples/enable-click-to-copy.tsx +39 -0
  37. package/data/examples/enable-column-grouping.tsx +120 -0
  38. package/data/examples/enable-column-ordering.tsx +48 -0
  39. package/data/examples/enable-column-pinning.tsx +69 -0
  40. package/data/examples/enable-column-resizing.tsx +56 -0
  41. package/data/examples/enable-column-virtualization.tsx +27 -0
  42. package/data/examples/enable-detail-panel-conditionally.tsx +78 -0
  43. package/data/examples/enable-detail-panel-virtualized.tsx +80 -0
  44. package/data/examples/enable-expanding-tree.tsx +110 -0
  45. package/data/examples/enable-filter-facet-values.tsx +65 -0
  46. package/data/examples/enable-row-dragging.tsx +137 -0
  47. package/data/examples/enable-row-numbers-original.tsx +48 -0
  48. package/data/examples/enable-row-numbers-static.tsx +48 -0
  49. package/data/examples/enable-row-ordering.tsx +57 -0
  50. package/data/examples/enable-row-pinning-select.tsx +76 -0
  51. package/data/examples/enable-row-pinning-static.tsx +50 -0
  52. package/data/examples/enable-row-pinning-sticky.tsx +69 -0
  53. package/data/examples/enable-row-selection.tsx +96 -0
  54. package/data/examples/enable-row-virtualization.tsx +101 -0
  55. package/data/examples/enable-sticky-header.tsx +59 -0
  56. package/data/examples/expanding-tree-expanded.tsx +121 -0
  57. package/data/examples/expanding-tree-flat-parse.tsx +125 -0
  58. package/data/examples/expanding-tree-root-expanded.tsx +151 -0
  59. package/data/examples/export-to-csv.tsx +114 -0
  60. package/data/examples/export-to-pdf.tsx +104 -0
  61. package/data/examples/external-toolbar.tsx +108 -0
  62. package/data/examples/font-awesome-icons.tsx +106 -0
  63. package/data/examples/infinite-scrolling.tsx +208 -0
  64. package/data/examples/lazy-detail-panel.tsx +262 -0
  65. package/data/examples/lazy-sub-rows.tsx +190 -0
  66. package/data/examples/linear-progress.tsx +66 -0
  67. package/data/examples/loading.tsx +50 -0
  68. package/data/examples/localization-i18n-ar.tsx +65 -0
  69. package/data/examples/localization-i18n-az.tsx +60 -0
  70. package/data/examples/localization-i18n-bg.tsx +60 -0
  71. package/data/examples/localization-i18n-cs.tsx +60 -0
  72. package/data/examples/localization-i18n-da.tsx +60 -0
  73. package/data/examples/localization-i18n-de.tsx +60 -0
  74. package/data/examples/localization-i18n-el.tsx +60 -0
  75. package/data/examples/localization-i18n-en.tsx +60 -0
  76. package/data/examples/localization-i18n-es.tsx +60 -0
  77. package/data/examples/localization-i18n-et.tsx +60 -0
  78. package/data/examples/localization-i18n-fa.tsx +66 -0
  79. package/data/examples/localization-i18n-fi.tsx +60 -0
  80. package/data/examples/localization-i18n-fr.tsx +60 -0
  81. package/data/examples/localization-i18n-he.tsx +66 -0
  82. package/data/examples/localization-i18n-hr.tsx +60 -0
  83. package/data/examples/localization-i18n-hu.tsx +60 -0
  84. package/data/examples/localization-i18n-hy.tsx +65 -0
  85. package/data/examples/localization-i18n-id.tsx +60 -0
  86. package/data/examples/localization-i18n-it.tsx +60 -0
  87. package/data/examples/localization-i18n-ja.tsx +60 -0
  88. package/data/examples/localization-i18n-ko.tsx +60 -0
  89. package/data/examples/localization-i18n-nl.tsx +60 -0
  90. package/data/examples/localization-i18n-no.tsx +60 -0
  91. package/data/examples/localization-i18n-np.tsx +60 -0
  92. package/data/examples/localization-i18n-pl.tsx +60 -0
  93. package/data/examples/localization-i18n-pt-BR.tsx +60 -0
  94. package/data/examples/localization-i18n-pt.tsx +60 -0
  95. package/data/examples/localization-i18n-ro.tsx +60 -0
  96. package/data/examples/localization-i18n-ru.tsx +60 -0
  97. package/data/examples/localization-i18n-sk.tsx +60 -0
  98. package/data/examples/localization-i18n-sr-Cyrl-RS.tsx +60 -0
  99. package/data/examples/localization-i18n-sr-Latn-RS.tsx +60 -0
  100. package/data/examples/localization-i18n-sv.tsx +60 -0
  101. package/data/examples/localization-i18n-tr.tsx +60 -0
  102. package/data/examples/localization-i18n-uk.tsx +60 -0
  103. package/data/examples/localization-i18n-vi.tsx +60 -0
  104. package/data/examples/localization-i18n-zh-hans.tsx +60 -0
  105. package/data/examples/localization-i18n-zh-hant.tsx +60 -0
  106. package/data/examples/manual-selection.tsx +105 -0
  107. package/data/examples/minimal.tsx +78 -0
  108. package/data/examples/mui-theme.tsx +136 -0
  109. package/data/examples/multi-sorting.tsx +58 -0
  110. package/data/examples/persistent-state.tsx +184 -0
  111. package/data/examples/react-query.tsx +182 -0
  112. package/data/examples/remote.tsx +150 -0
  113. package/data/examples/row-actions-buttons.tsx +89 -0
  114. package/data/examples/row-actions-menu-items.tsx +64 -0
  115. package/data/examples/single-row-selection.tsx +98 -0
  116. package/data/examples/virtualized.tsx +138 -0
  117. package/data/guides/accessibility.md +119 -0
  118. package/data/guides/aggregation.md +210 -0
  119. package/data/guides/async-loading.md +132 -0
  120. package/data/guides/best-practices.md +363 -0
  121. package/data/guides/cell-actions.md +139 -0
  122. package/data/guides/click-to-copy.md +67 -0
  123. package/data/guides/column-actions.md +69 -0
  124. package/data/guides/column-filtering.md +366 -0
  125. package/data/guides/column-grouping.md +192 -0
  126. package/data/guides/column-hiding.md +133 -0
  127. package/data/guides/column-ordering-dnd.md +99 -0
  128. package/data/guides/column-pinning.md +72 -0
  129. package/data/guides/column-resizing.md +157 -0
  130. package/data/guides/column-size.md +162 -0
  131. package/data/guides/customize-components.md +395 -0
  132. package/data/guides/customize-icons.md +35 -0
  133. package/data/guides/data-columns.md +292 -0
  134. package/data/guides/density-toggle.md +46 -0
  135. package/data/guides/detail-panel.md +195 -0
  136. package/data/guides/display-columns.md +135 -0
  137. package/data/guides/editing.md +367 -0
  138. package/data/guides/expanding-sub-rows.md +194 -0
  139. package/data/guides/full-screen-toggle.md +63 -0
  140. package/data/guides/global-filtering.md +237 -0
  141. package/data/guides/localization.md +57 -0
  142. package/data/guides/memoization.md +157 -0
  143. package/data/guides/pagination.md +171 -0
  144. package/data/guides/row-actions.md +116 -0
  145. package/data/guides/row-numbers.md +24 -0
  146. package/data/guides/row-ordering-dnd.md +51 -0
  147. package/data/guides/row-pinning.md +96 -0
  148. package/data/guides/row-selection.md +237 -0
  149. package/data/guides/sorting.md +190 -0
  150. package/data/guides/state-management.md +165 -0
  151. package/data/guides/sticky-header.md +41 -0
  152. package/data/guides/table-event-listeners.md +103 -0
  153. package/data/guides/toolbar-customization.md +251 -0
  154. package/data/guides/virtualization.md +183 -0
  155. package/data/index.json +1930 -0
  156. package/data/reference/mrt-components.md +183 -0
  157. package/data/reference/mrt-hooks.md +125 -0
  158. package/data/skills/composable-components/SKILL.md +189 -0
  159. package/data/skills/customization/SKILL.md +190 -0
  160. package/data/skills/drag-and-drop-ordering/SKILL.md +227 -0
  161. package/data/skills/editing/SKILL.md +243 -0
  162. package/data/skills/filtering/SKILL.md +213 -0
  163. package/data/skills/getting-started/SKILL.md +213 -0
  164. package/data/skills/localization/SKILL.md +182 -0
  165. package/data/skills/migrate-v3-to-v4/SKILL.md +161 -0
  166. package/data/skills/state-and-server-data/SKILL.md +200 -0
  167. package/data/skills/virtualization/SKILL.md +203 -0
  168. package/dist/data.js +137 -0
  169. package/dist/index.js +232 -0
  170. 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).