material-react-table 0.2.0 → 0.3.3

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 (67) hide show
  1. package/README.md +32 -162
  2. package/dist/MaterialReactTable.d.ts +55 -50
  3. package/dist/body/MRT_TableBodyRow.d.ts +16 -1
  4. package/dist/buttons/MRT_EditActionButtons.d.ts +7 -0
  5. package/dist/buttons/MRT_ToggleFiltersButton.d.ts +4 -0
  6. package/dist/buttons/MRT_ToggleRowActionMenuButton.d.ts +7 -0
  7. package/dist/head/MRT_TableHeadCell.d.ts +4 -1
  8. package/dist/index.d.ts +2 -0
  9. package/dist/inputs/MRT_DensePaddingSwitch.d.ts +5 -0
  10. package/dist/inputs/MRT_EditCellTextfield.d.ts +7 -0
  11. package/dist/material-react-table.cjs.development.js +1659 -440
  12. package/dist/material-react-table.cjs.development.js.map +1 -1
  13. package/dist/material-react-table.cjs.production.min.js +1 -1
  14. package/dist/material-react-table.cjs.production.min.js.map +1 -1
  15. package/dist/material-react-table.esm.js +1669 -450
  16. package/dist/material-react-table.esm.js.map +1 -1
  17. package/dist/menus/MRT_RowActionMenu.d.ts +9 -0
  18. package/dist/{footer → toolbar}/MRT_TablePagination.d.ts +0 -0
  19. package/dist/toolbar/MRT_ToolbarBottom.d.ts +5 -0
  20. package/dist/toolbar/MRT_ToolbarButtons.d.ts +5 -0
  21. package/dist/toolbar/{MRT_Toolbar.d.ts → MRT_ToolbarTop.d.ts} +1 -1
  22. package/dist/useMaterialReactTable.d.ts +10 -5
  23. package/dist/utils/localization.d.ts +23 -12
  24. package/package.json +20 -17
  25. package/src/@types/faker.d.ts +4 -0
  26. package/src/@types/react-table-config.d.ts +153 -0
  27. package/src/MaterialReactTable.tsx +125 -97
  28. package/src/body/MRT_TableBody.tsx +18 -40
  29. package/src/body/MRT_TableBodyCell.tsx +53 -9
  30. package/src/body/MRT_TableBodyRow.tsx +49 -21
  31. package/src/body/MRT_TableDetailPanel.tsx +50 -15
  32. package/src/buttons/MRT_EditActionButtons.tsx +55 -0
  33. package/src/buttons/MRT_ExpandAllButton.tsx +22 -15
  34. package/src/buttons/MRT_ExpandButton.tsx +30 -18
  35. package/src/buttons/MRT_ShowHideColumnsButton.tsx +12 -12
  36. package/src/buttons/MRT_ToggleColumnActionMenuButton.tsx +3 -1
  37. package/src/buttons/MRT_ToggleFiltersButton.tsx +23 -0
  38. package/src/buttons/MRT_ToggleRowActionMenuButton.tsx +65 -0
  39. package/src/footer/MRT_TableFooter.tsx +4 -19
  40. package/src/footer/MRT_TableFooterCell.tsx +36 -9
  41. package/src/footer/MRT_TableFooterRow.tsx +31 -13
  42. package/src/head/MRT_TableHead.tsx +8 -20
  43. package/src/head/MRT_TableHeadCell.tsx +73 -30
  44. package/src/head/MRT_TableHeadRow.tsx +46 -19
  45. package/src/index.tsx +2 -0
  46. package/src/inputs/MRT_DensePaddingSwitch.tsx +21 -0
  47. package/src/inputs/MRT_EditCellTextfield.tsx +57 -0
  48. package/src/inputs/MRT_FilterTextField.tsx +4 -0
  49. package/src/inputs/MRT_SearchTextField.tsx +17 -8
  50. package/src/inputs/MRT_SelectAllCheckbox.tsx +16 -5
  51. package/src/inputs/MRT_SelectCheckbox.tsx +12 -4
  52. package/src/menus/MRT_ColumnActionMenu.tsx +37 -12
  53. package/src/menus/MRT_RowActionMenu.tsx +52 -0
  54. package/src/menus/MRT_ShowHideColumnsMenu.tsx +2 -2
  55. package/src/table/MRT_Table.tsx +13 -4
  56. package/src/table/MRT_TableContainer.tsx +37 -5
  57. package/src/table/MRT_TableSpacerCell.tsx +17 -1
  58. package/src/toolbar/MRT_TablePagination.tsx +37 -0
  59. package/src/toolbar/MRT_ToolbarBottom.tsx +43 -0
  60. package/src/toolbar/MRT_ToolbarButtons.tsx +27 -0
  61. package/src/toolbar/MRT_ToolbarTop.tsx +68 -0
  62. package/src/useMaterialReactTable.tsx +39 -23
  63. package/src/utils/localization.ts +36 -14
  64. package/dist/utils/overrideWarnings.d.ts +0 -1
  65. package/src/footer/MRT_TablePagination.tsx +0 -39
  66. package/src/toolbar/MRT_Toolbar.tsx +0 -39
  67. package/src/utils/overrideWarnings.ts +0 -41
