material-react-table 0.1.0 → 0.3.2

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 (102) hide show
  1. package/README.md +32 -162
  2. package/dist/MaterialReactTable.d.ts +62 -26
  3. package/dist/{MRT_TableBody.d.ts → body/MRT_TableBody.d.ts} +0 -0
  4. package/dist/{MRT_TableBodyCell.d.ts → body/MRT_TableBodyCell.d.ts} +1 -1
  5. package/dist/body/MRT_TableBodyRow.d.ts +22 -0
  6. package/dist/{MRT_TableDetailPanel.d.ts → body/MRT_TableDetailPanel.d.ts} +1 -1
  7. package/dist/{MRT_TableBodyRow.d.ts → buttons/MRT_EditActionButtons.d.ts} +2 -2
  8. package/dist/buttons/MRT_ExpandAllButton.d.ts +5 -0
  9. package/dist/{MRT_TableExpandButton.d.ts → buttons/MRT_ExpandButton.d.ts} +2 -2
  10. package/dist/buttons/MRT_ShowHideColumnsButton.d.ts +5 -0
  11. package/dist/buttons/MRT_ToggleColumnActionMenuButton.d.ts +7 -0
  12. package/dist/buttons/MRT_ToggleFiltersButton.d.ts +4 -0
  13. package/dist/buttons/MRT_ToggleRowActionMenuButton.d.ts +7 -0
  14. package/dist/{MRT_TableFooter.d.ts → footer/MRT_TableFooter.d.ts} +0 -0
  15. package/dist/{MRT_TableFooterCell.d.ts → footer/MRT_TableFooterCell.d.ts} +0 -0
  16. package/dist/{MRT_TableFooterRow.d.ts → footer/MRT_TableFooterRow.d.ts} +1 -1
  17. package/dist/{MRT_TableHead.d.ts → head/MRT_TableHead.d.ts} +0 -0
  18. package/dist/head/MRT_TableHeadCell.d.ts +11 -0
  19. package/dist/{MRT_TableHeadRow.d.ts → head/MRT_TableHeadRow.d.ts} +1 -1
  20. package/dist/index.d.ts +2 -0
  21. package/dist/inputs/MRT_DensePaddingSwitch.d.ts +5 -0
  22. package/dist/inputs/MRT_EditCellTextfield.d.ts +7 -0
  23. package/dist/{MRT_TableHeadCell.d.ts → inputs/MRT_FilterTextField.d.ts} +1 -1
  24. package/dist/inputs/MRT_SearchTextField.d.ts +5 -0
  25. package/dist/inputs/MRT_SelectAllCheckbox.d.ts +2 -0
  26. package/dist/inputs/MRT_SelectCheckbox.d.ts +7 -0
  27. package/dist/material-react-table.cjs.development.js +2083 -191
  28. package/dist/material-react-table.cjs.development.js.map +1 -1
  29. package/dist/material-react-table.cjs.production.min.js +1 -1
  30. package/dist/material-react-table.cjs.production.min.js.map +1 -1
  31. package/dist/material-react-table.esm.js +2087 -195
  32. package/dist/material-react-table.esm.js.map +1 -1
  33. package/dist/menus/MRT_ColumnActionMenu.d.ts +9 -0
  34. package/dist/menus/MRT_RowActionMenu.d.ts +9 -0
  35. package/dist/menus/MRT_ShowHideColumnsMenu.d.ts +7 -0
  36. package/dist/{MRT_Table.d.ts → table/MRT_Table.d.ts} +0 -0
  37. package/dist/{MRT_TableContainer.d.ts → table/MRT_TableContainer.d.ts} +0 -0
  38. package/dist/table/MRT_TableSpacerCell.d.ts +6 -0
  39. package/dist/{MRT_TablePagination.d.ts → toolbar/MRT_TablePagination.d.ts} +0 -0
  40. package/dist/toolbar/MRT_ToolbarBottom.d.ts +5 -0
  41. package/dist/toolbar/MRT_ToolbarButtons.d.ts +5 -0
  42. package/dist/toolbar/MRT_ToolbarTop.d.ts +5 -0
  43. package/dist/useMaterialReactTable.d.ts +14 -12
  44. package/dist/utils/localization.d.ts +26 -0
  45. package/dist/utils/useMRTCalcs.d.ts +11 -0
  46. package/package.json +26 -21
  47. package/src/@types/faker.d.ts +4 -0
  48. package/src/@types/react-table-config.d.ts +153 -0
  49. package/src/MaterialReactTable.tsx +151 -37
  50. package/src/body/MRT_TableBody.tsx +35 -0
  51. package/src/body/MRT_TableBodyCell.tsx +69 -0
  52. package/src/body/MRT_TableBodyRow.tsx +84 -0
  53. package/src/body/MRT_TableDetailPanel.tsx +73 -0
  54. package/src/buttons/MRT_EditActionButtons.tsx +55 -0
  55. package/src/buttons/MRT_ExpandAllButton.tsx +47 -0
  56. package/src/buttons/MRT_ExpandButton.tsx +51 -0
  57. package/src/buttons/MRT_ShowHideColumnsButton.tsx +43 -0
  58. package/src/buttons/MRT_ToggleColumnActionMenuButton.tsx +51 -0
  59. package/src/buttons/MRT_ToggleFiltersButton.tsx +23 -0
  60. package/src/buttons/MRT_ToggleRowActionMenuButton.tsx +65 -0
  61. package/src/footer/MRT_TableFooter.tsx +21 -0
  62. package/src/footer/MRT_TableFooterCell.tsx +60 -0
  63. package/src/footer/MRT_TableFooterRow.tsx +62 -0
  64. package/src/head/MRT_TableHead.tsx +26 -0
  65. package/src/head/MRT_TableHeadCell.tsx +137 -0
  66. package/src/head/MRT_TableHeadRow.tsx +90 -0
  67. package/src/index.tsx +2 -0
  68. package/src/inputs/MRT_DensePaddingSwitch.tsx +21 -0
  69. package/src/inputs/MRT_EditCellTextfield.tsx +57 -0
  70. package/src/inputs/MRT_FilterTextField.tsx +63 -0
  71. package/src/inputs/MRT_SearchTextField.tsx +74 -0
  72. package/src/inputs/MRT_SelectAllCheckbox.tsx +26 -0
  73. package/src/inputs/MRT_SelectCheckbox.tsx +34 -0
  74. package/src/menus/MRT_ColumnActionMenu.tsx +107 -0
  75. package/src/menus/MRT_RowActionMenu.tsx +52 -0
  76. package/src/menus/MRT_ShowHideColumnsMenu.tsx +34 -0
  77. package/src/table/MRT_Table.tsx +30 -0
  78. package/src/table/MRT_TableContainer.tsx +50 -0
  79. package/src/table/MRT_TableSpacerCell.tsx +26 -0
  80. package/src/toolbar/MRT_TablePagination.tsx +37 -0
  81. package/src/toolbar/MRT_ToolbarBottom.tsx +43 -0
  82. package/src/toolbar/MRT_ToolbarButtons.tsx +27 -0
  83. package/src/toolbar/MRT_ToolbarTop.tsx +68 -0
  84. package/src/useMaterialReactTable.tsx +70 -32
  85. package/src/utils/localization.ts +51 -0
  86. package/src/utils/useMRTCalcs.tsx +42 -0
  87. package/dist/defaults.d.ts +0 -2
  88. package/src/MRT_Table.tsx +0 -20
  89. package/src/MRT_TableBody.tsx +0 -19
  90. package/src/MRT_TableBodyCell.tsx +0 -15
  91. package/src/MRT_TableBodyRow.tsx +0 -27
  92. package/src/MRT_TableContainer.tsx +0 -16
  93. package/src/MRT_TableDetailPanel.tsx +0 -27
  94. package/src/MRT_TableExpandButton.tsx +0 -25
  95. package/src/MRT_TableFooter.tsx +0 -31
  96. package/src/MRT_TableFooterCell.tsx +0 -25
  97. package/src/MRT_TableFooterRow.tsx +0 -22
  98. package/src/MRT_TableHead.tsx +0 -25
  99. package/src/MRT_TableHeadCell.tsx +0 -27
  100. package/src/MRT_TableHeadRow.tsx +0 -22
  101. package/src/MRT_TablePagination.tsx +0 -34
  102. package/src/defaults.ts +0 -11
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
- "version": "0.1.0",
2
+ "version": "0.3.2",
3
3
  "license": "MIT",
