@lminii/material-react-table-mcp 4.0.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 (284) 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.js +215 -0
  5. package/data/examples/advanced.tsx +309 -0
  6. package/data/examples/aggregation-and-grouping.js +116 -0
  7. package/data/examples/aggregation-and-grouping.tsx +153 -0
  8. package/data/examples/aggregation-multi.js +89 -0
  9. package/data/examples/aggregation-multi.tsx +105 -0
  10. package/data/examples/alternate-column-filtering.js +38 -0
  11. package/data/examples/alternate-column-filtering.tsx +49 -0
  12. package/data/examples/alternate-detail-panel.js +65 -0
  13. package/data/examples/alternate-detail-panel.tsx +81 -0
  14. package/data/examples/alternate-pagination.js +17 -0
  15. package/data/examples/alternate-pagination.tsx +23 -0
  16. package/data/examples/basic.js +86 -0
  17. package/data/examples/basic.tsx +109 -0
  18. package/data/examples/chart-detail-panel.js +69 -0
  19. package/data/examples/chart-detail-panel.tsx +89 -0
  20. package/data/examples/column-actions-space.js +34 -0
  21. package/data/examples/column-actions-space.tsx +44 -0
  22. package/data/examples/column-alignment.js +58 -0
  23. package/data/examples/column-alignment.tsx +70 -0
  24. package/data/examples/custom-column-actions.js +74 -0
  25. package/data/examples/custom-column-actions.tsx +109 -0
  26. package/data/examples/custom-column-filtering-ui.js +59 -0
  27. package/data/examples/custom-column-filtering-ui.tsx +89 -0
  28. package/data/examples/custom-headless.js +85 -0
  29. package/data/examples/custom-headless.tsx +125 -0
  30. package/data/examples/custom-top-toolbar.js +60 -0
  31. package/data/examples/custom-top-toolbar.tsx +88 -0
  32. package/data/examples/customize-display-columns.js +72 -0
  33. package/data/examples/customize-display-columns.tsx +85 -0
  34. package/data/examples/customize-filter-components.js +78 -0
  35. package/data/examples/customize-filter-components.tsx +101 -0
  36. package/data/examples/customize-filter-modes.js +59 -0
  37. package/data/examples/customize-filter-modes.tsx +73 -0
  38. package/data/examples/customize-filter-variants.js +98 -0
  39. package/data/examples/customize-filter-variants.tsx +116 -0
  40. package/data/examples/customize-global-filter-component.js +37 -0
  41. package/data/examples/customize-global-filter-component.tsx +52 -0
  42. package/data/examples/customize-remove-column-grouping.js +75 -0
  43. package/data/examples/customize-remove-column-grouping.tsx +94 -0
  44. package/data/examples/customize-row-selection.js +43 -0
  45. package/data/examples/customize-row-selection.tsx +54 -0
  46. package/data/examples/customize-table-styles.js +81 -0
  47. package/data/examples/customize-table-styles.tsx +100 -0
  48. package/data/examples/disable-column-actions.js +26 -0
  49. package/data/examples/disable-column-actions.tsx +37 -0
  50. package/data/examples/disable-column-hiding.js +74 -0
  51. package/data/examples/disable-column-hiding.tsx +90 -0
  52. package/data/examples/disable-density-toggle.js +37 -0
  53. package/data/examples/disable-density-toggle.tsx +49 -0
  54. package/data/examples/dynamic-columns.js +124 -0
  55. package/data/examples/dynamic-columns.tsx +189 -0
  56. package/data/examples/editing-crud-cell.js +288 -0
  57. package/data/examples/editing-crud-cell.tsx +377 -0
  58. package/data/examples/editing-crud-modal.js +275 -0
  59. package/data/examples/editing-crud-modal.tsx +370 -0
  60. package/data/examples/editing-crud-row.js +255 -0
  61. package/data/examples/editing-crud-row.tsx +333 -0
  62. package/data/examples/editing-crud-table.js +280 -0
  63. package/data/examples/editing-crud-table.tsx +369 -0
  64. package/data/examples/editing-crud-tree.js +328 -0
  65. package/data/examples/editing-crud-tree.tsx +416 -0
  66. package/data/examples/enable-cell-actions.js +52 -0
  67. package/data/examples/enable-cell-actions.tsx +76 -0
  68. package/data/examples/enable-click-to-copy.js +33 -0
  69. package/data/examples/enable-click-to-copy.tsx +39 -0
  70. package/data/examples/enable-column-grouping.js +69 -0
  71. package/data/examples/enable-column-grouping.tsx +120 -0
  72. package/data/examples/enable-column-ordering.js +37 -0
  73. package/data/examples/enable-column-ordering.tsx +48 -0
  74. package/data/examples/enable-column-pinning.js +58 -0
  75. package/data/examples/enable-column-pinning.tsx +69 -0
  76. package/data/examples/enable-column-resizing.js +45 -0
  77. package/data/examples/enable-column-resizing.tsx +56 -0
  78. package/data/examples/enable-column-virtualization.js +19 -0
  79. package/data/examples/enable-column-virtualization.tsx +27 -0
  80. package/data/examples/enable-detail-panel-conditionally.js +61 -0
  81. package/data/examples/enable-detail-panel-conditionally.tsx +78 -0
  82. package/data/examples/enable-detail-panel-virtualized.js +64 -0
  83. package/data/examples/enable-detail-panel-virtualized.tsx +80 -0
  84. package/data/examples/enable-expanding-tree.js +87 -0
  85. package/data/examples/enable-expanding-tree.tsx +110 -0
  86. package/data/examples/enable-filter-facet-values.js +52 -0
  87. package/data/examples/enable-filter-facet-values.tsx +65 -0
  88. package/data/examples/enable-row-dragging.js +102 -0
  89. package/data/examples/enable-row-dragging.tsx +137 -0
  90. package/data/examples/enable-row-numbers-original.js +37 -0
  91. package/data/examples/enable-row-numbers-original.tsx +48 -0
  92. package/data/examples/enable-row-numbers-static.js +37 -0
  93. package/data/examples/enable-row-numbers-static.tsx +48 -0
  94. package/data/examples/enable-row-ordering.js +40 -0
  95. package/data/examples/enable-row-ordering.tsx +57 -0
  96. package/data/examples/enable-row-pinning-select.js +64 -0
  97. package/data/examples/enable-row-pinning-select.tsx +76 -0
  98. package/data/examples/enable-row-pinning-static.js +39 -0
  99. package/data/examples/enable-row-pinning-static.tsx +50 -0
  100. package/data/examples/enable-row-pinning-sticky.js +57 -0
  101. package/data/examples/enable-row-pinning-sticky.tsx +69 -0
  102. package/data/examples/enable-row-selection.js +71 -0
  103. package/data/examples/enable-row-selection.tsx +96 -0
  104. package/data/examples/enable-row-virtualization.js +85 -0
  105. package/data/examples/enable-row-virtualization.tsx +101 -0
  106. package/data/examples/enable-sticky-header.js +47 -0
  107. package/data/examples/enable-sticky-header.tsx +59 -0
  108. package/data/examples/expanding-tree-expanded.js +98 -0
  109. package/data/examples/expanding-tree-expanded.tsx +121 -0
  110. package/data/examples/expanding-tree-flat-parse.js +102 -0
  111. package/data/examples/expanding-tree-flat-parse.tsx +125 -0
  112. package/data/examples/expanding-tree-root-expanded.js +120 -0
  113. package/data/examples/expanding-tree-root-expanded.tsx +151 -0
  114. package/data/examples/export-to-csv.js +84 -0
  115. package/data/examples/export-to-csv.tsx +114 -0
  116. package/data/examples/export-to-pdf.js +76 -0
  117. package/data/examples/export-to-pdf.tsx +104 -0
  118. package/data/examples/external-toolbar.js +82 -0
  119. package/data/examples/external-toolbar.tsx +108 -0
  120. package/data/examples/font-awesome-icons.js +62 -0
  121. package/data/examples/font-awesome-icons.tsx +106 -0
  122. package/data/examples/infinite-scrolling.js +137 -0
  123. package/data/examples/infinite-scrolling.tsx +208 -0
  124. package/data/examples/lazy-detail-panel.js +164 -0
  125. package/data/examples/lazy-detail-panel.tsx +262 -0
  126. package/data/examples/lazy-sub-rows.js +118 -0
  127. package/data/examples/lazy-sub-rows.tsx +190 -0
  128. package/data/examples/linear-progress.js +48 -0
  129. package/data/examples/linear-progress.tsx +66 -0
  130. package/data/examples/loading.js +34 -0
  131. package/data/examples/loading.tsx +50 -0
  132. package/data/examples/localization-i18n-ar.js +40 -0
  133. package/data/examples/localization-i18n-ar.tsx +65 -0
  134. package/data/examples/localization-i18n-az.js +38 -0
  135. package/data/examples/localization-i18n-az.tsx +60 -0
  136. package/data/examples/localization-i18n-bg.js +38 -0
  137. package/data/examples/localization-i18n-bg.tsx +60 -0
  138. package/data/examples/localization-i18n-cs.js +38 -0
  139. package/data/examples/localization-i18n-cs.tsx +60 -0
  140. package/data/examples/localization-i18n-da.js +38 -0
  141. package/data/examples/localization-i18n-da.tsx +60 -0
  142. package/data/examples/localization-i18n-de.js +38 -0
  143. package/data/examples/localization-i18n-de.tsx +60 -0
  144. package/data/examples/localization-i18n-el.js +38 -0
  145. package/data/examples/localization-i18n-el.tsx +60 -0
  146. package/data/examples/localization-i18n-en.js +38 -0
  147. package/data/examples/localization-i18n-en.tsx +60 -0
  148. package/data/examples/localization-i18n-es.js +38 -0
  149. package/data/examples/localization-i18n-es.tsx +60 -0
  150. package/data/examples/localization-i18n-et.js +38 -0
  151. package/data/examples/localization-i18n-et.tsx +60 -0
  152. package/data/examples/localization-i18n-fa.js +40 -0
  153. package/data/examples/localization-i18n-fa.tsx +66 -0
  154. package/data/examples/localization-i18n-fi.js +38 -0
  155. package/data/examples/localization-i18n-fi.tsx +60 -0
  156. package/data/examples/localization-i18n-fr.js +38 -0
  157. package/data/examples/localization-i18n-fr.tsx +60 -0
  158. package/data/examples/localization-i18n-he.js +40 -0
  159. package/data/examples/localization-i18n-he.tsx +66 -0
  160. package/data/examples/localization-i18n-hr.js +38 -0
  161. package/data/examples/localization-i18n-hr.tsx +60 -0
  162. package/data/examples/localization-i18n-hu.js +38 -0
  163. package/data/examples/localization-i18n-hu.tsx +60 -0
  164. package/data/examples/localization-i18n-hy.js +40 -0
  165. package/data/examples/localization-i18n-hy.tsx +65 -0
  166. package/data/examples/localization-i18n-id.js +38 -0
  167. package/data/examples/localization-i18n-id.tsx +60 -0
  168. package/data/examples/localization-i18n-it.js +38 -0
  169. package/data/examples/localization-i18n-it.tsx +60 -0
  170. package/data/examples/localization-i18n-ja.js +38 -0
  171. package/data/examples/localization-i18n-ja.tsx +60 -0
  172. package/data/examples/localization-i18n-ko.js +38 -0
  173. package/data/examples/localization-i18n-ko.tsx +60 -0
  174. package/data/examples/localization-i18n-nl.js +38 -0
  175. package/data/examples/localization-i18n-nl.tsx +60 -0
  176. package/data/examples/localization-i18n-no.js +38 -0
  177. package/data/examples/localization-i18n-no.tsx +60 -0
  178. package/data/examples/localization-i18n-np.js +38 -0
  179. package/data/examples/localization-i18n-np.tsx +60 -0
  180. package/data/examples/localization-i18n-pl.js +38 -0
  181. package/data/examples/localization-i18n-pl.tsx +60 -0
  182. package/data/examples/localization-i18n-pt-BR.js +38 -0
  183. package/data/examples/localization-i18n-pt-BR.tsx +60 -0
  184. package/data/examples/localization-i18n-pt.js +38 -0
  185. package/data/examples/localization-i18n-pt.tsx +60 -0
  186. package/data/examples/localization-i18n-ro.js +38 -0
  187. package/data/examples/localization-i18n-ro.tsx +60 -0
  188. package/data/examples/localization-i18n-ru.js +38 -0
  189. package/data/examples/localization-i18n-ru.tsx +60 -0
  190. package/data/examples/localization-i18n-sk.js +38 -0
  191. package/data/examples/localization-i18n-sk.tsx +60 -0
  192. package/data/examples/localization-i18n-sr-Cyrl-RS.js +38 -0
  193. package/data/examples/localization-i18n-sr-Cyrl-RS.tsx +60 -0
  194. package/data/examples/localization-i18n-sr-Latn-RS.js +38 -0
  195. package/data/examples/localization-i18n-sr-Latn-RS.tsx +60 -0
  196. package/data/examples/localization-i18n-sv.js +38 -0
  197. package/data/examples/localization-i18n-sv.tsx +60 -0
  198. package/data/examples/localization-i18n-tr.js +38 -0
  199. package/data/examples/localization-i18n-tr.tsx +60 -0
  200. package/data/examples/localization-i18n-uk.js +38 -0
  201. package/data/examples/localization-i18n-uk.tsx +60 -0
  202. package/data/examples/localization-i18n-vi.js +38 -0
  203. package/data/examples/localization-i18n-vi.tsx +60 -0
  204. package/data/examples/localization-i18n-zh-hans.js +38 -0
  205. package/data/examples/localization-i18n-zh-hans.tsx +60 -0
  206. package/data/examples/localization-i18n-zh-hant.js +38 -0
  207. package/data/examples/localization-i18n-zh-hant.tsx +60 -0
  208. package/data/examples/manual-selection.js +81 -0
  209. package/data/examples/manual-selection.tsx +105 -0
  210. package/data/examples/minimal.js +66 -0
  211. package/data/examples/minimal.tsx +78 -0
  212. package/data/examples/mui-theme.js +109 -0
  213. package/data/examples/mui-theme.tsx +136 -0
  214. package/data/examples/multi-sorting.js +48 -0
  215. package/data/examples/multi-sorting.tsx +58 -0
  216. package/data/examples/persistent-state.js +126 -0
  217. package/data/examples/persistent-state.tsx +184 -0
  218. package/data/examples/react-query.js +122 -0
  219. package/data/examples/react-query.tsx +182 -0
  220. package/data/examples/remote.js +113 -0
  221. package/data/examples/remote.tsx +150 -0
  222. package/data/examples/row-actions-buttons.js +54 -0
  223. package/data/examples/row-actions-buttons.tsx +89 -0
  224. package/data/examples/row-actions-menu-items.js +36 -0
  225. package/data/examples/row-actions-menu-items.tsx +64 -0
  226. package/data/examples/single-row-selection.js +74 -0
  227. package/data/examples/single-row-selection.tsx +98 -0
  228. package/data/examples/virtualized.js +122 -0
  229. package/data/examples/virtualized.tsx +138 -0
  230. package/data/guides/accessibility.md +119 -0
  231. package/data/guides/aggregation.md +210 -0
  232. package/data/guides/async-loading.md +132 -0
  233. package/data/guides/best-practices.md +363 -0
  234. package/data/guides/cell-actions.md +139 -0
  235. package/data/guides/click-to-copy.md +67 -0
  236. package/data/guides/column-actions.md +69 -0
  237. package/data/guides/column-filtering.md +366 -0
  238. package/data/guides/column-grouping.md +192 -0
  239. package/data/guides/column-hiding.md +133 -0
  240. package/data/guides/column-ordering-dnd.md +99 -0
  241. package/data/guides/column-pinning.md +72 -0
  242. package/data/guides/column-resizing.md +157 -0
  243. package/data/guides/column-size.md +162 -0
  244. package/data/guides/customize-components.md +395 -0
  245. package/data/guides/customize-icons.md +35 -0
  246. package/data/guides/data-columns.md +292 -0
  247. package/data/guides/density-toggle.md +46 -0
  248. package/data/guides/detail-panel.md +195 -0
  249. package/data/guides/display-columns.md +135 -0
  250. package/data/guides/editing.md +367 -0
  251. package/data/guides/expanding-sub-rows.md +194 -0
  252. package/data/guides/full-screen-toggle.md +63 -0
  253. package/data/guides/global-filtering.md +237 -0
  254. package/data/guides/localization.md +57 -0
  255. package/data/guides/memoization.md +157 -0
  256. package/data/guides/pagination.md +171 -0
  257. package/data/guides/row-actions.md +116 -0
  258. package/data/guides/row-numbers.md +24 -0
  259. package/data/guides/row-ordering-dnd.md +51 -0
  260. package/data/guides/row-pinning.md +96 -0
  261. package/data/guides/row-selection.md +237 -0
  262. package/data/guides/sorting.md +190 -0
  263. package/data/guides/state-management.md +165 -0
  264. package/data/guides/sticky-header.md +41 -0
  265. package/data/guides/table-event-listeners.md +103 -0
  266. package/data/guides/toolbar-customization.md +251 -0
  267. package/data/guides/virtualization.md +183 -0
  268. package/data/index.json +1930 -0
  269. package/data/reference/mrt-components.md +183 -0
  270. package/data/reference/mrt-hooks.md +125 -0
  271. package/data/skills/README.md +81 -0
  272. package/data/skills/composable-components/SKILL.md +189 -0
  273. package/data/skills/customization/SKILL.md +190 -0
  274. package/data/skills/drag-and-drop-ordering/SKILL.md +227 -0
  275. package/data/skills/editing/SKILL.md +243 -0
  276. package/data/skills/filtering/SKILL.md +213 -0
  277. package/data/skills/getting-started/SKILL.md +213 -0
  278. package/data/skills/localization/SKILL.md +182 -0
  279. package/data/skills/migrate-v3-to-v4/SKILL.md +161 -0
  280. package/data/skills/state-and-server-data/SKILL.md +200 -0
  281. package/data/skills/virtualization/SKILL.md +203 -0
  282. package/dist/data.js +159 -0
  283. package/dist/index.js +244 -0
  284. package/package.json +50 -0