@@ -0,0 +1,9 @@
1
+ import { FC } from 'react';
2
+ import { Row } from 'react-table';
3
+ interface Props {
4
+ anchorEl: HTMLElement | null;
5
+ row: Row;
6
+ setAnchorEl: (anchorEl: HTMLElement | null) => void;
7
+ }
8
+ export declare const MRT_RowActionMenu: FC<Props>;
9
+ export {};
@@ -0,0 +1,5 @@
1
+ import { FC } from 'react';
2
+ interface Props {
3
+ }
4
+ export declare const MRT_ToolbarBottom: FC<Props>;
5
+ export {};
@@ -0,0 +1,5 @@
1
+ import { FC } from 'react';
2
+ interface Props {
3
+ }
4
+ export declare const MRT_ToolbarButtons: FC<Props>;
5
+ export {};
@@ -1,5 +1,5 @@
1
1
  import { FC } from 'react';
2
2
  interface Props {
3
3
  }
4
- export declare const MRT_Toolbar: FC<Props>;
4
+ export declare const MRT_ToolbarTop: FC<Props>;
5
5
  export {};
@@ -1,10 +1,15 @@
1
1
  import React, { PropsWithChildren } from 'react';
2
- import { TableInstance } from 'react-table';
3
- import { MaterialReactTableProps } from '.';
2
+ import { Row, TableInstance } from 'react-table';
3
+ import { MaterialReactTableProps } from './MaterialReactTable';
4
4
  import { UseMRTCalcs } from './utils/useMRTCalcs';
5
- interface UseMaterialReactTable<D extends {}> extends MaterialReactTableProps<D>, UseMRTCalcs {
5
+ export interface UseMaterialReactTable<D extends {}> extends MaterialReactTableProps<D>, UseMRTCalcs {
6
+ currentEditingRow: Row<D> | null;
7
+ densePadding: boolean;
8
+ setCurrentEditingRow: (currentRowEditingId: Row<D> | null) => void;
9
+ setDensePadding: (densePadding: boolean) => void;
10
+ setShowFilters: (showFilters: boolean) => void;
11
+ showFilters: boolean;
6
12
  tableInstance: TableInstance<D>;
7
13
  }
8
- export declare const MaterialReactTableProvider: <D extends {}>({ children, columns, data, surpressOverrideWarnings, ...rest }: React.PropsWithChildren<MaterialReactTableProps<D>>) => JSX.Element;
14
+ export declare const MaterialReactTableProvider: <D extends {}>(props: React.PropsWithChildren<MaterialReactTableProps<D>>) => JSX.Element;
9
15
  export declare const useMaterialReactTable: <D extends {}>() => UseMaterialReactTable<D>;
10
- export {};
@@ -1,15 +1,26 @@
1
1
  export interface MRT_Localization {
2
- columnActionMenuButtonTitle?: string;
3
- columnActionMenuItemHideColumn?: string;
4
- columnActionMenuItemSortAsc?: string;
5
- columnActionMenuItemClearSort?: string;
6
- columnActionMenuItemSortDesc?: string;
7
- expandAllButtonTitle?: string;
8
- expandButtonTitle?: string;
9
- filterTextFieldClearButtonTitle?: string;
10
- filterTextFieldPlaceholder?: string;
11
- searchTextFieldClearButtonTitle?: string;
12
- searchTextFieldPlaceholder?: string;
13
- showHideColumnsButtonTitle?: string;
2
+ actionsHeadColumnTitle: string;
3
+ columnActionMenuButtonTitle: string;
4
+ columnActionMenuItemClearSort: string;
5
+ columnActionMenuItemGroupBy: string;
6
+ columnActionMenuItemHideColumn: string;
7
+ columnActionMenuItemSortAsc: string;
8
+ columnActionMenuItemSortDesc: string;
9
+ columnActionMenuItemUnGroupBy: string;
10
+ expandAllButtonTitle: string;
11
+ expandButtonTitle: string;
12
+ filterTextFieldClearButtonTitle: string;
13
+ filterTextFieldPlaceholder: string;
14
+ rowActionButtonCancel: string;
15
+ rowActionButtonSave: string;
16
+ rowActionMenuButtonTitle: string;
17
+ rowActionMenuItemEdit: string;
18
+ rowActionsColumnTitle: string;
19
+ searchTextFieldClearButtonTitle: string;
20
+ searchTextFieldPlaceholder: string;
21
+ selectAllCheckboxTitle: string;
22
+ showHideColumnsButtonTitle: string;
23
+ toggleDensePaddingSwitchTitle: string;
24
+ toggleFilterButtonTitle: string;
14
25
  }
15
26
  export declare const defaultLocalization: MRT_Localization;
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.2.0",
2
+ "version": "0.3.3",
3
3
  "license": "MIT",
4
4
  "name": "material-react-table",
5
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.",
@@ -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,7 +24,7 @@
24
24
  "src"
25
25
  ],