4
4
  "name": "material-react-table",
5
- "description": "A fully featured Material-UI implementation of react-table, inspired by material-table, written from the ground up in TypeScript.",
5
+ "description": "A fully featured Material-UI implementation of react-table, inspired by material-table and the mui DataGrid, written from the ground up in TypeScript.",
6
6
  "author": "Kevin Vandy",
7
7
  "keywords": [
8
8
  "react-table",
@@ -13,7 +13,7 @@
13
13
  "type": "git",
14
14
  "url": "https://github.com/KevinVandy/material-react-table"
15
15
  },
16
- "homepage": "https://github.com/KevinVandy/material-react-table#readme",
16
+ "homepage": "https://www.material-react-table.com/",
17
17
  "bugs": {
18
18
  "url": "https://github.com/KevinVandy/material-react-table/issues"
19
19
  },
@@ -24,18 +24,19 @@
24
24
  "src"
25
25
  ],
26
26
  "engines": {
27
- "node": ">=14"
27
+ "node": ">=12"
28
28
  },
29
29
  "scripts": {
30
30
  "start": "tsdx watch",
31
- "build": "tsdx build",
31
+ "build": "tsdx build && size-limit",
32
32
  "test": "tsdx test --passWithNoTests",
33
33
  "lint": "tsdx lint",
34
34
  "prepare": "tsdx build",
35
35
  "size": "size-limit",
36
36
  "analyze": "size-limit --why",
37
37
  "storybook": "start-storybook -p 6006",
38
- "build-storybook": "build-storybook"
38
+ "build-storybook": "build-storybook",
39
+ "upgrade": "ncu -u && npm i"
39
40
  },