@@ -0,0 +1,78 @@
1
+ import { useMemo } from 'react';
2
+ import {
3
+ MRT_Table, //import alternative sub-component if we do not want toolbars
4
+ type MRT_ColumnDef,
5
+ useMaterialReactTable,
6
+ } from 'material-react-table';
7
+ import { data, type Person } from './makeData';
8
+
9
+ export const Example = () => {
10
+ const columns = useMemo<MRT_ColumnDef<Person>[]>(
11
+ //column definitions...
12
+ () => [
13
+ {
14
+ accessorKey: 'firstName',
15
+ header: 'First Name',
16
+ },
17
+ {
18
+ accessorKey: 'lastName',
19
+ header: 'Last Name',
20
+ },
21
+ {
22
+ accessorKey: 'address',
23
+ header: 'Address',
24
+ },
25
+ {
26
+ accessorKey: 'city',
27
+ header: 'City',
28
+ },
29
+ {
30
+ accessorKey: 'state',
31
+ header: 'State',
32
+ },
33
+ ],
34
+ [],
35
+ //end
36
+ );
37
+
38
+ const table = useMaterialReactTable({
39
+ columns,
40
+ data, //data must be memoized or stable (useState, useMemo, defined outside of this component, etc.)
41
+ enableKeyboardShortcuts: false,
42
+ enableColumnActions: false,
43
+ enableColumnFilters: false,
44
+ enablePagination: false,
45
+ enableSorting: false,
46
+ mrtTheme: (theme) => ({
47
+ baseBackgroundColor: theme.palette.background.default, //change default background color
48
+ }),
49
+ muiTableBodyRowProps: { hover: false },
50
+ muiTableProps: {
51
+ sx: {
52
+ border: '1px solid rgba(81, 81, 81, .5)',
53
+ caption: {
54
+ captionSide: 'top',
55
+ },
56
+ },
57
+ },
58
+ muiTableHeadCellProps: {
59
+ sx: {
60
+ border: '1px solid rgba(81, 81, 81, .5)',
61
+ fontStyle: 'italic',
62
+ fontWeight: 'normal',
63
+ },
64
+ },
65
+ muiTableBodyCellProps: {
66
+ sx: {
67
+ border: '1px solid rgba(81, 81, 81, .5)',
68
+ },
69
+ },
70
+ renderCaption: ({ table }) =>
71
+ `Here is a table rendered with the lighter weight MRT_Table sub-component, rendering ${table.getRowModel().rows.length} rows.`,
72
+ });
73
+
74
+ //using MRT_Table instead of MaterialReactTable if we do not need any of the toolbar components or features
75
+ return <MRT_Table table={table} />;
76
+ };
77
+
78
+ export default Example;
@@ -0,0 +1,109 @@
1
+ import { useMemo } from 'react';
2
+ import { MaterialReactTable } from 'material-react-table';
3
+ import { createTheme, ThemeProvider, useTheme } from '@mui/material';
4
+ //column definitions...
5
+ const columns = [
6
+ {
7
+ accessorKey: 'firstName',
8
+ header: 'First Name',
9
+ },
10
+ {
11
+ accessorKey: 'lastName',
12
+ header: 'Last Name',
13
+ },
14
+ {
15
+ accessorKey: 'address',
16
+ header: 'Address',
17
+ },
18
+ {
19
+ accessorKey: 'city',
20
+ header: 'City',
21
+ },
22
+ {
23
+ accessorKey: 'state',
24
+ header: 'State',
25
+ },
26
+ ];
27
+ //end
28
+ //data definitions...
29
+ const data = [
30
+ {
31
+ firstName: 'Dylan',
32
+ lastName: 'Murray',
33
+ address: '261 Erdman Ford',
34
+ city: 'East Daphne',
35
+ state: 'Kentucky',
36
+ },
37
+ {
38
+ firstName: 'Raquel',
39
+ lastName: 'Kohler',
40
+ address: '769 Dominic Grove',
41
+ city: 'Columbus',
42
+ state: 'Ohio',
43
+ },
44
+ {
45
+ firstName: 'Ervin',
46
+ lastName: 'Reinger',
47
+ address: '566 Brakus Inlet',
48
+ city: 'South Linda',
49
+ state: 'West Virginia',
50
+ },
51
+ {
52
+ firstName: 'Brittany',
53
+ lastName: 'McCullough',
54
+ address: '722 Emie Stream',
55
+ city: 'Lincoln',
56
+ state: 'Nebraska',
57
+ },
58
+ {
59
+ firstName: 'Branson',
60
+ lastName: 'Frami',
61
+ address: '32188 Larkin Turnpike',
62
+ city: 'Charleston',
63
+ state: 'South Carolina',
64
+ },
65
+ ];
66
+ //end
67
+ const Example = () => {
68
+ const globalTheme = useTheme(); //(optional) if you already have a theme defined in your app root, you can import here
69
+ const tableTheme = useMemo(() => createTheme({
70
+ palette: {
71
+ mode: globalTheme.palette.mode, //let's use the same dark/light mode as the global theme
72
+ primary: globalTheme.palette.secondary, //swap in the secondary color as the primary for the table
73
+ info: {
74
+ main: 'rgb(255,122,0)', //add in a custom color for the toolbar alert background stuff
75
+ },
76
+ background: {
77
+ default: globalTheme.palette.mode === 'light'
78
+ ? 'rgb(254,255,244)' //random light yellow color for the background in light mode
79
+ : '#000', //pure black table in dark mode for fun
80
+ },
81
+ },
82
+ typography: {
83
+ button: {
84
+ textTransform: 'none', //customize typography styles for all buttons in table by default
85
+ fontSize: '1.2rem',
86
+ },
87
+ },
88
+ components: {
89
+ MuiTooltip: {
90
+ styleOverrides: {
91
+ tooltip: {
92
+ fontSize: '1.1rem', //override to make tooltip font size larger
93
+ },
94
+ },
95
+ },
96
+ MuiSwitch: {
97
+ styleOverrides: {
98
+ thumb: {
99
+ color: 'pink', //change the color of the switch thumb in the columns show/hide menu to pink
100
+ },
101
+ },
102
+ },
103
+ },
104
+ }), [globalTheme]);
105
+ return (<ThemeProvider theme={tableTheme}>
106
+ <MaterialReactTable columns={columns} data={data} enableRowSelection enableColumnOrdering enableColumnPinning/>
107
+ </ThemeProvider>);
108
+ };
109
+ export default Example;
@@ -0,0 +1,136 @@
1
+ import { useMemo } from 'react';
2
+ import { MaterialReactTable, type MRT_ColumnDef } from 'material-react-table';
3
+ import { createTheme, ThemeProvider, useTheme } from '@mui/material';
4
+
5
+ type Person = {
6
+ firstName: string;
7
+ lastName: string;
8
+ address: string;
9
+ city: string;
10
+ state: string;
11
+ };
12
+
13
+ //column definitions...
14
+ const columns: MRT_ColumnDef<Person>[] = [
15
+ {
16
+ accessorKey: 'firstName',
17
+ header: 'First Name',
18
+ },
19
+ {
20
+ accessorKey: 'lastName',
21
+ header: 'Last Name',
22
+ },
23
+ {
24
+ accessorKey: 'address',
25
+ header: 'Address',
26
+ },
27
+ {
28
+ accessorKey: 'city',
29
+ header: 'City',
30
+ },
31
+ {
32
+ accessorKey: 'state',
33
+ header: 'State',
34
+ },
35
+ ];
36
+ //end
37
+
38
+ //data definitions...
39
+ const data = [
40
+ {
41
+ firstName: 'Dylan',
42
+ lastName: 'Murray',
43
+ address: '261 Erdman Ford',
44
+ city: 'East Daphne',
45
+ state: 'Kentucky',
46
+ },
47
+ {
48
+ firstName: 'Raquel',
49
+ lastName: 'Kohler',
50
+ address: '769 Dominic Grove',
51
+ city: 'Columbus',
52
+ state: 'Ohio',
53
+ },
54
+ {
55
+ firstName: 'Ervin',
56
+ lastName: 'Reinger',
57
+ address: '566 Brakus Inlet',
58
+ city: 'South Linda',
59
+ state: 'West Virginia',
60
+ },
61
+ {
62
+ firstName: 'Brittany',
63
+ lastName: 'McCullough',
64
+ address: '722 Emie Stream',
65
+ city: 'Lincoln',
66
+ state: 'Nebraska',
67
+ },
68
+ {
69
+ firstName: 'Branson',
70
+ lastName: 'Frami',
71
+ address: '32188 Larkin Turnpike',
72
+ city: 'Charleston',
73
+ state: 'South Carolina',
74
+ },
75
+ ];
76
+ //end
77
+
78
+ const Example = () => {
79
+ const globalTheme = useTheme(); //(optional) if you already have a theme defined in your app root, you can import here
80
+
81
+ const tableTheme = useMemo(
82
+ () =>
83
+ createTheme({
84
+ palette: {
85
+ mode: globalTheme.palette.mode, //let's use the same dark/light mode as the global theme
86
+ primary: globalTheme.palette.secondary, //swap in the secondary color as the primary for the table
87
+ info: {
88
+ main: 'rgb(255,122,0)', //add in a custom color for the toolbar alert background stuff
89
+ },
90
+ background: {
91
+ default:
92
+ globalTheme.palette.mode === 'light'
93
+ ? 'rgb(254,255,244)' //random light yellow color for the background in light mode
94
+ : '#000', //pure black table in dark mode for fun
95
+ },
96
+ },
97
+ typography: {
98
+ button: {
99
+ textTransform: 'none', //customize typography styles for all buttons in table by default
100
+ fontSize: '1.2rem',
101
+ },
102
+ },
103
+ components: {
104
+ MuiTooltip: {
105
+ styleOverrides: {
106
+ tooltip: {
107
+ fontSize: '1.1rem', //override to make tooltip font size larger
108
+ },
109
+ },
110
+ },
111
+ MuiSwitch: {
112
+ styleOverrides: {
113
+ thumb: {
114
+ color: 'pink', //change the color of the switch thumb in the columns show/hide menu to pink
115
+ },
116
+ },
117
+ },
118
+ },
119
+ }),
120
+ [globalTheme],
121
+ );
122
+
123
+ return (
124
+ <ThemeProvider theme={tableTheme}>
125
+ <MaterialReactTable
126
+ columns={columns}
127
+ data={data}
128
+ enableRowSelection
129
+ enableColumnOrdering
130
+ enableColumnPinning
131
+ />
132
+ </ThemeProvider>
133
+ );
134
+ };
135
+
136
+ export default Example;
@@ -0,0 +1,48 @@
1
+ import { MaterialReactTable, useMaterialReactTable, } from 'material-react-table';
2
+ import { data } from './makeData';
3
+ import { Button } from '@mui/material';
4
+ const columns = [
5
+ {
6
+ accessorKey: 'firstName',
7
+ header: 'First Name',
8
+ sortDescFirst: false, //sort first name in ascending order by default on first sort click (default for non-numeric columns)
9
+ },
10
+ //column definitions...
11
+ {
12
+ accessorKey: 'lastName',
13
+ header: 'Last Name',
14
+ },
15
+ {
16
+ accessorKey: 'city',
17
+ header: 'City',
18
+ },
19
+ {
20
+ accessorKey: 'state',
21
+ header: 'State',
22
+ },
23
+ //end
24
+ {
25
+ accessorKey: 'salary',
26
+ header: 'Salary',
27
+ sortDescFirst: true, //sort salary in descending order by default on first sort click (default for numeric columns)
28
+ },
29
+ ];
30
+ const Example = () => {
31
+ const table = useMaterialReactTable({
32
+ columns,
33
+ data,
34
+ isMultiSortEvent: () => true, //now no need to hold `shift` key to multi-sort
35
+ maxMultiSortColCount: 3, //prevent more than 3 columns from being sorted at once
36
+ initialState: {
37
+ sorting: [
38
+ { id: 'state', desc: false }, //sort by state in ascending order by default
39
+ { id: 'city', desc: true }, //then sort by city in descending order by default
40
+ ],
41
+ },
42
+ renderTopToolbarCustomActions: ({ table }) => (<Button onClick={() => table.resetSorting(true)}>
43
+ Clear All Sorting
44
+ </Button>),
45
+ });
46
+ return <MaterialReactTable table={table}/>;
47
+ };
48
+ export default Example;
@@ -0,0 +1,58 @@
1
+ import {
2
+ MaterialReactTable,
3
+ useMaterialReactTable,
4
+ type MRT_ColumnDef,
5
+ } from 'material-react-table';
6
+ import { data, type Person } from './makeData';
7
+ import { Button } from '@mui/material';
8
+
9
+ const columns: MRT_ColumnDef<Person>[] = [
10
+ {
11
+ accessorKey: 'firstName',
12
+ header: 'First Name',
13
+ sortDescFirst: false, //sort first name in ascending order by default on first sort click (default for non-numeric columns)
14
+ },
15
+ //column definitions...
16
+ {
17
+ accessorKey: 'lastName',
18
+ header: 'Last Name',
19
+ },
20
+ {
21
+ accessorKey: 'city',
22
+ header: 'City',
23
+ },
24
+ {
25
+ accessorKey: 'state',
26
+ header: 'State',
27
+ },
28
+ //end
29
+ {
30
+ accessorKey: 'salary',
31
+ header: 'Salary',
32
+ sortDescFirst: true, //sort salary in descending order by default on first sort click (default for numeric columns)
33
+ },
34
+ ];
35
+
36
+ const Example = () => {
37
+ const table = useMaterialReactTable({
38
+ columns,
39
+ data,
40
+ isMultiSortEvent: () => true, //now no need to hold `shift` key to multi-sort
41
+ maxMultiSortColCount: 3, //prevent more than 3 columns from being sorted at once
42
+ initialState: {
43
+ sorting: [
44
+ { id: 'state', desc: false }, //sort by state in ascending order by default
45
+ { id: 'city', desc: true }, //then sort by city in descending order by default
46
+ ],
47
+ },
48
+ renderTopToolbarCustomActions: ({ table }) => (
49
+ <Button onClick={() => table.resetSorting(true)}>
50
+ Clear All Sorting
51
+ </Button>
52
+ ),
53
+ });
54
+
55
+ return <MaterialReactTable table={table} />;
56
+ };
57
+
58
+ export default Example;
@@ -0,0 +1,126 @@
1
+ import { useEffect, useRef, useState } from 'react';
2
+ import { Button } from '@mui/material';
3
+ import { MaterialReactTable, } from 'material-react-table';
4
+ import { data } from './makeData';
5
+ //column definitions...
6
+ const columns = [
7
+ {
8
+ accessorKey: 'firstName',
9
+ header: 'First Name',
10
+ },
11
+ {
12
+ accessorKey: 'lastName',
13
+ header: 'Last Name',
14
+ },
15
+ {
16
+ accessorKey: 'city',
17
+ header: 'City',
18
+ },
19
+ {
20
+ accessorKey: 'state',
21
+ header: 'State',
22
+ },
23
+ {
24
+ accessorKey: 'salary',
25
+ header: 'Salary',
26
+ },
27
+ ];
28
+ //end
29
+ const Example = () => {
30
+ const isFirstRender = useRef(true);
31
+ const [columnFilters, setColumnFilters] = useState([]);
32
+ const [columnVisibility, setColumnVisibility] = useState({});
33
+ const [density, setDensity] = useState('comfortable');
34
+ const [globalFilter, setGlobalFilter] = useState(undefined);
35
+ const [showGlobalFilter, setShowGlobalFilter] = useState(false);
36
+ const [showColumnFilters, setShowColumnFilters] = useState(false);
37
+ const [sorting, setSorting] = useState([]);
38
+ //load state from local storage
39
+ useEffect(() => {
40
+ const columnFilters = sessionStorage.getItem('mrt_columnFilters_table_1');
41
+ const columnVisibility = sessionStorage.getItem('mrt_columnVisibility_table_1');
42
+ const density = sessionStorage.getItem('mrt_density_table_1');
43
+ const globalFilter = sessionStorage.getItem('mrt_globalFilter_table_1');
44
+ const showGlobalFilter = sessionStorage.getItem('mrt_showGlobalFilter_table_1');
45
+ const showColumnFilters = sessionStorage.getItem('mrt_showColumnFilters_table_1');
46
+ const sorting = sessionStorage.getItem('mrt_sorting_table_1');
47
+ if (columnFilters) {
48
+ setColumnFilters(JSON.parse(columnFilters));
49
+ }
50
+ if (columnVisibility) {
51
+ setColumnVisibility(JSON.parse(columnVisibility));
52
+ }
53
+ if (density) {
54
+ setDensity(JSON.parse(density));
55
+ }
56
+ if (globalFilter) {
57
+ setGlobalFilter(JSON.parse(globalFilter) || undefined);
58
+ }
59
+ if (showGlobalFilter) {
60
+ setShowGlobalFilter(JSON.parse(showGlobalFilter));
61
+ }
62
+ if (showColumnFilters) {
63
+ setShowColumnFilters(JSON.parse(showColumnFilters));
64
+ }
65
+ if (sorting) {
66
+ setSorting(JSON.parse(sorting));
67
+ }
68
+ isFirstRender.current = false;
69
+ }, []);
70
+ //save states to local storage
71
+ useEffect(() => {
72
+ if (isFirstRender.current)
73
+ return;
74
+ sessionStorage.setItem('mrt_columnFilters_table_1', JSON.stringify(columnFilters));
75
+ }, [columnFilters]);
76
+ useEffect(() => {
77
+ if (isFirstRender.current)
78
+ return;
79
+ sessionStorage.setItem('mrt_columnVisibility_table_1', JSON.stringify(columnVisibility));
80
+ }, [columnVisibility]);
81
+ useEffect(() => {
82
+ if (isFirstRender.current)
83
+ return;
84
+ sessionStorage.setItem('mrt_density_table_1', JSON.stringify(density));
85
+ }, [density]);
86
+ useEffect(() => {
87
+ if (isFirstRender.current)
88
+ return;
89
+ sessionStorage.setItem('mrt_globalFilter_table_1', JSON.stringify(globalFilter ?? ''));
90
+ }, [globalFilter]);
91
+ useEffect(() => {
92
+ if (isFirstRender.current)
93
+ return;
94
+ sessionStorage.setItem('mrt_showGlobalFilter_table_1', JSON.stringify(showGlobalFilter));
95
+ }, [showGlobalFilter]);
96
+ useEffect(() => {
97
+ if (isFirstRender.current)
98
+ return;
99
+ sessionStorage.setItem('mrt_showColumnFilters_table_1', JSON.stringify(showColumnFilters));
100
+ }, [showColumnFilters]);
101
+ useEffect(() => {
102
+ if (isFirstRender.current)
103
+ return;
104
+ sessionStorage.setItem('mrt_sorting_table_1', JSON.stringify(sorting));
105
+ }, [sorting]);
106
+ const resetState = () => {
107
+ sessionStorage.removeItem('mrt_columnFilters_table_1');
108
+ sessionStorage.removeItem('mrt_columnVisibility_table_1');
109
+ sessionStorage.removeItem('mrt_density_table_1');
110
+ sessionStorage.removeItem('mrt_globalFilter_table_1');
111
+ sessionStorage.removeItem('mrt_showGlobalFilter_table_1');
112
+ sessionStorage.removeItem('mrt_showColumnFilters_table_1');
113
+ sessionStorage.removeItem('mrt_sorting_table_1');
114
+ window.location.reload();
115
+ };
116
+ return (<MaterialReactTable columns={columns} data={data} onColumnFiltersChange={setColumnFilters} onColumnVisibilityChange={setColumnVisibility} onDensityChange={setDensity} onGlobalFilterChange={setGlobalFilter} onShowColumnFiltersChange={setShowColumnFilters} onShowGlobalFilterChange={setShowGlobalFilter} onSortingChange={setSorting} state={{
117
+ columnFilters,
118
+ columnVisibility,
119
+ density,
120
+ globalFilter,
121
+ showColumnFilters,
122
+ showGlobalFilter,
123
+ sorting,
124
+ }} renderTopToolbarCustomActions={() => (<Button onClick={resetState}>Reset State</Button>)}/>);
125
+ };
126
+ export default Example;