26
26
  "engines": {
27
- "node": ">=14"
27
+ "node": ">=12"
28
28
  },
29
29
  "scripts": {
30
30
  "start": "tsdx watch",
@@ -35,7 +35,8 @@
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,24 +55,25 @@
54
55
  }
55
56
  ],
56
57
  "devDependencies": {
57
- "@babel/core": "^7.16.10",
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.3",
61
- "@mui/icons-material": "^5.3.0",
62
- "@mui/material": "^5.3.0",
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-actions": "^6.4.13",
66
+ "@storybook/addon-a11y": "^6.4.18",
67
+ "@storybook/addon-actions": "^6.4.18",
66
68
  "@storybook/addon-console": "^1.2.3",
67
- "@storybook/addon-essentials": "^6.4.13",
69
+ "@storybook/addon-essentials": "^6.4.18",
68
70
  "@storybook/addon-info": "^5.3.21",
69
- "@storybook/addon-links": "^6.4.13",
70
- "@storybook/addon-storysource": "^6.4.13",
71
- "@storybook/addons": "^6.4.13",
72
- "@storybook/react": "^6.4.13",
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",
73
75
  "@types/faker": "^6.6.8",
74
- "@types/react": "^17.0.38",
76
+ "@types/react": "^17.0.39",
75
77
  "@types/react-dom": "^17.0.11",
76
78
  "@types/react-table": "^7.7.9",
77
79
  "babel-loader": "^8.2.3",
@@ -83,6 +85,7 @@
83
85
  "react-table": "^7.7.0",
84
86
  "size-limit": "^7.0.5",
85
87
  "storybook-addon-performance": "^0.16.1",
88
+ "storybook-dark-mode": "^1.0.8",
86
89
  "tsdx": "^0.14.1",
87
90
  "tslib": "^2.3.1",
88
91
  "typescript": "^4.5.5"
@@ -91,7 +94,7 @@
91
94
  "@emotion/react": ">=11",
92
95
  "@mui/icons-material": ">=5",
93
96
  "@mui/material": ">=5",
94
- "react": ">=17",
97
+ "react": ">=16.8",
95
98
  "react-table": ">=7"
96
99
  }
97
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';
@@ -7,8 +7,8 @@ import {
7
7
  TableHeadProps,
8
8
  TablePaginationProps,
9
9
  TableProps,
10
+ TableRowProps,
10
11
  TextFieldProps,
11
- Theme,
12
12
  ToolbarProps,
13
13
  TypographyProps,
14
14
  } from '@mui/material';
@@ -18,115 +18,143 @@ import {
18
18
  HeaderGroup,
19
19
  Row,
20
20
  TableInstance,
21
- UseRowStateLocalState,
21
+ TableOptions,
22
+ UseExpandedOptions,
23
+ UseFiltersOptions,
24
+ UseGlobalFiltersOptions,
25
+ UseGroupByOptions,
26
+ UsePaginationOptions,
27
+ UseResizeColumnsOptions,
28
+ UseRowSelectOptions,
29
+ UseRowStateOptions,
30
+ UseSortByOptions,
22
31
  } from 'react-table';