40
41
  "husky": {
41
42
  "hooks": {
@@ -54,21 +55,25 @@
54
55
  }
55
56
  ],
56
57
  "devDependencies": {
57
- "@babel/core": "^7.16.7",
58
+ "@babel/core": "^7.17.0",
58
59
  "@emotion/react": "^11.7.1",
59
60
  "@emotion/styled": "^11.6.0",
60
- "@faker-js/faker": "^6.0.0-alpha.2",
61
- "@mui/icons-material": "^5.2.5",
62
- "@mui/material": "^5.2.8",
61
+ "@etchteam/storybook-addon-status": "^4.2.0",
62
+ "@faker-js/faker": "^6.0.0-alpha.5",
63
+ "@mui/icons-material": "^5.3.1",
64
+ "@mui/material": "^5.4.0",
63
65
  "@size-limit/preset-small-lib": "^7.0.5",
64
- "@storybook/addon-a11y": "^6.4.13",
65
- "@storybook/addon-essentials": "^6.4.13",
66
+ "@storybook/addon-a11y": "^6.4.18",
67
+ "@storybook/addon-actions": "^6.4.18",
68
+ "@storybook/addon-console": "^1.2.3",
69
+ "@storybook/addon-essentials": "^6.4.18",
66
70
  "@storybook/addon-info": "^5.3.21",
67
- "@storybook/addon-links": "^6.4.13",
68
- "@storybook/addons": "^6.4.13",
69
- "@storybook/react": "^6.4.13",
70
- "@types/faker": "^5.5.9",
71
- "@types/react": "^17.0.38",
71
+ "@storybook/addon-links": "^6.4.18",
72
+ "@storybook/addon-storysource": "^6.4.18",
73
+ "@storybook/addons": "^6.4.18",
74
+ "@storybook/react": "^6.4.18",
75
+ "@types/faker": "^6.6.8",
76
+ "@types/react": "^17.0.39",
72
77
  "@types/react-dom": "^17.0.11",
73
78
  "@types/react-table": "^7.7.9",
74
79
  "babel-loader": "^8.2.3",
@@ -79,17 +84,17 @@
79
84
  "react-is": "^17.0.2",
80
85
  "react-table": "^7.7.0",
81
86
  "size-limit": "^7.0.5",
82
- "storybook-addon-material-ui": "^0.9.0-alpha.24",
87
+ "storybook-addon-performance": "^0.16.1",
88
+ "storybook-dark-mode": "^1.0.8",
83
89
  "tsdx": "^0.14.1",
84
90
  "tslib": "^2.3.1",
85
- "typescript": "^4.5.4"
91
+ "typescript": "^4.5.5"
86
92
  },
87
93
  "peerDependencies": {
88
94
  "@emotion/react": ">=11",
89
- "@emotion/styled": ">=11",
90
95
  "@mui/icons-material": ">=5",
91
96
  "@mui/material": ">=5",
92
- "react": ">=17",
97
+ "react": ">=16.8",
93
98
  "react-table": ">=7"
94
99
  }
95
100
  }
