@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,85 @@
1
+ import { useMemo } from 'react';
2
+ import { Box, Button } from '@mui/material';
3
+ import {
4
+ MaterialReactTable,
5
+ useMaterialReactTable,
6
+ type MRT_ColumnDef,
7
+ } from 'material-react-table';
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: 'address',
24
+ header: 'Address',
25
+ },
26
+ {
27
+ accessorKey: 'city',
28
+ header: 'City',
29
+ },
30
+ {
31
+ accessorKey: 'state',
32
+ header: 'State',
33
+ },
34
+ ],
35
+ [],
36
+ //end
37
+ );
38
+
39
+ const table = useMaterialReactTable({
40
+ columns,
41
+ data,
42
+ defaultDisplayColumn: {
43
+ enableResizing: true, //turn on some features that are usually off for all display columns
44
+ },
45
+ displayColumnDefOptions: {
46
+ 'mrt-row-actions': {
47
+ size: 350, //set custom width
48
+ muiTableHeadCellProps: {
49
+ align: 'center', //change head cell props
50
+ },
51
+ },
52
+ 'mrt-row-numbers': {
53
+ enableColumnDragging: true,
54
+ enableColumnOrdering: true, //turn on some features that are usually off
55
+ enableResizing: true,
56
+ muiTableHeadCellProps: {
57
+ sx: {
58
+ fontSize: '1.2rem',
59
+ },
60
+ },
61
+ },
62
+ 'mrt-row-select': {
63
+ enableColumnActions: true,
64
+ enableHiding: true,
65
+ size: 100,
66
+ },
67
+ },
68
+ enableColumnResizing: true,
69
+ enableColumnOrdering: true,
70
+ enableRowNumbers: true,
71
+ enableRowSelection: true,
72
+ enableRowActions: true,
73
+ renderRowActions: ({ row }) => (
74
+ <Box sx={{ display: 'flex', gap: '1rem' }}>
75
+ <Button>Button 1</Button>
76
+ <Button>Button 2</Button>
77
+ <Button>Button 3</Button>
78
+ </Box>
79
+ ),
80
+ });
81
+
82
+ return <MaterialReactTable table={table} />;
83
+ };
84
+
85
+ export default Example;
@@ -0,0 +1,78 @@
1
+ import { useMemo } from 'react';
2
+ import { MaterialReactTable, useMaterialReactTable, } from 'material-react-table';
3
+ const Example = () => {
4
+ const columns = useMemo(() => [
5
+ {
6
+ accessorKey: 'id',
7
+ header: 'ID',
8
+ muiFilterTextFieldProps: { placeholder: 'ID' },
9
+ },
10
+ {
11
+ accessorKey: 'firstName',
12
+ header: 'First Name',
13
+ },
14
+ {
15
+ accessorKey: 'lastName',
16
+ header: 'Last Name',
17
+ },
18
+ {
19
+ accessorKey: 'gender',
20
+ header: 'Gender',
21
+ filterFn: 'equals',
22
+ filterSelectOptions: [
23
+ { label: 'Male', value: 'Male' },
24
+ { label: 'Female', value: 'Female' },
25
+ { label: 'Other', value: 'Other' },
26
+ ],
27
+ filterVariant: 'select',
28
+ },
29
+ {
30
+ accessorKey: 'age',
31
+ header: 'Age',
32
+ filterVariant: 'range',
33
+ },
34
+ ], []);
35
+ const data = useMemo(
36
+ //data definitions...
37
+ () => [
38
+ {
39
+ id: 1,
40
+ firstName: 'Hugh',
41
+ lastName: 'Mungus',
42
+ gender: 'Male',
43
+ age: 42,
44
+ },
45
+ {
46
+ id: 2,
47
+ firstName: 'Leroy',
48
+ lastName: 'Jenkins',
49
+ gender: 'Male',
50
+ age: 51,
51
+ },
52
+ {
53
+ id: 3,
54
+ firstName: 'Candice',
55
+ lastName: 'Nutella',
56
+ gender: 'Female',
57
+ age: 27,
58
+ },
59
+ {
60
+ id: 4,
61
+ firstName: 'Micah',
62
+ lastName: 'Johnson',
63
+ gender: 'Other',
64
+ age: 32,
65
+ },
66
+ ], []);
67
+ const table = useMaterialReactTable({
68
+ columns,
69
+ data,
70
+ initialState: { showColumnFilters: true },
71
+ muiFilterTextFieldProps: {
72
+ sx: { m: '0.5rem 0', width: '100%' },
73
+ variant: 'outlined',
74
+ },
75
+ });
76
+ return <MaterialReactTable table={table}/>;
77
+ };
78
+ export default Example;
@@ -0,0 +1,101 @@
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
+ id: number;
10
+ firstName: string;
11
+ lastName: string;
12
+ gender: string;
13
+ age: number;
14
+ };
15
+
16
+ const Example = () => {
17
+ const columns = useMemo<MRT_ColumnDef<Person>[]>(
18
+ () => [
19
+ {
20
+ accessorKey: 'id',
21
+ header: 'ID',
22
+ muiFilterTextFieldProps: { placeholder: 'ID' },
23
+ },
24
+ {
25
+ accessorKey: 'firstName',
26
+ header: 'First Name',
27
+ },
28
+ {
29
+ accessorKey: 'lastName',
30
+ header: 'Last Name',
31
+ },
32
+ {
33
+ accessorKey: 'gender',
34
+ header: 'Gender',
35
+ filterFn: 'equals',
36
+ filterSelectOptions: [
37
+ { label: 'Male', value: 'Male' },
38
+ { label: 'Female', value: 'Female' },
39
+ { label: 'Other', value: 'Other' },
40
+ ],
41
+ filterVariant: 'select',
42
+ },
43
+ {
44
+ accessorKey: 'age',
45
+ header: 'Age',
46
+ filterVariant: 'range',
47
+ },
48
+ ],
49
+ [],
50
+ );
51
+
52
+ const data = useMemo<Person[]>(
53
+ //data definitions...
54
+ () => [
55
+ {
56
+ id: 1,
57
+ firstName: 'Hugh',
58
+ lastName: 'Mungus',
59
+ gender: 'Male',
60
+ age: 42,
61
+ },
62
+ {
63
+ id: 2,
64
+ firstName: 'Leroy',
65
+ lastName: 'Jenkins',
66
+ gender: 'Male',
67
+ age: 51,
68
+ },
69
+ {
70
+ id: 3,
71
+ firstName: 'Candice',
72
+ lastName: 'Nutella',
73
+ gender: 'Female',
74
+ age: 27,
75
+ },
76
+ {
77
+ id: 4,
78
+ firstName: 'Micah',
79
+ lastName: 'Johnson',
80
+ gender: 'Other',
81
+ age: 32,
82
+ },
83
+ ],
84
+ [],
85
+ //end
86
+ );
87
+
88
+ const table = useMaterialReactTable({
89
+ columns,
90
+ data,
91
+ initialState: { showColumnFilters: true },
92
+ muiFilterTextFieldProps: {
93
+ sx: { m: '0.5rem 0', width: '100%' },
94
+ variant: 'outlined',
95
+ },
96
+ });
97
+
98
+ return <MaterialReactTable table={table} />;
99
+ };
100
+
101
+ export default Example;
@@ -0,0 +1,59 @@
1
+ import { useMemo } from 'react';
2
+ import { MaterialReactTable, useMaterialReactTable, } from 'material-react-table';
3
+ import { MenuItem } from '@mui/material';
4
+ import { data } from './makeData';
5
+ const Example = () => {
6
+ const columns = useMemo(() => [
7
+ {
8
+ accessorKey: 'id',
9
+ enableColumnFilterModes: false, //disable changing filter mode for this column
10
+ filterFn: 'equals', //set filter mode to equals
11
+ header: 'ID',
12
+ },
13
+ {
14
+ accessorKey: 'firstName', //normal, all filter modes are enabled
15
+ header: 'First Name',
16
+ },
17
+ {
18
+ accessorKey: 'middleName',
19
+ enableColumnFilterModes: false, //disable changing filter mode for this column
20
+ filterFn: 'startsWith', //even though changing the mode is disabled, you can still set the default filter mode
21
+ header: 'Middle Name',
22
+ },
23
+ {
24
+ accessorKey: 'lastName',
25
+ header: 'Last Name',
26
+ //if you do not want to use the default filter modes, you can provide your own and render your own menu
27
+ renderColumnFilterModeMenuItems: ({ onSelectFilterMode }) => [
28
+ <MenuItem key="0" onClick={() => onSelectFilterMode('contains')}>
29
+ <div>Contains</div>
30
+ </MenuItem>,
31
+ <MenuItem key="1" onClick={() => onSelectFilterMode('customFilterFn')}>
32
+ <div>Custom Filter Fn</div>
33
+ </MenuItem>,
34
+ ],
35
+ },
36
+ {
37
+ accessorKey: 'age',
38
+ columnFilterModeOptions: ['between', 'greaterThan', 'lessThan'], //only allow these filter modes
39
+ filterFn: 'between',
40
+ header: 'Age',
41
+ },
42
+ ], []);
43
+ const table = useMaterialReactTable({
44
+ columns,
45
+ data,
46
+ enableColumnFilterModes: true, //enable changing filter mode for all columns unless explicitly disabled in a column def
47
+ initialState: { showColumnFilters: true }, //show filters by default
48
+ filterFns: {
49
+ customFilterFn: (row, id, filterValue) => {
50
+ return row.getValue(id) === filterValue;
51
+ },
52
+ },
53
+ localization: {
54
+ filterCustomFilterFn: 'Custom Filter Fn',
55
+ },
56
+ });
57
+ return <MaterialReactTable table={table}/>;
58
+ };
59
+ export default Example;
@@ -0,0 +1,73 @@
1
+ import { useMemo } from 'react';
2
+ import {
3
+ MaterialReactTable,
4
+ useMaterialReactTable,
5
+ type MRT_ColumnDef,
6
+ } from 'material-react-table';
7
+ import { MenuItem } from '@mui/material';
8
+ import { data, type Person } from './makeData';
9
+
10
+ const Example = () => {
11
+ const columns = useMemo<MRT_ColumnDef<Person>[]>(
12
+ () => [
13
+ {
14
+ accessorKey: 'id',
15
+ enableColumnFilterModes: false, //disable changing filter mode for this column
16
+ filterFn: 'equals', //set filter mode to equals
17
+ header: 'ID',
18
+ },
19
+ {
20
+ accessorKey: 'firstName', //normal, all filter modes are enabled
21
+ header: 'First Name',
22
+ },
23
+ {
24
+ accessorKey: 'middleName',
25
+ enableColumnFilterModes: false, //disable changing filter mode for this column
26
+ filterFn: 'startsWith', //even though changing the mode is disabled, you can still set the default filter mode
27
+ header: 'Middle Name',
28
+ },
29
+ {
30
+ accessorKey: 'lastName',
31
+ header: 'Last Name',
32
+ //if you do not want to use the default filter modes, you can provide your own and render your own menu
33
+ renderColumnFilterModeMenuItems: ({ onSelectFilterMode }) => [
34
+ <MenuItem key="0" onClick={() => onSelectFilterMode('contains')}>
35
+ <div>Contains</div>
36
+ </MenuItem>,
37
+ <MenuItem
38
+ key="1"
39
+ onClick={() => onSelectFilterMode('customFilterFn')}
40
+ >
41
+ <div>Custom Filter Fn</div>
42
+ </MenuItem>,
43
+ ],
44
+ },
45
+ {
46
+ accessorKey: 'age',
47
+ columnFilterModeOptions: ['between', 'greaterThan', 'lessThan'], //only allow these filter modes
48
+ filterFn: 'between',
49
+ header: 'Age',
50
+ },
51
+ ],
52
+ [],
53
+ );
54
+
55
+ const table = useMaterialReactTable({
56
+ columns,
57
+ data,
58
+ enableColumnFilterModes: true, //enable changing filter mode for all columns unless explicitly disabled in a column def
59
+ initialState: { showColumnFilters: true }, //show filters by default
60
+ filterFns: {
61
+ customFilterFn: (row, id, filterValue) => {
62
+ return row.getValue(id) === filterValue;
63
+ },
64
+ },
65
+ localization: {
66
+ filterCustomFilterFn: 'Custom Filter Fn',
67
+ } as any,
68
+ });
69
+
70
+ return <MaterialReactTable table={table} />;
71
+ };
72
+
73
+ export default Example;
@@ -0,0 +1,98 @@
1
+ import { useMemo } from 'react';
2
+ import { MaterialReactTable, useMaterialReactTable, } from 'material-react-table';
3
+ import { citiesList, data, usStateList } from './makeData';
4
+ const Example = () => {
5
+ const columns = useMemo(() => [
6
+ {
7
+ header: 'Status',
8
+ accessorFn: (originalRow) => (originalRow.isActive ? 'true' : 'false'), //must be strings
9
+ id: 'isActive',
10
+ filterVariant: 'checkbox',
11
+ Cell: ({ cell }) => cell.getValue() === 'true' ? 'Active' : 'Inactive',
12
+ size: 170,
13
+ },
14
+ {
15
+ accessorKey: 'name',
16
+ header: 'Name',
17
+ filterVariant: 'text', // default
18
+ size: 200,
19
+ },
20
+ {
21
+ accessorKey: 'salary',
22
+ header: 'Salary',
23
+ Cell: ({ cell }) => cell.getValue().toLocaleString('en-US', {
24
+ style: 'currency',
25
+ currency: 'USD',
26
+ }),
27
+ filterVariant: 'range-slider',
28
+ filterFn: 'betweenInclusive', // default (or between)
29
+ muiFilterSliderProps: {
30
+ marks: true,
31
+ max: 200000, //custom max (as opposed to faceted max)
32
+ min: 30000, //custom min (as opposed to faceted min)
33
+ step: 10000,
34
+ valueLabelFormat: (value) => value.toLocaleString('en-US', {
35
+ style: 'currency',
36
+ currency: 'USD',
37
+ }),
38
+ },
39
+ },
40
+ {
41
+ accessorKey: 'age',
42
+ header: 'Age',
43
+ filterVariant: 'range',
44
+ filterFn: 'between',
45
+ size: 80,
46
+ },
47
+ {
48
+ accessorKey: 'city',
49
+ header: 'City',
50
+ filterVariant: 'select',
51
+ filterSelectOptions: citiesList, //custom options list (as opposed to faceted list)
52
+ },
53
+ {
54
+ accessorKey: 'state',
55
+ header: 'State',
56
+ filterVariant: 'multi-select',
57
+ filterSelectOptions: usStateList, //custom options list (as opposed to faceted list)
58
+ },
59
+ {
60
+ accessorFn: (originalRow) => new Date(originalRow.hireDate), //convert to date for sorting and filtering
61
+ id: 'hireDate',
62
+ header: 'Hire Date',
63
+ filterVariant: 'date-range',
64
+ Cell: ({ cell }) => cell.getValue().toLocaleDateString(), // convert back to string for display
65
+ },
66
+ {
67
+ accessorFn: (originalRow) => new Date(originalRow.arrivalTime), //convert to date for sorting and filtering
68
+ id: 'arrivalTime',
69
+ header: 'Arrival Time',
70
+ filterVariant: 'datetime-range',
71
+ Cell: ({ cell }) => `${cell.getValue().toLocaleDateString()} ${cell
72
+ .getValue()
73
+ .toLocaleTimeString()}`, // convert back to string for display
74
+ },
75
+ {
76
+ accessorFn: (originalRow) => new Date(originalRow.departureTime), //convert to date for sorting and filtering
77
+ id: 'departureTime',
78
+ header: 'Departure Time',
79
+ filterVariant: 'time-range',
80
+ Cell: ({ cell }) => cell.getValue().toLocaleTimeString(), // convert back to string for display
81
+ },
82
+ ], []);
83
+ const table = useMaterialReactTable({
84
+ columns,
85
+ data,
86
+ initialState: { showColumnFilters: true },
87
+ });
88
+ return <MaterialReactTable table={table}/>;
89
+ };
90
+ //Date Picker Imports - these should just be in your Context Provider
91
+ import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
92
+ import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
93
+ const ExampleWithLocalizationProvider = () => (
94
+ //App.tsx or AppProviders file
95
+ <LocalizationProvider dateAdapter={AdapterDayjs}>
96
+ <Example />
97
+ </LocalizationProvider>);
98
+ export default ExampleWithLocalizationProvider;
@@ -0,0 +1,116 @@
1
+ import { useMemo } from 'react';
2
+ import {
3
+ MaterialReactTable,
4
+ useMaterialReactTable,
5
+ type MRT_ColumnDef,
6
+ } from 'material-react-table';
7
+ import { citiesList, data, type Person, usStateList } from './makeData';
8
+
9
+ const Example = () => {
10
+ const columns = useMemo<MRT_ColumnDef<Person>[]>(
11
+ () => [
12
+ {
13
+ header: 'Status',
14
+ accessorFn: (originalRow) => (originalRow.isActive ? 'true' : 'false'), //must be strings
15
+ id: 'isActive',
16
+ filterVariant: 'checkbox',
17
+ Cell: ({ cell }) =>
18
+ cell.getValue() === 'true' ? 'Active' : 'Inactive',
19
+ size: 170,
20
+ },
21
+ {
22
+ accessorKey: 'name',
23
+ header: 'Name',
24
+ filterVariant: 'text', // default
25
+ size: 200,
26
+ },
27
+ {
28
+ accessorKey: 'salary',
29
+ header: 'Salary',
30
+ Cell: ({ cell }) =>
31
+ cell.getValue<number>().toLocaleString('en-US', {
32
+ style: 'currency',
33
+ currency: 'USD',
34
+ }),
35
+ filterVariant: 'range-slider',
36
+ filterFn: 'betweenInclusive', // default (or between)
37
+ muiFilterSliderProps: {
38
+ marks: true,
39
+ max: 200_000, //custom max (as opposed to faceted max)
40
+ min: 30_000, //custom min (as opposed to faceted min)
41
+ step: 10_000,
42
+ valueLabelFormat: (value) =>
43
+ value.toLocaleString('en-US', {
44
+ style: 'currency',
45
+ currency: 'USD',
46
+ }),
47
+ },
48
+ },
49
+ {
50
+ accessorKey: 'age',
51
+ header: 'Age',
52
+ filterVariant: 'range',
53
+ filterFn: 'between',
54
+ size: 80,
55
+ },
56
+ {
57
+ accessorKey: 'city',
58
+ header: 'City',
59
+ filterVariant: 'select',
60
+ filterSelectOptions: citiesList, //custom options list (as opposed to faceted list)
61
+ },
62
+ {
63
+ accessorKey: 'state',
64
+ header: 'State',
65
+ filterVariant: 'multi-select',
66
+ filterSelectOptions: usStateList, //custom options list (as opposed to faceted list)
67
+ },
68
+ {
69
+ accessorFn: (originalRow) => new Date(originalRow.hireDate), //convert to date for sorting and filtering
70
+ id: 'hireDate',
71
+ header: 'Hire Date',
72
+ filterVariant: 'date-range',
73
+ Cell: ({ cell }) => cell.getValue<Date>().toLocaleDateString(), // convert back to string for display
74
+ },
75
+ {
76
+ accessorFn: (originalRow) => new Date(originalRow.arrivalTime), //convert to date for sorting and filtering
77
+ id: 'arrivalTime',
78
+ header: 'Arrival Time',
79
+ filterVariant: 'datetime-range',
80
+ Cell: ({ cell }) =>
81
+ `${cell.getValue<Date>().toLocaleDateString()} ${cell
82
+ .getValue<Date>()
83
+ .toLocaleTimeString()}`, // convert back to string for display
84
+ },
85
+ {
86
+ accessorFn: (originalRow) => new Date(originalRow.departureTime), //convert to date for sorting and filtering
87
+ id: 'departureTime',
88
+ header: 'Departure Time',
89
+ filterVariant: 'time-range',
90
+ Cell: ({ cell }) => cell.getValue<Date>().toLocaleTimeString(), // convert back to string for display
91
+ },
92
+ ],
93
+ [],
94
+ );
95
+
96
+ const table = useMaterialReactTable({
97
+ columns,
98
+ data,
99
+ initialState: { showColumnFilters: true },
100
+ });
101
+
102
+ return <MaterialReactTable table={table} />;
103
+ };
104
+
105
+ //Date Picker Imports - these should just be in your Context Provider
106
+ import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
107
+ import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
108
+
109
+ const ExampleWithLocalizationProvider = () => (
110
+ //App.tsx or AppProviders file
111
+ <LocalizationProvider dateAdapter={AdapterDayjs}>
112
+ <Example />
113
+ </LocalizationProvider>
114
+ );
115
+
116
+ export default ExampleWithLocalizationProvider;
@@ -0,0 +1,37 @@
1
+ import { useMemo } from 'react';
2
+ import { MaterialReactTable } from 'material-react-table';
3
+ import { data } from './makeData';
4
+ const Example = () => {
5
+ const columns = useMemo(
6
+ //column definitions...
7
+ () => [
8
+ {
9
+ accessorKey: 'id',
10
+ header: 'ID',
11
+ },
12
+ {
13
+ accessorKey: 'firstName',
14
+ header: 'First Name',
15
+ },
16
+ {
17
+ accessorKey: 'middleName',
18
+ header: 'Middle Name',
19
+ },
20
+ {
21
+ accessorKey: 'lastName',
22
+ header: 'Last Name',
23
+ },
24
+ {
25
+ accessorKey: 'age',
26
+ header: 'Age',
27
+ },
28
+ ], []);
29
+ return (<MaterialReactTable columns={columns} data={data} enableGlobalFilterModes initialState={{
30
+ showGlobalFilter: true,
31
+ }} positionGlobalFilter="left" muiSearchTextFieldProps={{
32
+ placeholder: `Search ${data.length} rows`,
33
+ sx: { minWidth: '300px' },
34
+ variant: 'outlined',
35
+ }}/>);
36
+ };
37
+ export default Example;