23
32
  import { MaterialReactTableProvider } from './useMaterialReactTable';
24
33
  import { MRT_TableContainer } from './table/MRT_TableContainer';
25
34
  import { defaultLocalization, MRT_Localization } from './utils/localization';
26
35
 
27
- export interface MaterialReactTableProps<D extends {} = {}> {
28
- columns: Column<D | {}>[];
29
- data: D[];
30
- enableColumnActions?: boolean;
31
- enableColumnHiding?: boolean;
32
- enableColumnReordering?: boolean;
33
- enableColumnResizing?: boolean;
34
- enableExpandAll?: boolean;
35
- enableFiltering?: boolean;
36
- enablePagination?: boolean;
37
- enableSearch?: boolean;
38
- enableSelectAll?: boolean;
39
- enableSelection?: boolean;
40
- enableSorting?: boolean;
41
- enableSubRowTree?: boolean;
42
- isLoading?: boolean;
43
- isReloading?: boolean;
44
- localization?: MRT_Localization;
45
- onRowClick?: (
46
- event: MouseEvent<HTMLTableRowElement>,
47
- rowData: Row<D>,
48
- ) => void;
49
- onRowSelectChange?: (
50
- event: ChangeEvent,
51
- rowState: UseRowStateLocalState<D, unknown>,
52
- selectedRows: Row<D>[],
53
- ) => void;
54
- positionPagination?: 'bottom' | 'top' | 'both';
55
- renderDetailPanel?: (rowData: Row<D>) => ReactNode;
56
- showFiltersInColumnHead?: boolean;
57
- showFooter?: boolean;
58
- showHead?: boolean;
59
- showToolbar?: boolean;
60
- surpressOverrideWarnings?: boolean;
61
- tableBodyProps?: TableBodyProps;
62
- tableContainerProps?: TableContainerProps;
63
- tableDetailPanelProps?: TableCellProps;
64
- tableFooterProps?: TableFooterProps;
65
- tableToolbarProps?: ToolbarProps;
66
- tableHeadProps?: TableHeadProps;
67
- tablePaginationProps?: TablePaginationProps;
68
- tableProps?: TableProps;
69
- tableSearchTextfieldProps?: TextFieldProps;
70
- tableTitleProps?: TypographyProps;
71
- theme?: Theme;
72
- title?: string | ReactNode;
73
- OverrideTableBodyCellComponent?(
74
- cell: Cell<D>,
75
- tableInstance: TableInstance<D>,
76
- ): ReactNode;
77
- OverrideTableBodyComponent?(tableInstance: TableInstance<D>): ReactNode;
78
- OverrideTableBodyRowComponent?(
79
- row: Row<D>,
80
- tableInstance: TableInstance<D>,
81
- ): ReactNode;
82
- OverrideTableDetailPanelComponent?(
83
- row: Row<D>,
84
- tableInstance: TableInstance<D>,
85
- ): ReactNode;
86
- OverrideTableFooterComponent?(tableInstance: TableInstance<D>): ReactNode;
87
- OverrideTableFooterCellComponent?(
88
- column: HeaderGroup<D>,
89
- tableInstance: TableInstance<D>,
90
- ): ReactNode;
91
- OverrideTableFooterRowComponent?(
92
- footerGroup: HeaderGroup<D>,
93
- tableInstance: TableInstance<D>,
94
- ): ReactNode;
95
- OverrideTableHeadCellComponent?(
96
- column: HeaderGroup<D>,
97
- tableInstance: TableInstance<D>,
98
- ): ReactNode;
99
- OverrideTableHeadComponent?(tableInstance: TableInstance<D>): ReactNode;
100
- OverrideTableHeadRowComponent?(
101
- headerGroup: HeaderGroup<D>,
102
- tableInstance: TableInstance<D>,
103
- ): ReactNode;
104
- OverrideTablePaginationComponent?(tableInstance: TableInstance<D>): ReactNode;
105
- OverrideTableToolbarComponent?(tableInstance: TableInstance<D>): ReactNode;
106
- }
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
+ };
107
143
 