@@ -0,0 +1,4 @@
1
+ declare module '@faker-js/faker' {
2
+ import faker from 'faker';
3
+ export default faker;
4
+ }
@@ -0,0 +1,153 @@
1
+ import { TableCellProps, TextFieldProps } from '@mui/material';
2
+ import { ReactNode } from 'react';
3
+ import {
4
+ UseColumnOrderInstanceProps,
5
+ UseColumnOrderState,
6
+ UseExpandedHooks,
7
+ UseExpandedInstanceProps,
8
+ UseExpandedOptions,
9
+ UseExpandedRowProps,
10
+ UseExpandedState,
11
+ UseFiltersColumnOptions,
12
+ UseFiltersColumnProps,
13
+ UseFiltersInstanceProps,
14
+ UseFiltersOptions,
15
+ UseFiltersState,
16
+ UseGlobalFiltersColumnOptions,
17
+ UseGlobalFiltersInstanceProps,
18
+ UseGlobalFiltersOptions,
19
+ UseGlobalFiltersState,
20
+ UseGroupByCellProps,
21
+ UseGroupByColumnOptions,
22
+ UseGroupByColumnProps,
23
+ UseGroupByHooks,
24
+ UseGroupByInstanceProps,
25
+ UseGroupByOptions,
26
+ UseGroupByRowProps,
27
+ UseGroupByState,
28
+ UsePaginationInstanceProps,
29
+ UsePaginationOptions,
30
+ UsePaginationState,
31
+ UseResizeColumnsColumnOptions,
32
+ UseResizeColumnsColumnProps,
33
+ UseResizeColumnsOptions,
34
+ UseResizeColumnsState,
35
+ UseRowSelectHooks,
36
+ UseRowSelectInstanceProps,
37
+ UseRowSelectOptions,
38
+ UseRowSelectRowProps,
39
+ UseRowSelectState,
40
+ UseRowStateCellProps,
41
+ UseRowStateInstanceProps,
42
+ UseRowStateOptions,
43
+ UseRowStateRowProps,
44
+ UseRowStateState,
45
+ UseSortByColumnOptions,
46
+ UseSortByColumnProps,
47
+ UseSortByHooks,
48
+ UseSortByInstanceProps,
49
+ UseSortByOptions,
50
+ UseSortByState,
51
+ } from 'react-table';
52
+
53
+ declare module 'react-table' {
54
+ export interface TableOptions<D extends Record<string, unknown>>
55
+ extends UseExpandedOptions<D>,
56
+ UseFiltersOptions<D>,
57
+ UseGlobalFiltersOptions<D>,
58
+ UseGroupByOptions<D>,
59
+ UsePaginationOptions<D>,
60
+ UseResizeColumnsOptions<D>,
61
+ UseRowSelectOptions<D>,
62
+ UseRowStateOptions<D>,
63
+ UseSortByOptions<D>,
64
+ Record<string, any> {}
65
+
66
+ export interface Hooks<
67
+ D extends Record<string, unknown> = Record<string, unknown>,
68
+ > extends UseExpandedHooks<D>,
69
+ UseGroupByHooks<D>,
70
+ UseRowSelectHooks<D>,
71
+ UseSortByHooks<D> {}
72
+
73
+ export interface TableInstance<
74
+ D extends Record<string, unknown> = Record<string, unknown>,
75
+ > extends UseColumnOrderInstanceProps<D>,
76
+ UseExpandedInstanceProps<D>,
77
+ UseFiltersInstanceProps<D>,
78
+ UseGlobalFiltersInstanceProps<D>,
79
+ UseGroupByInstanceProps<D>,
80
+ UsePaginationInstanceProps<D>,
81
+ UseRowSelectInstanceProps<D>,
82
+ UseRowStateInstanceProps<D>,
83
+ UseSortByInstanceProps<D> {}
84
+
85
+ export interface TableState<
86
+ D extends Record<string, unknown> = Record<string, unknown>,
87
+ > extends UseColumnOrderState<D>,
88
+ UseExpandedState<D>,
89
+ UseFiltersState<D>,
90
+ UseGlobalFiltersState<D>,
91
+ UseGroupByState<D>,
92
+ UsePaginationState<D>,
93
+ UseResizeColumnsState<D>,
94
+ UseRowSelectState<D>,
95
+ UseRowStateState<D>,
96
+ UseSortByState<D> {}
97
+
98
+ export interface ColumnInterface<
99
+ D extends Record<string, unknown> = Record<string, unknown>,
100
+ > extends UseFiltersColumnOptions<D>,
101
+ UseGlobalFiltersColumnOptions<D>,
102
+ UseGroupByColumnOptions<D>,
103
+ UseResizeColumnsColumnOptions<D>,
104
+ UseSortByColumnOptions<D> {
105
+ disableFilters?: boolean;
106
+ Filter?: ({ column }: { column: HeaderGroup<D> }) => ReactNode;
107
+ editable?: boolean;
108
+ Edit?: ({
109
+ cell,
110
+ onChange,
111
+ }: {
112
+ cell: Cell<D>;
113
+ onChange: (event: ChangeEvent<HTMLInputElement>) => void;
114
+ }) => ReactNode;
115
+ muiTableBodyCellProps?:
116
+ | TableCellProps
117
+ | ((cell?: Cell<D>) => TableCellProps);
118
+ muiTableHeadCellProps?:
119
+ | TableCellProps
120
+ | ((column: Column<D>) => TableCellProps);
121
+ muiTableFooterCellProps?:
122
+ | TableCellProps
123
+ | ((column: Column<D>) => TableCellProps);
124
+ muiTableBodyCellEditTextFieldProps?:
125
+ | TextFieldProps
126
+ | ((cell?: Cell<D>) => TextFieldProps);
127
+ muiTableHeadCellFilterTextFieldProps?:
128
+ | TextFieldProps
129
+ | ((column: Column<D>) => TextFieldProps);
130
+ }
131
+
132
+ export interface ColumnInstance<
133
+ D extends Record<string, unknown> = Record<string, unknown>,
134
+ > extends UseFiltersColumnProps<D>,
135
+ UseGroupByColumnProps<D>,
136
+ UseResizeColumnsColumnProps<D>,
137
+ UseSortByColumnProps<D> {}
138
+
139
+ export interface Cell<
140
+ D extends Record<string, unknown> = Record<string, unknown>,
141
+ V = any,
142
+ > extends UseGroupByCellProps<D>,
143
+ UseRowStateCellProps<D> {}
144
+
145
+ export interface Row<
146
+ D extends Record<string, unknown> = Record<string, unknown>,
147
+ > extends UseExpandedRowProps<D>,
148
+ UseGroupByRowProps<D>,
149
+ UseRowSelectRowProps<D>,
150
+ UseRowStateRowProps<D> {}
151
+ }
152
+
153
+ export module 'react-table';
@@ -1,48 +1,162 @@
1
- import React, { FC } from 'react';
1
+ import React, { ChangeEvent, MouseEvent, ReactNode } from 'react';
2
2
  import {
3
+ TableBodyProps,
4
+ TableCellProps,
3
5
  TableContainerProps,
4
6
  TableFooterProps,
5
7
  TableHeadProps,
6
8
  TablePaginationProps,
7
9
  TableProps,
10
+ TableRowProps,
11
+ TextFieldProps,
12
+ ToolbarProps,
13
+ TypographyProps,
8
14
  } from '@mui/material';
