@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,80 @@
1
+ import { useMemo } from 'react';
2
+ import {
3
+ MaterialReactTable,
4
+ useMaterialReactTable,
5
+ type MRT_ColumnDef,
6
+ } from 'material-react-table';
7
+ import { Box, Typography } from '@mui/material';
8
+ import { data, type Person } from './makeData';
9
+
10
+ const Example = () => {
11
+ const columns = useMemo<MRT_ColumnDef<Person>[]>(
12
+ //column definitions...
13
+ () => [
14
+ {
15
+ accessorKey: 'firstName',
16
+ header: 'First Name',
17
+ },
18
+ {
19
+ accessorKey: 'lastName',
20
+ header: 'Last Name',
21
+ },
22
+ {
23
+ accessorKey: 'email',
24
+ header: 'Email',
25
+ },
26
+ ],
27
+ [],
28
+ //end
29
+ );
30
+
31
+ const table = useMaterialReactTable({
32
+ columns,
33
+ data,
34
+ enableBottomToolbar: false,
35
+ enablePagination: false,
36
+ enableRowVirtualization: true,
37
+ muiTableContainerProps: {
38
+ sx: {
39
+ maxHeight: '500px',
40
+ },
41
+ },
42
+ renderDetailPanel: ({ row }) => (
43
+ <Box
44
+ sx={{
45
+ display: 'grid',
46
+ margin: 'auto',
47
+ gridTemplateColumns: '1fr 1fr',
48
+ width: '100%',
49
+ }}
50
+ >
51
+ <Typography>Address: {row.original.address}</Typography>
52
+ <Typography>City: {row.original.city}</Typography>
53
+ <Typography>State: {row.original.state}</Typography>
54
+ <Typography>Country: {row.original.country}</Typography>
55
+ </Box>
56
+ ),
57
+ rowVirtualizerOptions: ({ table }) => {
58
+ const { density, expanded } = table.getState();
59
+ return {
60
+ //adjust to your needs
61
+ estimateSize: (index) =>
62
+ index % 2 === 1 //even rows are normal rows, odd rows are detail panels
63
+ ? //Estimate open detail panels as 80px tall, closed detail panels as 0px tall
64
+ expanded === true
65
+ ? 80
66
+ : 0
67
+ : //estimate normal row heights
68
+ density === 'compact'
69
+ ? 37
70
+ : density === 'comfortable'
71
+ ? 58
72
+ : 73,
73
+ };
74
+ },
75
+ });
76
+
77
+ return <MaterialReactTable table={table} />;
78
+ };
79
+
80
+ export default Example;
@@ -0,0 +1,87 @@
1
+ import { useMemo } from 'react';
2
+ import { MaterialReactTable, useMaterialReactTable, } from 'material-react-table';
3
+ export const data = [
4
+ {
5
+ firstName: 'Dylan',
6
+ lastName: 'Murray',
7
+ address: '261 Erdman Ford',
8
+ city: 'East Daphne',
9
+ state: 'Kentucky',
10
+ subRows: [
11
+ {
12
+ firstName: 'Ervin',
13
+ lastName: 'Reinger',
14
+ address: '566 Brakus Inlet',
15
+ city: 'South Linda',
16
+ state: 'West Virginia',
17
+ subRows: [
18
+ {
19
+ firstName: 'Jordane',
20
+ lastName: 'Homenick',
21
+ address: '1234 Brakus Inlet',
22
+ city: 'South Linda',
23
+ state: 'West Virginia',
24
+ },
25
+ ],
26
+ },
27
+ {
28
+ firstName: 'Brittany',
29
+ lastName: 'McCullough',
30
+ address: '722 Emie Stream',
31
+ city: 'Lincoln',
32
+ state: 'Nebraska',
33
+ },
34
+ ],
35
+ },
36
+ {
37
+ firstName: 'Raquel',
38
+ lastName: 'Kohler',
39
+ address: '769 Dominic Grove',
40
+ city: 'Columbus',
41
+ state: 'Ohio',
42
+ subRows: [
43
+ {
44
+ firstName: 'Branson',
45
+ lastName: 'Frami',
46
+ address: '32188 Larkin Turnpike',
47
+ city: 'Charleston',
48
+ state: 'South Carolina',
49
+ },
50
+ ],
51
+ },
52
+ ];
53
+ const Example = () => {
54
+ const columns = useMemo(
55
+ //column definitions...
56
+ () => [
57
+ {
58
+ accessorKey: 'firstName',
59
+ header: 'First Name',
60
+ },
61
+ {
62
+ accessorKey: 'lastName',
63
+ header: 'Last Name',
64
+ },
65
+ {
66
+ accessorKey: 'address',
67
+ header: 'Address',
68
+ },
69
+ {
70
+ accessorKey: 'city',
71
+ header: 'City',
72
+ },
73
+ {
74
+ accessorKey: 'state',
75
+ enableColumnOrdering: false,
76
+ header: 'State',
77
+ },
78
+ ], []);
79
+ const table = useMaterialReactTable({
80
+ columns,
81
+ data,
82
+ enableExpandAll: false, //hide expand all double arrow in column header
83
+ enableExpanding: true,
84
+ });
85
+ return <MaterialReactTable table={table}/>;
86
+ };
87
+ export default Example;
@@ -0,0 +1,110 @@
1
+ import { useMemo } from 'react';
2
+ import {
3
+ MaterialReactTable,
4
+ useMaterialReactTable,
5
+ type MRT_ColumnDef,
6
+ } from 'material-react-table';
7
+
8
+ export type Person = {
9
+ firstName: string;
10
+ lastName: string;
11
+ address: string;
12
+ city: string;
13
+ state: string;
14
+ subRows?: Person[]; //Each person can have sub rows of more people
15
+ };
16
+
17
+ export const data = [
18
+ {
19
+ firstName: 'Dylan',
20
+ lastName: 'Murray',
21
+ address: '261 Erdman Ford',
22
+ city: 'East Daphne',
23
+ state: 'Kentucky',
24
+ subRows: [
25
+ {
26
+ firstName: 'Ervin',
27
+ lastName: 'Reinger',
28
+ address: '566 Brakus Inlet',
29
+ city: 'South Linda',
30
+ state: 'West Virginia',
31
+ subRows: [
32
+ {
33
+ firstName: 'Jordane',
34
+ lastName: 'Homenick',
35
+ address: '1234 Brakus Inlet',
36
+ city: 'South Linda',
37
+ state: 'West Virginia',
38
+ },
39
+ ],
40
+ },
41
+ {
42
+ firstName: 'Brittany',
43
+ lastName: 'McCullough',
44
+ address: '722 Emie Stream',
45
+ city: 'Lincoln',
46
+ state: 'Nebraska',
47
+ },
48
+ ],
49
+ },
50
+ {
51
+ firstName: 'Raquel',
52
+ lastName: 'Kohler',
53
+ address: '769 Dominic Grove',
54
+ city: 'Columbus',
55
+ state: 'Ohio',
56
+ subRows: [
57
+ {
58
+ firstName: 'Branson',
59
+ lastName: 'Frami',
60
+ address: '32188 Larkin Turnpike',
61
+ city: 'Charleston',
62
+ state: 'South Carolina',
63
+ },
64
+ ],
65
+ },
66
+ ];
67
+
68
+ const Example = () => {
69
+ const columns = useMemo<MRT_ColumnDef<Person>[]>(
70
+ //column definitions...
71
+ () => [
72
+ {
73
+ accessorKey: 'firstName',
74
+ header: 'First Name',
75
+ },
76
+ {
77
+ accessorKey: 'lastName',
78
+ header: 'Last Name',
79
+ },
80
+
81
+ {
82
+ accessorKey: 'address',
83
+ header: 'Address',
84
+ },
85
+ {
86
+ accessorKey: 'city',
87
+ header: 'City',
88
+ },
89
+
90
+ {
91
+ accessorKey: 'state',
92
+ enableColumnOrdering: false,
93
+ header: 'State',
94
+ },
95
+ ],
96
+ [],
97
+ //end
98
+ );
99
+
100
+ const table = useMaterialReactTable({
101
+ columns,
102
+ data,
103
+ enableExpandAll: false, //hide expand all double arrow in column header
104
+ enableExpanding: true,
105
+ });
106
+
107
+ return <MaterialReactTable table={table} />;
108
+ };
109
+
110
+ export default Example;
@@ -0,0 +1,52 @@
1
+ import { useMemo } from 'react';
2
+ import { MaterialReactTable, useMaterialReactTable, } from 'material-react-table';
3
+ import { data } from './makeData';
4
+ const Example = () => {
5
+ const columns = useMemo(() => [
6
+ {
7
+ accessorKey: 'name',
8
+ header: 'Name',
9
+ filterVariant: 'autocomplete', // default
10
+ size: 100,
11
+ },
12
+ {
13
+ accessorKey: 'salary',
14
+ header: 'Salary',
15
+ Cell: ({ cell }) => cell.getValue().toLocaleString('en-US', {
16
+ style: 'currency',
17
+ currency: 'USD',
18
+ }),
19
+ filterVariant: 'range-slider',
20
+ filterFn: 'betweenInclusive', // default (or between)
21
+ muiFilterSliderProps: {
22
+ //no need to specify min/max/step if using faceted values
23
+ marks: true,
24
+ step: 5000,
25
+ valueLabelFormat: (value) => value.toLocaleString('en-US', {
26
+ style: 'currency',
27
+ currency: 'USD',
28
+ }),
29
+ },
30
+ },
31
+ {
32
+ accessorKey: 'city',
33
+ header: 'City',
34
+ filterVariant: 'select',
35
+ //no need to specify filterSelectOptions if using faceted values
36
+ },
37
+ {
38
+ accessorKey: 'state',
39
+ header: 'State',
40
+ filterVariant: 'multi-select',
41
+ //no need to specify filterSelectOptions if using faceted values
42
+ },
43
+ ], []);
44
+ const table = useMaterialReactTable({
45
+ columns,
46
+ data,
47
+ enableFacetedValues: true,
48
+ initialState: { showColumnFilters: true },
49
+ });
50
+ return <MaterialReactTable table={table}/>;
51
+ };
52
+ export default Example;
@@ -0,0 +1,65 @@
1
+ import { useMemo } from 'react';
2
+ import {
3
+ MaterialReactTable,
4
+ useMaterialReactTable,
5
+ type MRT_ColumnDef,
6
+ } from 'material-react-table';
7
+ import { data, type Person } from './makeData';
8
+
9
+ const Example = () => {
10
+ const columns = useMemo<MRT_ColumnDef<Person>[]>(
11
+ () => [
12
+ {
13
+ accessorKey: 'name',
14
+ header: 'Name',
15
+ filterVariant: 'autocomplete', // default
16
+ size: 100,
17
+ },
18
+ {
19
+ accessorKey: 'salary',
20
+ header: 'Salary',
21
+ Cell: ({ cell }) =>
22
+ cell.getValue<number>().toLocaleString('en-US', {
23
+ style: 'currency',
24
+ currency: 'USD',
25
+ }),
26
+ filterVariant: 'range-slider',
27
+ filterFn: 'betweenInclusive', // default (or between)
28
+ muiFilterSliderProps: {
29
+ //no need to specify min/max/step if using faceted values
30
+ marks: true,
31
+ step: 5_000,
32
+ valueLabelFormat: (value) =>
33
+ value.toLocaleString('en-US', {
34
+ style: 'currency',
35
+ currency: 'USD',
36
+ }),
37
+ },
38
+ },
39
+ {
40
+ accessorKey: 'city',
41
+ header: 'City',
42
+ filterVariant: 'select',
43
+ //no need to specify filterSelectOptions if using faceted values
44
+ },
45
+ {
46
+ accessorKey: 'state',
47
+ header: 'State',
48
+ filterVariant: 'multi-select',
49
+ //no need to specify filterSelectOptions if using faceted values
50
+ },
51
+ ],
52
+ [],
53
+ );
54
+
55
+ const table = useMaterialReactTable({
56
+ columns,
57
+ data,
58
+ enableFacetedValues: true,
59
+ initialState: { showColumnFilters: true },
60
+ });
61
+
62
+ return <MaterialReactTable table={table} />;
63
+ };
64
+
65
+ export default Example;
@@ -0,0 +1,102 @@
1
+ import { useMemo, useState } from 'react';
2
+ import { MaterialReactTable, useMaterialReactTable, } from 'material-react-table';
3
+ import { Box, Typography } from '@mui/material';
4
+ import { data } from './makeData';
5
+ const Example = () => {
6
+ const columns = useMemo(
7
+ //column definitions...
8
+ () => [
9
+ {
10
+ accessorKey: 'firstName',
11
+ header: 'First Name',
12
+ },
13
+ {
14
+ accessorKey: 'lastName',
15
+ header: 'Last Name',
16
+ },
17
+ {
18
+ accessorKey: 'city',
19
+ header: 'City',
20
+ },
21
+ ], []);
22
+ const [data1, setData1] = useState(() => data.slice(0, 3));
23
+ const [data2, setData2] = useState(() => data.slice(3, 5));
24
+ const [draggingRow, setDraggingRow] = useState(null);
25
+ const [hoveredTable, setHoveredTable] = useState(null);
26
+ const commonTableProps = {
27
+ columns,
28
+ enableRowDragging: true,
29
+ enableFullScreenToggle: false,
30
+ muiTableContainerProps: {
31
+ sx: {
32
+ minHeight: '320px',
33
+ },
34
+ },
35
+ onDraggingRowChange: setDraggingRow,
36
+ state: { draggingRow },
37
+ };
38
+ const table1 = useMaterialReactTable({
39
+ ...commonTableProps,
40
+ data: data1,
41
+ getRowId: (originalRow) => `table-1-${originalRow.firstName}`,
42
+ muiRowDragHandleProps: {
43
+ onDragEnd: () => {
44
+ if (hoveredTable === 'table-2') {
45
+ setData2((data2) => [...data2, draggingRow.original]);
46
+ setData1((data1) => data1.filter((d) => d !== draggingRow.original));
47
+ }
48
+ setHoveredTable(null);
49
+ },
50
+ },
51
+ muiTablePaperProps: {
52
+ onDragEnter: () => setHoveredTable('table-1'),
53
+ sx: {
54
+ outline: hoveredTable === 'table-1' ? '2px dashed pink' : undefined,
55
+ },
56
+ },
57
+ renderTopToolbarCustomActions: () => (<Typography component="span" variant="h4" sx={{
58
+ color: 'success.main',
59
+ }}>
60
+ Nice List
61
+ </Typography>),
62
+ });
63
+ const table2 = useMaterialReactTable({
64
+ ...commonTableProps,
65
+ data: data2,
66
+ defaultColumn: {
67
+ size: 100,
68
+ },
69
+ getRowId: (originalRow) => `table-2-${originalRow.firstName}`,
70
+ muiRowDragHandleProps: {
71
+ onDragEnd: () => {
72
+ if (hoveredTable === 'table-1') {
73
+ setData1((data1) => [...data1, draggingRow.original]);
74
+ setData2((data2) => data2.filter((d) => d !== draggingRow.original));
75
+ }
76
+ setHoveredTable(null);
77
+ },
78
+ },
79
+ muiTablePaperProps: {
80
+ onDragEnter: () => setHoveredTable('table-2'),
81
+ sx: {
82
+ outline: hoveredTable === 'table-2' ? '2px dashed pink' : undefined,
83
+ },
84
+ },
85
+ renderTopToolbarCustomActions: () => (<Typography component="span" variant="h4" sx={{
86
+ color: 'error.main',
87
+ }}>
88
+ Naughty List
89
+ </Typography>),
90
+ });
91
+ return (<Box sx={{
92
+ display: 'grid',
93
+ gridTemplateColumns: { xs: 'auto', lg: '1fr 1fr' },
94
+ gap: '1rem',
95
+ overflow: 'auto',
96
+ p: '4px',
97
+ }}>
98
+ <MaterialReactTable table={table1}/>
99
+ <MaterialReactTable table={table2}/>
100
+ </Box>);
101
+ };
102
+ export default Example;
@@ -0,0 +1,137 @@
1
+ import { useMemo, useState } from 'react';
2
+ import {
3
+ type MRT_TableOptions,
4
+ type MRT_ColumnDef,
5
+ type MRT_Row,
6
+ MaterialReactTable,
7
+ useMaterialReactTable,
8
+ } from 'material-react-table';
9
+ import { Box, Typography } from '@mui/material';
10
+ import { data, type Person } from './makeData';
11
+
12
+ const Example = () => {
13
+ const columns = useMemo<MRT_ColumnDef<Person>[]>(
14
+ //column definitions...
15
+ () => [
16
+ {
17
+ accessorKey: 'firstName',
18
+ header: 'First Name',
19
+ },
20
+ {
21
+ accessorKey: 'lastName',
22
+ header: 'Last Name',
23
+ },
24
+ {
25
+ accessorKey: 'city',
26
+ header: 'City',
27
+ },
28
+ ],
29
+ [],
30
+ //end
31
+ );
32
+
33
+ const [data1, setData1] = useState<Person[]>(() => data.slice(0, 3));
34
+ const [data2, setData2] = useState<Person[]>(() => data.slice(3, 5));
35
+
36
+ const [draggingRow, setDraggingRow] = useState<MRT_Row<Person> | null>(null);
37
+ const [hoveredTable, setHoveredTable] = useState<string | null>(null);
38
+
39
+ const commonTableProps: Partial<MRT_TableOptions<Person>> & {
40
+ columns: MRT_ColumnDef<Person>[];
41
+ } = {
42
+ columns,
43
+ enableRowDragging: true,
44
+ enableFullScreenToggle: false,
45
+ muiTableContainerProps: {
46
+ sx: {
47
+ minHeight: '320px',
48
+ },
49
+ },
50
+ onDraggingRowChange: setDraggingRow,
51
+ state: { draggingRow },
52
+ };
53
+
54
+ const table1 = useMaterialReactTable({
55
+ ...commonTableProps,
56
+ data: data1,
57
+ getRowId: (originalRow) => `table-1-${originalRow.firstName}`,
58
+ muiRowDragHandleProps: {
59
+ onDragEnd: () => {
60
+ if (hoveredTable === 'table-2') {
61
+ setData2((data2) => [...data2, draggingRow!.original]);
62
+ setData1((data1) => data1.filter((d) => d !== draggingRow!.original));
63
+ }
64
+ setHoveredTable(null);
65
+ },
66
+ },
67
+ muiTablePaperProps: {
68
+ onDragEnter: () => setHoveredTable('table-1'),
69
+ sx: {
70
+ outline: hoveredTable === 'table-1' ? '2px dashed pink' : undefined,
71
+ },
72
+ },
73
+ renderTopToolbarCustomActions: () => (
74
+ <Typography
75
+ component="span"
76
+ variant="h4"
77
+ sx={{
78
+ color: 'success.main',
79
+ }}
80
+ >
81
+ Nice List
82
+ </Typography>
83
+ ),
84
+ });
85
+
86
+ const table2 = useMaterialReactTable({
87
+ ...commonTableProps,
88
+ data: data2,
89
+ defaultColumn: {
90
+ size: 100,
91
+ },
92
+ getRowId: (originalRow) => `table-2-${originalRow.firstName}`,
93
+ muiRowDragHandleProps: {
94
+ onDragEnd: () => {
95
+ if (hoveredTable === 'table-1') {
96
+ setData1((data1) => [...data1, draggingRow!.original]);
97
+ setData2((data2) => data2.filter((d) => d !== draggingRow!.original));
98
+ }
99
+ setHoveredTable(null);
100
+ },
101
+ },
102
+ muiTablePaperProps: {
103
+ onDragEnter: () => setHoveredTable('table-2'),
104
+ sx: {
105
+ outline: hoveredTable === 'table-2' ? '2px dashed pink' : undefined,
106
+ },
107
+ },
108
+ renderTopToolbarCustomActions: () => (
109
+ <Typography
110
+ component="span"
111
+ variant="h4"
112
+ sx={{
113
+ color: 'error.main',
114
+ }}
115
+ >
116
+ Naughty List
117
+ </Typography>
118
+ ),
119
+ });
120
+
121
+ return (
122
+ <Box
123
+ sx={{
124
+ display: 'grid',
125
+ gridTemplateColumns: { xs: 'auto', lg: '1fr 1fr' },
126
+ gap: '1rem',
127
+ overflow: 'auto',
128
+ p: '4px',
129
+ }}
130
+ >
131
+ <MaterialReactTable table={table1} />
132
+ <MaterialReactTable table={table2} />
133
+ </Box>
134
+ );
135
+ };
136
+
137
+ export default Example;
@@ -0,0 +1,37 @@
1
+ import { useMemo } from 'react';
2
+ import { MaterialReactTable, useMaterialReactTable, } from 'material-react-table';
3
+ import { data } from './makeData';
4
+ const Example = () => {
5
+ const columns = useMemo(
6
+ //column definitions...
7
+ () => [
8
+ {
9
+ accessorKey: 'firstName',
10
+ header: 'First Name',
11
+ },
12
+ {
13
+ accessorKey: 'lastName',
14
+ header: 'Last Name',
15
+ },
16
+ {
17
+ accessorKey: 'address',
18
+ header: 'Address',
19
+ },
20
+ {
21
+ accessorKey: 'city',
22
+ header: 'City',
23
+ },
24
+ {
25
+ accessorKey: 'state',
26
+ header: 'State',
27
+ },
28
+ ], []);
29
+ const table = useMaterialReactTable({
30
+ columns,
31
+ data,
32
+ enableRowNumbers: true,
33
+ rowNumberDisplayMode: 'original',
34
+ });
35
+ return <MaterialReactTable table={table}/>;
36
+ };
37
+ export default Example;