108
- export const MaterialReactTable = <D extends {}>({
109
- enablePagination = true,
110
- enableSorting = true,
111
- enableSubRowTree = true,
144
+ export default <D extends {}>({
145
+ defaultColumn = { minWidth: 50, maxWidth: 1000 },
112
146
  localization = defaultLocalization,
147
+ positionActionsColumn = 'first',
113
148
  positionPagination = 'bottom',
114
- showFiltersInColumnHead = true,
115
- showFooter = true,
116
- showHead = true,
117
- showToolbar = true,
149
+ positionToolbarActions = 'top',
118
150
  ...rest
119
151
  }: MaterialReactTableProps<D>) => (
120
152
  <MaterialReactTableProvider
121
- enablePagination={enablePagination}
122
- enableSorting={enableSorting}
123
- enableSubRowTree={enableSubRowTree}
153
+ defaultColumn={defaultColumn}
124
154
  localization={{ ...defaultLocalization, ...localization }}
125
155
  positionPagination={positionPagination}
126
- showFiltersInColumnHead={showFiltersInColumnHead}
127
- showFooter={showFooter}
128
- showHead={showHead}
129
- showToolbar={showToolbar}
156
+ positionActionsColumn={positionActionsColumn}
157
+ positionToolbarActions={positionToolbarActions}
130
158
  {...rest}
131
159
  >
132
160
  <MRT_TableContainer />
@@ -1,9 +1,5 @@
1
1
  import React, { FC } from 'react';
2
- import {
3
- CircularProgress,
4
- styled,
5
- TableBody as MuiTableBody,
6
- } from '@mui/material';
2
+ import { styled, TableBody as MuiTableBody } from '@mui/material';
7
3
  import { MRT_TableBodyRow } from './MRT_TableBodyRow';
8
4
  import { useMaterialReactTable } from '../useMaterialReactTable';
9
5
 
@@ -11,47 +7,29 @@ const TableBody = styled(MuiTableBody)({
11
7
  overflowY: 'hidden',
12
8
  });
13
9
 
14
- const CircularProgressWrapper = styled('div')({
15
- backgroundColor: 'rgba(255, 255, 255, 0.5)',
16
- display: 'grid',
17
- height: '100%',
18
- justifyContent: 'center',
19
- margin: 'auto',
20
- paddingTop: '5rem',
21
- position: 'fixed',
22
- width: 'calc(100% - 2rem)',
23
- });
24
-
25
10
  interface Props {}
26
11
 
27
12
  export const MRT_TableBody: FC<Props> = () => {
28
- const {
29
- tableInstance,
30
- tableBodyProps,
31
- isLoading,
32
- enablePagination,
33
- OverrideTableBodyComponent,
34
- } = useMaterialReactTable();
13
+ const { tableInstance, muiTableBodyProps, manualPagination } =
14
+ useMaterialReactTable();
35
15
 
36
- if (OverrideTableBodyComponent) {
37
- return <>{OverrideTableBodyComponent(tableInstance)}</>;
38
- }
16
+ const rows = manualPagination ? tableInstance.rows : tableInstance.page;
39
17
 
40
- const rows = enablePagination ? tableInstance.page : tableInstance.rows;
18
+ const tableBodyProps = {
19
+ ...muiTableBodyProps,
20
+ ...tableInstance.getTableBodyProps(),
21
+ style: {
22
+ ...tableInstance.getTableBodyProps().style,
23
+ ...(muiTableBodyProps?.style ?? {}),
24
+ },
25
+ };
41
26
 
42
27
  return (
43
- <>
44
- <TableBody {...tableBodyProps} {...tableInstance.getTableBodyProps()}>
45
- {isLoading && (
46
- <CircularProgressWrapper>
47
- <CircularProgress />
48
- </CircularProgressWrapper>
49
- )}
50
- {rows.map((row, index) => {
51
- tableInstance.prepareRow(row);
52
- return <MRT_TableBodyRow key={`${index}-${row.id}`} row={row} />;
53
- })}
54
- </TableBody>
55
- </>
28
+ <TableBody {...tableBodyProps}>
29
+ {rows.map((row) => {
30
+ tableInstance.prepareRow(row);
31
+ return <MRT_TableBodyRow key={row.getRowProps().key} row={row} />;
32
+ })}
33
+ </TableBody>
56
34
  );
57
35
  };