9
- import { Column } from 'react-table';
15
+ import {
16
+ Cell,
17
+ Column,
18
+ HeaderGroup,
19
+ Row,
20
+ TableInstance,
21
+ TableOptions,
22
+ UseExpandedOptions,
23
+ UseFiltersOptions,
24
+ UseGlobalFiltersOptions,
25
+ UseGroupByOptions,
26
+ UsePaginationOptions,
27
+ UseResizeColumnsOptions,
28
+ UseRowSelectOptions,
29
+ UseRowStateOptions,
30
+ UseSortByOptions,
31
+ } from 'react-table';
10
32
  import { MaterialReactTableProvider } from './useMaterialReactTable';
11
- import { MRT_TableContainer } from './MRT_TableContainer';
12
- import { defaultOptions } from './defaults';
13
-
14
- export interface MaterialReactTableOptions {
15
- enableFilters: boolean;
16
- enablePagination: boolean | 'top' | 'bottom' | 'both' | 'none';
17
- enableSearch: boolean;
18
- enableSorting: boolean;
19
- showFooter: boolean;
20
- showHead: boolean;
21
- showToolbar: boolean;
22
- }
23
-
24
- export interface MaterialReactTableOptionalProps {
25
- options?: Partial<MaterialReactTableOptions>;
26
- tableContainerProps?: TableContainerProps;
27
- tableFooterProps?: TableFooterProps;
28
- tableHeadProps?: TableHeadProps;
29
- tablePaginationProps?: TablePaginationProps;
30
- tableProps?: TableProps;
31
- renderDetailPanel?: (rowData: any) => React.ReactNode;
32
- }
33
+ import { MRT_TableContainer } from './table/MRT_TableContainer';
34
+ import { defaultLocalization, MRT_Localization } from './utils/localization';
33
35
 
