material-react-table 0.3.4 → 0.4.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.
- package/dist/MaterialReactTable.d.ts +9 -4
- package/dist/body/MRT_TableBodyCell.d.ts +3 -0
- package/dist/buttons/MRT_FullScreenToggleButton.d.ts +4 -0
- package/dist/head/MRT_TableHeadCell.d.ts +1 -1
- package/dist/head/MRT_TableHeadCellActions.d.ts +5 -0
- package/dist/material-react-table.cjs.development.js +420 -278
- package/dist/material-react-table.cjs.development.js.map +1 -1
- package/dist/material-react-table.cjs.production.min.js +1 -1
- package/dist/material-react-table.cjs.production.min.js.map +1 -1
- package/dist/material-react-table.esm.js +424 -282
- package/dist/material-react-table.esm.js.map +1 -1
- package/dist/toolbar/MRT_ToolbarAlertBanner.d.ts +5 -0
- package/dist/toolbar/MRT_ToolbarInternalButtons.d.ts +5 -0
- package/dist/{useMaterialReactTable.d.ts → useMRT.d.ts} +6 -3
- package/dist/utils/localization.d.ts +6 -0
- package/package.json +14 -14
- package/src/@types/react-table-config.d.ts +56 -31
- package/src/MaterialReactTable.tsx +67 -19
- package/src/body/MRT_TableBody.tsx +2 -2
- package/src/body/MRT_TableBodyCell.tsx +16 -9
- package/src/body/MRT_TableBodyRow.tsx +22 -7
- package/src/body/MRT_TableDetailPanel.tsx +14 -5
- package/src/buttons/MRT_EditActionButtons.tsx +11 -4
- package/src/buttons/MRT_ExpandAllButton.tsx +6 -3
- package/src/buttons/MRT_ExpandButton.tsx +9 -3
- package/src/buttons/MRT_FullScreenToggleButton.tsx +23 -0
- package/src/buttons/MRT_ShowHideColumnsButton.tsx +43 -5
- package/src/buttons/MRT_ToggleColumnActionMenuButton.tsx +7 -3
- package/src/buttons/MRT_ToggleFiltersButton.tsx +2 -2
- package/src/buttons/MRT_ToggleRowActionMenuButton.tsx +7 -3
- package/src/buttons/MRT_ToggleSearchButton.tsx +7 -3
- package/src/footer/MRT_TableFooter.tsx +6 -3
- package/src/footer/MRT_TableFooterCell.tsx +5 -3
- package/src/footer/MRT_TableFooterRow.tsx +17 -6
- package/src/head/MRT_TableHead.tsx +9 -4
- package/src/head/MRT_TableHeadCell.tsx +11 -7
- package/src/head/MRT_TableHeadCellActions.tsx +18 -0
- package/src/head/MRT_TableHeadRow.tsx +19 -12
- package/src/inputs/MRT_DensePaddingSwitch.tsx +2 -2
- package/src/inputs/MRT_EditCellTextField.tsx +2 -2
- package/src/inputs/MRT_FilterTextField.tsx +6 -3
- package/src/inputs/MRT_SearchTextField.tsx +15 -7
- package/src/inputs/MRT_SelectAllCheckbox.tsx +3 -2
- package/src/inputs/MRT_SelectCheckbox.tsx +3 -2
- package/src/menus/MRT_ColumnActionMenu.tsx +40 -13
- package/src/menus/MRT_RowActionMenu.tsx +21 -6
- package/src/menus/MRT_ShowHideColumnsMenu.tsx +24 -15
- package/src/table/MRT_Table.tsx +3 -2
- package/src/table/MRT_TableContainer.tsx +37 -6
- package/src/table/MRT_TableSpacerCell.tsx +5 -3
- package/src/toolbar/MRT_TablePagination.tsx +9 -5
- package/src/toolbar/MRT_ToolbarAlertBanner.tsx +102 -0
- package/src/toolbar/MRT_ToolbarBottom.tsx +14 -8
- package/src/toolbar/{MRT_ToolbarButtons.tsx → MRT_ToolbarInternalButtons.tsx} +11 -4
- package/src/toolbar/MRT_ToolbarTop.tsx +19 -11
- package/src/{useMaterialReactTable.tsx → useMRT.tsx} +43 -19
- package/src/utils/localization.ts +14 -2
- package/dist/toolbar/MRT_ToolbarButtons.d.ts +0 -5
- package/dist/utils/useMRTCalcs.d.ts +0 -11
- package/src/utils/useMRTCalcs.tsx +0 -40
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import React, { PropsWithChildren } from 'react';
|
|
2
2
|
import { Row, TableInstance } from 'react-table';
|
|
3
3
|
import { MaterialReactTableProps } from './MaterialReactTable';
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
export interface UseMRT<D extends {} = {}> extends MaterialReactTableProps<D> {
|
|
5
|
+
anyRowsCanExpand: boolean;
|
|
6
|
+
anyRowsExpanded: boolean;
|
|
6
7
|
currentEditingRow: Row<D> | null;
|
|
7
8
|
densePadding: boolean;
|
|
9
|
+
fullScreen: boolean;
|
|
8
10
|
setCurrentEditingRow: (currentRowEditingId: Row<D> | null) => void;
|
|
9
11
|
setDensePadding: (densePadding: boolean) => void;
|
|
12
|
+
setFullScreen: (fullScreen: boolean) => void;
|
|
10
13
|
setShowFilters: (showFilters: boolean) => void;
|
|
11
14
|
setShowSearch: (showSearch: boolean) => void;
|
|
12
15
|
showFilters: boolean;
|
|
@@ -14,4 +17,4 @@ export interface UseMaterialReactTable<D extends {}> extends MaterialReactTableP
|
|
|
14
17
|
tableInstance: TableInstance<D>;
|
|
15
18
|
}
|
|
16
19
|
export declare const MaterialReactTableProvider: <D extends {}>(props: React.PropsWithChildren<MaterialReactTableProps<D>>) => JSX.Element;
|
|
17
|
-
export declare const
|
|
20
|
+
export declare const useMRT: <D extends {}>() => UseMRT<D>;
|
|
@@ -7,6 +7,8 @@ export interface MRT_Localization {
|
|
|
7
7
|
columnActionMenuItemSortAsc: string;
|
|
8
8
|
columnActionMenuItemSortDesc: string;
|
|
9
9
|
columnActionMenuItemUnGroupBy: string;
|
|
10
|
+
columnShowHideMenuHideAll: string;
|
|
11
|
+
columnShowHideMenuShowAll: string;
|
|
10
12
|
expandAllButtonTitle: string;
|
|
11
13
|
expandButtonTitle: string;
|
|
12
14
|
filterTextFieldClearButtonTitle: string;
|
|
@@ -23,6 +25,10 @@ export interface MRT_Localization {
|
|
|
23
25
|
showHideColumnsButtonTitle: string;
|
|
24
26
|
toggleDensePaddingSwitchTitle: string;
|
|
25
27
|
toggleFilterButtonTitle: string;
|
|
28
|
+
toggleFullScreenButtonTitle: string;
|
|
26
29
|
toggleSearchButtonTitle: string;
|
|
30
|
+
toolbarAlertSelectionMessage: string;
|
|
31
|
+
toolbarAlertGroupedByMessage: string;
|
|
32
|
+
toolbarAlertGroupedThenByMessage: string;
|
|
27
33
|
}
|
|
28
34
|
export declare const defaultLocalization: MRT_Localization;
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.
|
|
2
|
+
"version": "0.4.2",
|
|
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.",
|
|
@@ -56,23 +56,23 @@
|
|
|
56
56
|
}
|
|
57
57
|
],
|
|
58
58
|
"devDependencies": {
|
|
59
|
-
"@babel/core": "^7.17.
|
|
59
|
+
"@babel/core": "^7.17.4",
|
|
60
60
|
"@emotion/react": "^11.7.1",
|
|
61
61
|
"@emotion/styled": "^11.6.0",
|
|
62
62
|
"@etchteam/storybook-addon-status": "^4.2.0",
|
|
63
|
-
"@faker-js/faker": "^6.0.0-alpha.
|
|
64
|
-
"@mui/icons-material": "^5.
|
|
65
|
-
"@mui/material": "^5.4.
|
|
66
|
-
"@size-limit/preset-small-lib": "^7.0.
|
|
67
|
-
"@storybook/addon-a11y": "^6.4.
|
|
68
|
-
"@storybook/addon-actions": "^6.4.
|
|
63
|
+
"@faker-js/faker": "^6.0.0-alpha.6",
|
|
64
|
+
"@mui/icons-material": "^5.4.2",
|
|
65
|
+
"@mui/material": "^5.4.2",
|
|
66
|
+
"@size-limit/preset-small-lib": "^7.0.8",
|
|
67
|
+
"@storybook/addon-a11y": "^6.4.19",
|
|
68
|
+
"@storybook/addon-actions": "^6.4.19",
|
|
69
69
|
"@storybook/addon-console": "^1.2.3",
|
|
70
|
-
"@storybook/addon-essentials": "^6.4.
|
|
70
|
+
"@storybook/addon-essentials": "^6.4.19",
|
|
71
71
|
"@storybook/addon-info": "^5.3.21",
|
|
72
|
-
"@storybook/addon-links": "^6.4.
|
|
73
|
-
"@storybook/addon-storysource": "^6.4.
|
|
74
|
-
"@storybook/addons": "^6.4.
|
|
75
|
-
"@storybook/react": "^6.4.
|
|
72
|
+
"@storybook/addon-links": "^6.4.19",
|
|
73
|
+
"@storybook/addon-storysource": "^6.4.19",
|
|
74
|
+
"@storybook/addons": "^6.4.19",
|
|
75
|
+
"@storybook/react": "^6.4.19",
|
|
76
76
|
"@types/faker": "^6.6.8",
|
|
77
77
|
"@types/react": "^17.0.39",
|
|
78
78
|
"@types/react-dom": "^17.0.11",
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
"react-dom": "^17.0.2",
|
|
85
85
|
"react-is": "^17.0.2",
|
|
86
86
|
"react-table": "^7.7.0",
|
|
87
|
-
"size-limit": "^7.0.
|
|
87
|
+
"size-limit": "^7.0.8",
|
|
88
88
|
"storybook-addon-paddings": "^4.2.1",
|
|
89
89
|
"storybook-addon-performance": "^0.16.1",
|
|
90
90
|
"storybook-dark-mode": "^1.0.8",
|
|
@@ -50,23 +50,40 @@ import {
|
|
|
50
50
|
UseSortByState,
|
|
51
51
|
} from 'react-table';
|
|
52
52
|
|
|
53
|
-
export type MRT_ColumnInterface<D extends {} = {}> =
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
53
|
+
export type MRT_ColumnInterface<D extends {} = {}> =
|
|
54
|
+
UseFiltersColumnOptions<D> &
|
|
55
|
+
UseGlobalFiltersColumnOptions<D> &
|
|
56
|
+
UseGroupByColumnOptions<D> &
|
|
57
|
+
UseResizeColumnsColumnOptions<D> &
|
|
58
|
+
UseSortByColumnOptions<D> & {
|
|
59
|
+
disableFilters?: boolean;
|
|
60
|
+
Filter?: ({ column }: { column: HeaderGroup<D> }) => ReactNode;
|
|
61
|
+
editable?: boolean;
|
|
62
|
+
Edit?: ({ cell, onChange }: { cell: Cell<D> }) => ReactNode;
|
|
63
|
+
muiTableBodyCellProps?:
|
|
64
|
+
| TableCellProps
|
|
65
|
+
| ((cell: Cell<D>) => TableCellProps);
|
|
66
|
+
muiTableHeadCellProps?:
|
|
67
|
+
| TableCellProps
|
|
68
|
+
| ((column: Column<D>) => TableCellProps);
|
|
69
|
+
muiTableFooterCellProps?:
|
|
70
|
+
| TableCellProps
|
|
71
|
+
| ((column: Column<D>) => TableCellProps);
|
|
72
|
+
muiTableBodyCellEditTextFieldProps?:
|
|
73
|
+
| TextFieldProps
|
|
74
|
+
| ((cell: Cell<D>) => TextFieldProps);
|
|
75
|
+
muiTableHeadCellFilterTextFieldProps?:
|
|
76
|
+
| TextFieldProps
|
|
77
|
+
| ((column: Column<D>) => TextFieldProps);
|
|
78
|
+
onCellEditChange?: (
|
|
79
|
+
event: ChangeEvent<HTMLInputElement>,
|
|
80
|
+
cell: Cell<D>,
|
|
81
|
+
) => void;
|
|
82
|
+
onFilterChange?: (
|
|
83
|
+
event: ChangeEvent<HTMLInputElement>,
|
|
84
|
+
filterValue: any,
|
|
85
|
+
) => void;
|
|
86
|
+
};
|
|
70
87
|
|
|
71
88
|
declare module 'react-table' {
|
|
72
89
|
export interface TableOptions<D extends Record<string, unknown>>
|
|
@@ -81,14 +98,16 @@ declare module 'react-table' {
|
|
|
81
98
|
UseSortByOptions<D>,
|
|
82
99
|
Record<string, any> {}
|
|
83
100
|
|
|
84
|
-
export interface Hooks<
|
|
85
|
-
extends
|
|
101
|
+
export interface Hooks<
|
|
102
|
+
D extends Record<string, unknown> = Record<string, unknown>,
|
|
103
|
+
> extends UseExpandedHooks<D>,
|
|
86
104
|
UseGroupByHooks<D>,
|
|
87
105
|
UseRowSelectHooks<D>,
|
|
88
106
|
UseSortByHooks<D> {}
|
|
89
107
|
|
|
90
|
-
export interface TableInstance<
|
|
91
|
-
extends
|
|
108
|
+
export interface TableInstance<
|
|
109
|
+
D extends Record<string, unknown> = Record<string, unknown>,
|
|
110
|
+
> extends UseColumnOrderInstanceProps<D>,
|
|
92
111
|
UseExpandedInstanceProps<D>,
|
|
93
112
|
UseFiltersInstanceProps<D>,
|
|
94
113
|
UseGlobalFiltersInstanceProps<D>,
|
|
@@ -98,8 +117,9 @@ declare module 'react-table' {
|
|
|
98
117
|
UseRowStateInstanceProps<D>,
|
|
99
118
|
UseSortByInstanceProps<D> {}
|
|
100
119
|
|
|
101
|
-
export interface TableState<
|
|
102
|
-
extends
|
|
120
|
+
export interface TableState<
|
|
121
|
+
D extends Record<string, unknown> = Record<string, unknown>,
|
|
122
|
+
> extends UseColumnOrderState<D>,
|
|
103
123
|
UseExpandedState<D>,
|
|
104
124
|
UseFiltersState<D>,
|
|
105
125
|
UseGlobalFiltersState<D>,
|
|
@@ -110,21 +130,26 @@ declare module 'react-table' {
|
|
|
110
130
|
UseRowStateState<D>,
|
|
111
131
|
UseSortByState<D> {}
|
|
112
132
|
|
|
113
|
-
export interface ColumnInterface<
|
|
114
|
-
extends
|
|
133
|
+
export interface ColumnInterface<
|
|
134
|
+
D extends Record<string, unknown> = Record<string, unknown>,
|
|
135
|
+
> extends MRT_ColumnInterface {}
|
|
115
136
|
|
|
116
|
-
export interface ColumnInstance<
|
|
117
|
-
extends
|
|
137
|
+
export interface ColumnInstance<
|
|
138
|
+
D extends Record<string, unknown> = Record<string, unknown>,
|
|
139
|
+
> extends UseFiltersColumnProps<D>,
|
|
118
140
|
UseGroupByColumnProps<D>,
|
|
119
141
|
UseResizeColumnsColumnProps<D>,
|
|
120
142
|
UseSortByColumnProps<D> {}
|
|
121
143
|
|
|
122
|
-
export interface Cell<
|
|
123
|
-
extends
|
|
144
|
+
export interface Cell<
|
|
145
|
+
D extends Record<string, unknown> = Record<string, unknown>,
|
|
146
|
+
V = any,
|
|
147
|
+
> extends UseGroupByCellProps<D>,
|
|
124
148
|
UseRowStateCellProps<D> {}
|
|
125
149
|
|
|
126
|
-
export interface Row<
|
|
127
|
-
extends
|
|
150
|
+
export interface Row<
|
|
151
|
+
D extends Record<string, unknown> = Record<string, unknown>,
|
|
152
|
+
> extends UseExpandedRowProps<D>,
|
|
128
153
|
UseGroupByRowProps<D>,
|
|
129
154
|
UseRowSelectRowProps<D>,
|
|
130
155
|
UseRowStateRowProps<D> {}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React, { ChangeEvent, MouseEvent, ReactNode } from 'react';
|
|
2
2
|
import {
|
|
3
|
+
AlertProps,
|
|
3
4
|
TableBodyProps,
|
|
4
5
|
TableCellProps,
|
|
5
6
|
TableContainerProps,
|
|
@@ -29,7 +30,7 @@ import {
|
|
|
29
30
|
UseSortByOptions,
|
|
30
31
|
UseTableOptions,
|
|
31
32
|
} from 'react-table';
|
|
32
|
-
import { MaterialReactTableProvider } from './
|
|
33
|
+
import { MaterialReactTableProvider } from './useMRT';
|
|
33
34
|
import { MRT_TableContainer } from './table/MRT_TableContainer';
|
|
34
35
|
import { defaultLocalization, MRT_Localization } from './utils/localization';
|
|
35
36
|
import { MRT_ColumnInterface } from './@types/react-table-config';
|
|
@@ -47,14 +48,17 @@ export type MaterialReactTableProps<D extends {} = {}> = TableOptions<D> &
|
|
|
47
48
|
UseSortByOptions<D> & {
|
|
48
49
|
columns: (Column<D> & MRT_ColumnInterface)[];
|
|
49
50
|
defaultDensePadding?: boolean;
|
|
51
|
+
defaultFullScreen?: boolean;
|
|
50
52
|
defaultShowFilters?: boolean;
|
|
51
53
|
defaultShowSearchTextField?: boolean;
|
|
52
54
|
disableColumnActions?: boolean;
|
|
53
55
|
disableColumnHiding?: boolean;
|
|
54
56
|
disableDensePaddingToggle?: boolean;
|
|
55
57
|
disableExpandAll?: boolean;
|
|
58
|
+
disableFullScreenToggle?: boolean;
|
|
56
59
|
disableSelectAll?: boolean;
|
|
57
60
|
disableSubRowTree?: boolean;
|
|
61
|
+
enableRowNumbers?: boolean;
|
|
58
62
|
enableColumnGrouping?: boolean;
|
|
59
63
|
enableColumnResizing?: boolean;
|
|
60
64
|
enableRowActions?: boolean;
|
|
@@ -69,44 +73,86 @@ export type MaterialReactTableProps<D extends {} = {}> = TableOptions<D> &
|
|
|
69
73
|
isLoading?: boolean;
|
|
70
74
|
localization?: Partial<MRT_Localization>;
|
|
71
75
|
muiSearchTextFieldProps?: TextFieldProps;
|
|
72
|
-
muiTableBodyCellEditTextFieldProps?:
|
|
73
|
-
|
|
76
|
+
muiTableBodyCellEditTextFieldProps?:
|
|
77
|
+
| TextFieldProps
|
|
78
|
+
| ((cell?: Cell<D>) => TextFieldProps);
|
|
79
|
+
muiTableBodyCellProps?:
|
|
80
|
+
| TableCellProps
|
|
81
|
+
| ((cell?: Cell<D>) => TableCellProps);
|
|
74
82
|
muiTableBodyProps?: TableBodyProps;
|
|
75
83
|
muiTableBodyRowProps?: TableRowProps | ((row: Row<D>) => TableRowProps);
|
|
76
|
-
muiTableContainerProps?:
|
|
77
|
-
|
|
78
|
-
|
|
84
|
+
muiTableContainerProps?:
|
|
85
|
+
| TableContainerProps
|
|
86
|
+
| ((table: TableInstance<D>) => TableContainerProps);
|
|
87
|
+
muiTableDetailPanelProps?:
|
|
88
|
+
| TableCellProps
|
|
89
|
+
| ((row: Row<D>) => TableCellProps);
|
|
90
|
+
muiTableFooterCellProps?:
|
|
91
|
+
| TableCellProps
|
|
92
|
+
| ((column: Column<D>) => TableCellProps);
|
|
79
93
|
muiTableFooterProps?: TableFooterProps;
|
|
80
|
-
muiTableFooterRowProps?:
|
|
81
|
-
|
|
82
|
-
|
|
94
|
+
muiTableFooterRowProps?:
|
|
95
|
+
| TableRowProps
|
|
96
|
+
| ((footerGroup: HeaderGroup<D>) => TableRowProps);
|
|
97
|
+
muiTableHeadCellFilterTextFieldProps?:
|
|
98
|
+
| TextFieldProps
|
|
99
|
+
| ((column: Column<D>) => TextFieldProps);
|
|
100
|
+
muiTableHeadCellProps?:
|
|
101
|
+
| TableCellProps
|
|
102
|
+
| ((column: Column<D>) => TableCellProps);
|
|
83
103
|
muiTableHeadProps?: TableHeadProps;
|
|
84
|
-
muiTableHeadRowProps?:
|
|
104
|
+
muiTableHeadRowProps?:
|
|
105
|
+
| TableRowProps
|
|
106
|
+
| ((row: HeaderGroup<D>) => TableRowProps);
|
|
85
107
|
muiTablePaginationProps?:
|
|
86
108
|
| Partial<TablePaginationProps>
|
|
87
109
|
| ((tableInstance: TableInstance<D>) => Partial<TablePaginationProps>);
|
|
88
110
|
muiTableProps?: TableProps;
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
111
|
+
muiTableToolbarAlertBannerProps?:
|
|
112
|
+
| AlertProps
|
|
113
|
+
| ((tableInstance: TableInstance<D>) => AlertProps);
|
|
114
|
+
muiTableToolbarBottomProps?:
|
|
115
|
+
| ToolbarProps
|
|
116
|
+
| ((tableInstance: TableInstance<D>) => ToolbarProps);
|
|
117
|
+
muiTableToolbarTopProps?:
|
|
118
|
+
| ToolbarProps
|
|
119
|
+
| ((tableInstance: TableInstance<D>) => ToolbarProps);
|
|
120
|
+
onCellClick?: (
|
|
121
|
+
event: MouseEvent<HTMLTableCellElement>,
|
|
122
|
+
cell: Cell<D>,
|
|
123
|
+
) => void;
|
|
92
124
|
onColumnHide?: (column: Column<D>, visibleColumns: Column<D>[]) => void;
|
|
93
|
-
onDetailPanelClick?: (
|
|
125
|
+
onDetailPanelClick?: (
|
|
126
|
+
event: MouseEvent<HTMLTableCellElement>,
|
|
127
|
+
row: Row<D>,
|
|
128
|
+
) => void;
|
|
94
129
|
onGlobalFilterChange?: (event: ChangeEvent<HTMLInputElement>) => void;
|
|
95
130
|
onRowClick?: (event: MouseEvent<HTMLTableRowElement>, row: Row<D>) => void;
|
|
96
131
|
onRowEditSubmit?: (row: Row<D>) => Promise<void> | void;
|
|
97
|
-
onRowExpandChange?: (
|
|
98
|
-
|
|
132
|
+
onRowExpandChange?: (
|
|
133
|
+
event: MouseEvent<HTMLButtonElement>,
|
|
134
|
+
row: Row<D>,
|
|
135
|
+
) => void;
|
|
136
|
+
onRowSelectChange?: (
|
|
137
|
+
event: ChangeEvent,
|
|
138
|
+
row: Row<D>,
|
|
139
|
+
selectedRows: Row<D>[],
|
|
140
|
+
) => void;
|
|
99
141
|
positionActionsColumn?: 'first' | 'last';
|
|
100
142
|
positionPagination?: 'bottom' | 'top' | 'both';
|
|
101
143
|
positionToolbarActions?: 'bottom' | 'top';
|
|
144
|
+
positionToolbarAlertBanner?: 'bottom' | 'top';
|
|
102
145
|
renderDetailPanel?: (row: Row<D>) => ReactNode;
|
|
103
146
|
renderRowActionMenuItems?: (
|
|
104
147
|
rowData: Row<D>,
|
|
105
148
|
tableInstance: TableInstance<D>,
|
|
106
149
|
closeMenu: () => void,
|
|
107
150
|
) => ReactNode[];
|
|
108
|
-
renderRowActions?: (
|
|
109
|
-
|
|
151
|
+
renderRowActions?: (
|
|
152
|
+
row: Row<D>,
|
|
153
|
+
tableInstance: TableInstance<D>,
|
|
154
|
+
) => ReactNode;
|
|
155
|
+
renderToolbarCustomActions?: (tableInstance: TableInstance<D>) => ReactNode;
|
|
110
156
|
};
|
|
111
157
|
|
|
112
158
|
export default <D extends {}>({
|
|
@@ -115,14 +161,16 @@ export default <D extends {}>({
|
|
|
115
161
|
positionActionsColumn = 'first',
|
|
116
162
|
positionPagination = 'bottom',
|
|
117
163
|
positionToolbarActions = 'top',
|
|
164
|
+
positionToolbarAlertBanner = 'top',
|
|
118
165
|
...rest
|
|
119
166
|
}: MaterialReactTableProps<D>) => (
|
|
120
167
|
<MaterialReactTableProvider
|
|
121
168
|
defaultColumn={defaultColumn}
|
|
122
169
|
localization={{ ...defaultLocalization, ...localization }}
|
|
123
|
-
positionPagination={positionPagination}
|
|
124
170
|
positionActionsColumn={positionActionsColumn}
|
|
171
|
+
positionPagination={positionPagination}
|
|
125
172
|
positionToolbarActions={positionToolbarActions}
|
|
173
|
+
positionToolbarAlertBanner={positionToolbarAlertBanner}
|
|
126
174
|
{...rest}
|
|
127
175
|
>
|
|
128
176
|
<MRT_TableContainer />
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { FC } from 'react';
|
|
2
2
|
import { styled, TableBody as MuiTableBody } from '@mui/material';
|
|
3
3
|
import { MRT_TableBodyRow } from './MRT_TableBodyRow';
|
|
4
|
-
import {
|
|
4
|
+
import { useMRT } from '../useMRT';
|
|
5
5
|
|
|
6
6
|
const TableBody = styled(MuiTableBody)({
|
|
7
7
|
overflowY: 'hidden',
|
|
@@ -10,7 +10,7 @@ const TableBody = styled(MuiTableBody)({
|
|
|
10
10
|
interface Props {}
|
|
11
11
|
|
|
12
12
|
export const MRT_TableBody: FC<Props> = () => {
|
|
13
|
-
const { tableInstance, muiTableBodyProps, manualPagination } =
|
|
13
|
+
const { tableInstance, muiTableBodyProps, manualPagination } = useMRT();
|
|
14
14
|
|
|
15
15
|
const rows = manualPagination ? tableInstance.rows : tableInstance.page;
|
|
16
16
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import React, { FC, MouseEvent } from 'react';
|
|
2
2
|
import { styled, TableCell as MuiTableCell } from '@mui/material';
|
|
3
3
|
import { Cell } from 'react-table';
|
|
4
|
-
import {
|
|
4
|
+
import { useMRT } from '../useMRT';
|
|
5
5
|
import { MRT_EditCellTextField } from '../inputs/MRT_EditCellTextField';
|
|
6
6
|
|
|
7
|
-
const
|
|
7
|
+
export const MRT_StyledTableBodyCell = styled(MuiTableCell, {
|
|
8
8
|
shouldForwardProp: (prop) => prop !== 'densePadding',
|
|
9
9
|
})<{ densePadding?: boolean }>(({ densePadding }) => ({
|
|
10
10
|
padding: densePadding ? '0.5rem' : '1rem',
|
|
@@ -17,11 +17,17 @@ interface Props {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export const MRT_TableBodyCell: FC<Props> = ({ cell }) => {
|
|
20
|
-
const {
|
|
21
|
-
|
|
20
|
+
const {
|
|
21
|
+
onCellClick,
|
|
22
|
+
muiTableBodyCellProps,
|
|
23
|
+
densePadding,
|
|
24
|
+
currentEditingRow,
|
|
25
|
+
} = useMRT();
|
|
22
26
|
|
|
23
27
|
const mTableCellBodyProps =
|
|
24
|
-
muiTableBodyCellProps instanceof Function
|
|
28
|
+
muiTableBodyCellProps instanceof Function
|
|
29
|
+
? muiTableBodyCellProps(cell)
|
|
30
|
+
: muiTableBodyCellProps;
|
|
25
31
|
|
|
26
32
|
const mcTableCellBodyProps =
|
|
27
33
|
cell.column.muiTableBodyCellProps instanceof Function
|
|
@@ -40,9 +46,11 @@ export const MRT_TableBodyCell: FC<Props> = ({ cell }) => {
|
|
|
40
46
|
};
|
|
41
47
|
|
|
42
48
|
return (
|
|
43
|
-
<
|
|
49
|
+
<MRT_StyledTableBodyCell
|
|
44
50
|
densePadding={densePadding}
|
|
45
|
-
onClick={(event: MouseEvent<HTMLTableCellElement>) =>
|
|
51
|
+
onClick={(event: MouseEvent<HTMLTableCellElement>) =>
|
|
52
|
+
onCellClick?.(event, cell)
|
|
53
|
+
}
|
|
46
54
|
{...tableCellProps}
|
|
47
55
|
>
|
|
48
56
|
{currentEditingRow?.id === cell.row.id ? (
|
|
@@ -56,7 +64,6 @@ export const MRT_TableBodyCell: FC<Props> = ({ cell }) => {
|
|
|
56
64
|
) : (
|
|
57
65
|
cell.render('Cell')
|
|
58
66
|
)}
|
|
59
|
-
|
|
60
|
-
</TableCell>
|
|
67
|
+
</MRT_StyledTableBodyCell>
|
|
61
68
|
);
|
|
62
69
|
};
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import React, { FC, MouseEvent } from 'react';
|
|
2
2
|
import { alpha, styled, TableRow as MuiTableRow } from '@mui/material';
|
|
3
3
|
import { Row } from 'react-table';
|
|
4
|
-
import {
|
|
5
|
-
|
|
4
|
+
import {
|
|
5
|
+
MRT_StyledTableBodyCell,
|
|
6
|
+
MRT_TableBodyCell,
|
|
7
|
+
} from './MRT_TableBodyCell';
|
|
8
|
+
import { useMRT } from '../useMRT';
|
|
6
9
|
import { MRT_TableDetailPanel } from './MRT_TableDetailPanel';
|
|
7
10
|
import { MRT_ExpandButton } from '../buttons/MRT_ExpandButton';
|
|
8
11
|
import { MRT_SelectCheckbox } from '../inputs/MRT_SelectCheckbox';
|
|
@@ -11,7 +14,9 @@ import { MRT_ToggleRowActionMenuButton } from '../buttons/MRT_ToggleRowActionMen
|
|
|
11
14
|
export const TableRow = styled(MuiTableRow, {
|
|
12
15
|
shouldForwardProp: (prop) => prop !== 'isSelected',
|
|
13
16
|
})<{ isSelected?: boolean }>(({ isSelected, theme }) => ({
|
|
14
|
-
backgroundColor: isSelected
|
|
17
|
+
backgroundColor: isSelected
|
|
18
|
+
? alpha(theme.palette.primary.light, 0.1)
|
|
19
|
+
: 'transparent',
|
|
15
20
|
}));
|
|
16
21
|
|
|
17
22
|
interface Props {
|
|
@@ -22,15 +27,18 @@ export const MRT_TableBodyRow: FC<Props> = ({ row }) => {
|
|
|
22
27
|
const {
|
|
23
28
|
anyRowsCanExpand,
|
|
24
29
|
enableRowActions,
|
|
30
|
+
enableRowNumbers,
|
|
25
31
|
enableSelection,
|
|
26
32
|
muiTableBodyRowProps,
|
|
27
33
|
onRowClick,
|
|
28
34
|
positionActionsColumn,
|
|
29
35
|
renderDetailPanel,
|
|
30
|
-
} =
|
|
36
|
+
} = useMRT();
|
|
31
37
|
|
|
32
38
|
const mTableBodyRowProps =
|
|
33
|
-
muiTableBodyRowProps instanceof Function
|
|
39
|
+
muiTableBodyRowProps instanceof Function
|
|
40
|
+
? muiTableBodyRowProps(row)
|
|
41
|
+
: muiTableBodyRowProps;
|
|
34
42
|
|
|
35
43
|
const tableRowProps = {
|
|
36
44
|
...mTableBodyRowProps,
|
|
@@ -46,13 +54,20 @@ export const MRT_TableBodyRow: FC<Props> = ({ row }) => {
|
|
|
46
54
|
<TableRow
|
|
47
55
|
isSelected={row.isSelected}
|
|
48
56
|
hover
|
|
49
|
-
onClick={(event: MouseEvent<HTMLTableRowElement>) =>
|
|
57
|
+
onClick={(event: MouseEvent<HTMLTableRowElement>) =>
|
|
58
|
+
onRowClick?.(event, row)
|
|
59
|
+
}
|
|
50
60
|
{...tableRowProps}
|
|
51
61
|
>
|
|
62
|
+
{enableRowNumbers && (
|
|
63
|
+
<MRT_StyledTableBodyCell>{row.index + 1}</MRT_StyledTableBodyCell>
|
|
64
|
+
)}
|
|
52
65
|
{enableRowActions && positionActionsColumn === 'first' && (
|
|
53
66
|
<MRT_ToggleRowActionMenuButton row={row} />
|
|
54
67
|
)}
|
|
55
|
-
{(anyRowsCanExpand || renderDetailPanel) &&
|
|
68
|
+
{(anyRowsCanExpand || renderDetailPanel) && (
|
|
69
|
+
<MRT_ExpandButton row={row} />
|
|
70
|
+
)}
|
|
56
71
|
{enableSelection && <MRT_SelectCheckbox row={row} />}
|
|
57
72
|
{row.cells.map((cell) => (
|
|
58
73
|
<MRT_TableBodyCell key={cell.getCellProps().key} cell={cell} />
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import React, { FC, MouseEvent } from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
Collapse,
|
|
4
|
+
styled,
|
|
5
|
+
TableCell as MuiTableCell,
|
|
6
|
+
TableRow,
|
|
7
|
+
} from '@mui/material';
|
|
3
8
|
import { Row } from 'react-table';
|
|
4
|
-
import {
|
|
9
|
+
import { useMRT } from '../useMRT';
|
|
5
10
|
|
|
6
11
|
const TableCell = styled(MuiTableCell, {
|
|
7
12
|
shouldForwardProp: (prop) => prop !== 'isExpanded',
|
|
@@ -23,10 +28,12 @@ export const MRT_TableDetailPanel: FC<Props> = ({ row }) => {
|
|
|
23
28
|
muiTableDetailPanelProps,
|
|
24
29
|
muiTableBodyRowProps,
|
|
25
30
|
onDetailPanelClick,
|
|
26
|
-
} =
|
|
31
|
+
} = useMRT();
|
|
27
32
|
|
|
28
33
|
const mTableBodyRowProps =
|
|
29
|
-
muiTableBodyRowProps instanceof Function
|
|
34
|
+
muiTableBodyRowProps instanceof Function
|
|
35
|
+
? muiTableBodyRowProps(row)
|
|
36
|
+
: muiTableBodyRowProps;
|
|
30
37
|
|
|
31
38
|
const tableRowProps = {
|
|
32
39
|
...mTableBodyRowProps,
|
|
@@ -54,7 +61,9 @@ export const MRT_TableDetailPanel: FC<Props> = ({ row }) => {
|
|
|
54
61
|
<TableCell
|
|
55
62
|
colSpan={tableInstance.visibleColumns.length + 10}
|
|
56
63
|
isExpanded={row.isExpanded}
|
|
57
|
-
onClick={(event: MouseEvent<HTMLTableCellElement>) =>
|
|
64
|
+
onClick={(event: MouseEvent<HTMLTableCellElement>) =>
|
|
65
|
+
onDetailPanelClick?.(event, row)
|
|
66
|
+
}
|
|
58
67
|
{...tableCellProps}
|
|
59
68
|
>
|
|
60
69
|
<Collapse in={row.isExpanded}>{renderDetailPanel?.(row)}</Collapse>
|
|
@@ -2,7 +2,7 @@ import React, { FC } from 'react';
|
|
|
2
2
|
import { IconButton, styled, Tooltip } from '@mui/material';
|
|
3
3
|
import SaveIcon from '@mui/icons-material/Save';
|
|
4
4
|
import CancelIcon from '@mui/icons-material/Cancel';
|
|
5
|
-
import {
|
|
5
|
+
import { useMRT } from '../useMRT';
|
|
6
6
|
import { Row } from 'react-table';
|
|
7
7
|
|
|
8
8
|
const EditActionButtonWrappers = styled('div')({
|
|
@@ -15,8 +15,12 @@ interface Props {
|
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
export const MRT_EditActionButtons: FC<Props> = ({ row }) => {
|
|
18
|
-
const {
|
|
19
|
-
|
|
18
|
+
const {
|
|
19
|
+
localization,
|
|
20
|
+
setCurrentEditingRow,
|
|
21
|
+
onRowEditSubmit,
|
|
22
|
+
currentEditingRow,
|
|
23
|
+
} = useMRT();
|
|
20
24
|
|
|
21
25
|
const handleCancel = () => {
|
|
22
26
|
row.values = row.original;
|
|
@@ -31,7 +35,10 @@ export const MRT_EditActionButtons: FC<Props> = ({ row }) => {
|
|
|
31
35
|
return (
|
|
32
36
|
<EditActionButtonWrappers>
|
|
33
37
|
<Tooltip arrow title={localization?.rowActionButtonCancel ?? ''}>
|
|
34
|
-
<IconButton
|
|
38
|
+
<IconButton
|
|
39
|
+
aria-label={localization?.rowActionButtonCancel}
|
|
40
|
+
onClick={handleCancel}
|
|
41
|
+
>
|
|
35
42
|
<CancelIcon />
|
|
36
43
|
</IconButton>
|
|
37
44
|
</Tooltip>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { FC } from 'react';
|
|
2
2
|
import { IconButton, styled } from '@mui/material';
|
|
3
3
|
import MuiArrowRightIcon from '@mui/icons-material/KeyboardDoubleArrowDown';
|
|
4
|
-
import {
|
|
4
|
+
import { useMRT } from '../useMRT';
|
|
5
5
|
import { MRT_TableButtonCell } from '../table/MRT_TableButtonCell';
|
|
6
6
|
|
|
7
7
|
const ArrowRightIcon = styled(MuiArrowRightIcon, {
|
|
@@ -14,7 +14,8 @@ const ArrowRightIcon = styled(MuiArrowRightIcon, {
|
|
|
14
14
|
interface Props {}
|
|
15
15
|
|
|
16
16
|
export const MRT_ExpandAllButton: FC<Props> = () => {
|
|
17
|
-
const { tableInstance, localization, anyRowsExpanded, densePadding } =
|
|
17
|
+
const { tableInstance, localization, anyRowsExpanded, densePadding } =
|
|
18
|
+
useMRT();
|
|
18
19
|
|
|
19
20
|
return (
|
|
20
21
|
<MRT_TableButtonCell
|
|
@@ -28,7 +29,9 @@ export const MRT_ExpandAllButton: FC<Props> = () => {
|
|
|
28
29
|
>
|
|
29
30
|
<ArrowRightIcon
|
|
30
31
|
fontSize="small"
|
|
31
|
-
rotation={
|
|
32
|
+
rotation={
|
|
33
|
+
tableInstance.isAllRowsExpanded ? -180 : anyRowsExpanded ? -90 : 0
|
|
34
|
+
}
|
|
32
35
|
/>
|
|
33
36
|
</IconButton>
|
|
34
37
|
</MRT_TableButtonCell>
|