34
- export interface MaterialReactTableProps extends MaterialReactTableOptionalProps {
35
- columns: Column[];
36
- data: any[];
37
- }
36
+ export type MaterialReactTableProps<D extends {} = {}> = TableOptions<D> &
37
+ UseExpandedOptions<D> &
38
+ UseFiltersOptions<D> &
39
+ UseGlobalFiltersOptions<D> &
40
+ UseGroupByOptions<D> &
41
+ UsePaginationOptions<D> &
42
+ UseResizeColumnsOptions<D> &
43
+ UseRowSelectOptions<D> &
44
+ UseRowStateOptions<D> &
45
+ UseSortByOptions<D> & {
46
+ defaultDensePadding?: boolean;
47
+ defaultShowFilters?: boolean;
48
+ disableColumnActions?: boolean;
49
+ disableColumnHiding?: boolean;
50
+ disableDensePaddingToggle?: boolean;
51
+ disableExpandAll?: boolean;
52
+ disableSelectAll?: boolean;
53
+ disableSubRowTree?: boolean;
54
+ enableColumnGrouping?: boolean;
55
+ enableColumnResizing?: boolean;
56
+ enableRowActions?: boolean;
57
+ enableRowEditing?: boolean;
58
+ enableSelection?: boolean;
59
+ hideTableFooter?: boolean;
60
+ hideTableHead?: boolean;
61
+ hideToolbarActions?: boolean;
62
+ hideToolbarBottom?: boolean;
63
+ hideToolbarTop?: boolean;
64
+ isFetching?: boolean;
65
+ isLoading?: boolean;
66
+ localization?: Partial<MRT_Localization>;
67
+ muiSearchTextFieldProps?: TextFieldProps;
68
+ muiTableBodyCellEditTextFieldProps?:
69
+ | TextFieldProps
70
+ | ((cell?: Cell<D>) => TextFieldProps);
71
+ muiTableBodyCellProps?:
72
+ | TableCellProps
73
+ | ((cell?: Cell<D>) => TableCellProps);
74
+ muiTableBodyProps?: TableBodyProps;
75
+ muiTableBodyRowProps?: TableRowProps | ((row: Row<D>) => TableRowProps);
76
+ muiTableContainerProps?: TableContainerProps;
77
+ muiTableDetailPanelProps?:
78
+ | TableCellProps
79
+ | ((row: Row<D>) => TableCellProps);
80
+ muiTableFooterCellProps?:
81
+ | TableCellProps
82
+ | ((column: Column<D>) => TableCellProps);
83
+ muiTableFooterProps?: TableFooterProps;
84
+ muiTableFooterRowProps?:
85
+ | TableRowProps
86
+ | ((footerGroup: HeaderGroup<D>) => TableRowProps);
87
+ muiTableHeadCellFilterTextFieldProps?:
88
+ | TextFieldProps
89
+ | ((column: Column<D>) => TextFieldProps);
90
+ muiTableHeadCellProps?:
91
+ | TableCellProps
92
+ | ((column: Column<D>) => TableCellProps);
93
+ muiTableHeadProps?: TableHeadProps;
94
+ muiTableHeadRowProps?:
95
+ | TableRowProps
96
+ | ((row: HeaderGroup<D>) => TableRowProps);
97
+ muiTablePaginationProps?:
98
+ | Partial<TablePaginationProps>
99
+ | ((tableInstance: TableInstance<D>) => Partial<TablePaginationProps>);
100
+ muiTableProps?: TableProps;
101
+ muiTableTitleProps?: TypographyProps;
102
+ muiTableToolbarBottomProps?:
103
+ | ToolbarProps
104
+ | ((tableInstance: TableInstance<D>) => ToolbarProps);
105
+ muiTableToolbarTopProps?:
106
+ | ToolbarProps
107
+ | ((tableInstance: TableInstance<D>) => ToolbarProps);
108
+ onCellClick?: (
109
+ event: MouseEvent<HTMLTableCellElement>,
110
+ cell: Cell<D>,
111
+ ) => void;
112
+ onDetailPanelClick?: (
113
+ event: MouseEvent<HTMLTableCellElement>,
114
+ row: Row<D>,
115
+ ) => void;
116
+ onGlobalFilterChange?: (event: ChangeEvent<HTMLInputElement>) => void;
117
+ onRowClick?: (event: MouseEvent<HTMLTableRowElement>, row: Row<D>) => void;
118
+ onRowEditSubmit?: (row: Row<D>) => Promise<void> | void;
119
+ onRowExpandChange?: (
120
+ event: MouseEvent<HTMLButtonElement>,
121
+ row: Row<D>,
122
+ ) => void;
123
+ onRowSelectChange?: (
124
+ event: ChangeEvent,
125
+ row: Row<D>,
126
+ selectedRows: Row<D>[],
127
+ ) => void;
128
+ positionActionsColumn?: 'first' | 'last';
129
+ positionPagination?: 'bottom' | 'top' | 'both';
130
+ positionToolbarActions?: 'bottom' | 'top';
131
+ renderDetailPanel?: (row: Row<D>) => ReactNode;
132
+ renderRowActionMenuItems?: (
133
+ rowData: Row<D>,
134
+ tableInstance: TableInstance<D>,
135
+ closeMenu: () => void,
136
+ ) => ReactNode[];
137
+ renderRowActions?: (
138
+ row: Row<D>,
139
+ tableInstance: TableInstance<D>,
140
+ ) => ReactNode;
141
+ title?: string | ReactNode;
142
+ };
38
143
 
39
- export const MaterialReactTable: FC<MaterialReactTableProps> = ({
40
- options = defaultOptions,
144
+ export default <D extends {}>({
145
+ defaultColumn = { minWidth: 50, maxWidth: 1000 },
146
+ localization = defaultLocalization,
147
+ positionActionsColumn = 'first',
148
+ positionPagination = 'bottom',
149
+ positionToolbarActions = 'top',
41
150
  ...rest
42
- }) => {
43
- return (
44
- <MaterialReactTableProvider options={options} {...rest}>
45
- <MRT_TableContainer />
46
- </MaterialReactTableProvider>
47
- );
48
- };
151
+ }: MaterialReactTableProps<D>) => (
152
+ <MaterialReactTableProvider
153
+ defaultColumn={defaultColumn}
154
+ localization={{ ...defaultLocalization, ...localization }}
155
+ positionPagination={positionPagination}
156
+ positionActionsColumn={positionActionsColumn}
157
+ positionToolbarActions={positionToolbarActions}
158
+ {...rest}
159
+ >
160
+ <MRT_TableContainer />
161
+ </MaterialReactTableProvider>
162
+ );
@@ -0,0 +1,35 @@
1
+ import React, { FC } from 'react';
2
+ import { styled, TableBody as MuiTableBody } from '@mui/material';
3
+ import { MRT_TableBodyRow } from './MRT_TableBodyRow';
4
+ import { useMaterialReactTable } from '../useMaterialReactTable';
5
+
6
+ const TableBody = styled(MuiTableBody)({
7
+ overflowY: 'hidden',
8
+ });
9
+
10
+ interface Props {}
11
+
12
+ export const MRT_TableBody: FC<Props> = () => {
13
+ const { tableInstance, muiTableBodyProps, manualPagination } =
14
+ useMaterialReactTable();
15
+
16
+ const rows = manualPagination ? tableInstance.rows : tableInstance.page;
17
+
18
+ const tableBodyProps = {
19
+ ...muiTableBodyProps,
20
+ ...tableInstance.getTableBodyProps(),
21
+ style: {
22
+ ...tableInstance.getTableBodyProps().style,
23
+ ...(muiTableBodyProps?.style ?? {}),
24
+ },
25
+ };
26
+
27
+ return (
28
+ <TableBody {...tableBodyProps}>
29
+ {rows.map((row) => {
30
+ tableInstance.prepareRow(row);
31
+ return <MRT_TableBodyRow key={row.getRowProps().key} row={row} />;
32
+ })}
33
+ </TableBody>
34
+ );
35
+ };
@@ -0,0 +1,69 @@
1
+ import React, { FC, MouseEvent } from 'react';
2
+ import { styled, TableCell as MuiTableCell } from '@mui/material';
3
+ import { Cell } from 'react-table';
4
+ import { useMaterialReactTable } from '../useMaterialReactTable';
5
+ import { MRT_EditCellTextfield } from '../inputs/MRT_EditCellTextfield';
6
+
7
+ const TableCell = styled(MuiTableCell, {
8
+ shouldForwardProp: (prop) => prop !== 'densePadding',
9
+ })<{ densePadding?: boolean }>(({ densePadding }) => ({
10
+ padding: densePadding ? '0.5rem' : '1rem',
11
+ transition: 'all 0.2s ease-in-out',
12
+ }));
13
+
14
+ interface Props {
15
+ cell: Cell;
16
+ }
17
+
18
+ export const MRT_TableBodyCell: FC<Props> = ({ cell }) => {
19
+ const {
20
+ onCellClick,
21
+ muiTableBodyCellProps,
22
+ densePadding,
23
+ currentEditingRow,
24
+ } = useMaterialReactTable();
25
+
26
+ const mTableCellBodyProps =
27
+ muiTableBodyCellProps instanceof Function
28
+ ? muiTableBodyCellProps(cell)
29
+ : muiTableBodyCellProps;
30
+
31
+ const mcTableCellBodyProps =
32
+ cell.column.muiTableBodyCellProps instanceof Function
33
+ ? cell.column.muiTableBodyCellProps(cell)
34
+ : cell.column.muiTableBodyCellProps;
35
+
36
+ const tableCellProps = {
37
+ ...mTableCellBodyProps,
38
+ ...mcTableCellBodyProps,
39
+ ...cell.getCellProps(),
40
+ style: {
41
+ ...cell.getCellProps().style,
42
+ ...(mTableCellBodyProps?.style ?? {}),
43
+ ...(mcTableCellBodyProps?.style ?? {}),
44
+ },
45
+ };
46
+
47
+ return (
48
+ <TableCell
49
+ densePadding={densePadding}
50
+ onClick={(event: MouseEvent<HTMLTableCellElement>) =>
51
+ onCellClick?.(event, cell)
52
+ }
53
+ {...tableCellProps}
54
+ >
55
+ {currentEditingRow?.id === cell.row.id ? (
56
+ <MRT_EditCellTextfield cell={cell} />
57
+ ) : cell.isPlaceholder ? null : cell.isAggregated ? (
58
+ cell.render('Aggregated')
59
+ ) : cell.isGrouped ? (
60
+ <span>
61
+ {cell.render('Cell')} ({cell.row.subRows.length})
62
+ </span>
63
+ ) : (
64
+ cell.render('Cell')
65
+ )}
66
+ {}
67
+ </TableCell>
68
+ );
69
+ };
@@ -0,0 +1,84 @@
1
+ import React, { FC, MouseEvent } from 'react';
2
+ import {
3
+ alpha,
4
+ styled,
5
+ TableCell,
6
+ TableRow as MuiTableRow,
7
+ } from '@mui/material';
8
+ import { Row } from 'react-table';
9
+ import { MRT_TableBodyCell } from './MRT_TableBodyCell';
10
+ import { useMaterialReactTable } from '../useMaterialReactTable';
11
+ import { MRT_TableDetailPanel } from './MRT_TableDetailPanel';
12
+ import { MRT_ExpandButton } from '../buttons/MRT_ExpandButton';
13
+ import { MRT_SelectCheckbox } from '../inputs/MRT_SelectCheckbox';
14
+ import { MRT_ToggleRowActionMenuButton } from '../buttons/MRT_ToggleRowActionMenuButton';
15
+
16
+ export const TableRow = styled(MuiTableRow, {
17
+ shouldForwardProp: (prop) => prop !== 'isSelected',
18
+ })<{ isSelected?: boolean }>(({ isSelected, theme }) => ({
19
+ backgroundColor: isSelected
20
+ ? alpha(theme.palette.primary.light, 0.1)
21
+ : 'transparent',
22
+ }));
23
+
24
+ interface Props {
25
+ row: Row;
26
+ }
27
+
28
+ export const MRT_TableBodyRow: FC<Props> = ({ row }) => {
29
+ const {
30
+ anyRowsCanExpand,
31
+ enableRowActions,
32
+ enableSelection,
33
+ muiTableBodyRowProps,
34
+ onRowClick,
35
+ positionActionsColumn,
36
+ renderDetailPanel,
37
+ } = useMaterialReactTable();
38
+
39
+ const mTableBodyRowProps =
40
+ muiTableBodyRowProps instanceof Function
41
+ ? muiTableBodyRowProps(row)
42
+ : muiTableBodyRowProps;
43
+
44
+ const tableRowProps = {
45
+ ...mTableBodyRowProps,
46
+ ...row.getRowProps(),
47
+ style: {
48
+ ...row.getRowProps().style,
49
+ ...(mTableBodyRowProps?.style ?? {}),
50
+ },
51
+ };
52
+
53
+ return (
54
+ <>
55
+ <TableRow
56
+ isSelected={row.isSelected}
57
+ hover
58
+ onClick={(event: MouseEvent<HTMLTableRowElement>) =>
59
+ onRowClick?.(event, row)
60
+ }
61
+ {...tableRowProps}
62
+ >
63
+ {enableRowActions && positionActionsColumn === 'first' && (
64
+ <TableCell>
65
+ <MRT_ToggleRowActionMenuButton row={row} />
66
+ </TableCell>
67
+ )}
68
+ {(anyRowsCanExpand || renderDetailPanel) && (
69
+ <MRT_ExpandButton row={row} />
70
+ )}
71
+ {enableSelection && <MRT_SelectCheckbox row={row} />}
72
+ {row.cells.map((cell) => (
73
+ <MRT_TableBodyCell key={cell.getCellProps().key} cell={cell} />
74
+ ))}
75
+ {enableRowActions && positionActionsColumn === 'last' && (
76
+ <TableCell>
77
+ <MRT_ToggleRowActionMenuButton row={row} />
78
+ </TableCell>
79
+ )}
80
+ </TableRow>
81
+ {renderDetailPanel && <MRT_TableDetailPanel row={row} />}
82
+ </>
83
+ );
84
+ };