material-react-table 0.3.4 → 0.3.5
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 +8 -3
- 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 +416 -277
- 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 +419 -280
- 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 +64 -18
- 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 +30 -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.3.
|
|
2
|
+
"version": "0.3.5",
|
|
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.2",
|
|
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.1",
|
|
65
|
+
"@mui/material": "^5.4.1",
|
|
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,84 @@ 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
84
|
muiTableContainerProps?: TableContainerProps;
|
|
77
|
-
muiTableDetailPanelProps?:
|
|
78
|
-
|
|
85
|
+
muiTableDetailPanelProps?:
|
|
86
|
+
| TableCellProps
|
|
87
|
+
| ((row: Row<D>) => TableCellProps);
|
|
88
|
+
muiTableFooterCellProps?:
|
|
89
|
+
| TableCellProps
|
|
90
|
+
| ((column: Column<D>) => TableCellProps);
|
|
79
91
|
muiTableFooterProps?: TableFooterProps;
|
|
80
|
-
muiTableFooterRowProps?:
|
|
81
|
-
|
|
82
|
-
|
|
92
|
+
muiTableFooterRowProps?:
|
|
93
|
+
| TableRowProps
|
|
94
|
+
| ((footerGroup: HeaderGroup<D>) => TableRowProps);
|
|
95
|
+
muiTableHeadCellFilterTextFieldProps?:
|
|
96
|
+
| TextFieldProps
|
|
97
|
+
| ((column: Column<D>) => TextFieldProps);
|
|
98
|
+
muiTableHeadCellProps?:
|
|
99
|
+
| TableCellProps
|
|
100
|
+
| ((column: Column<D>) => TableCellProps);
|
|
83
101
|
muiTableHeadProps?: TableHeadProps;
|
|
84
|
-
muiTableHeadRowProps?:
|
|
102
|
+
muiTableHeadRowProps?:
|
|
103
|
+
| TableRowProps
|
|
104
|
+
| ((row: HeaderGroup<D>) => TableRowProps);
|
|
85
105
|
muiTablePaginationProps?:
|
|
86
106
|
| Partial<TablePaginationProps>
|
|
87
107
|
| ((tableInstance: TableInstance<D>) => Partial<TablePaginationProps>);
|
|
88
108
|
muiTableProps?: TableProps;
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
109
|
+
muiTableToolbarAlertBannerProps?:
|
|
110
|
+
| AlertProps
|
|
111
|
+
| ((tableInstance: TableInstance<D>) => AlertProps);
|
|
112
|
+
muiTableToolbarBottomProps?:
|
|
113
|
+
| ToolbarProps
|
|
114
|
+
| ((tableInstance: TableInstance<D>) => ToolbarProps);
|
|
115
|
+
muiTableToolbarTopProps?:
|
|
116
|
+
| ToolbarProps
|
|
117
|
+
| ((tableInstance: TableInstance<D>) => ToolbarProps);
|
|
118
|
+
onCellClick?: (
|
|
119
|
+
event: MouseEvent<HTMLTableCellElement>,
|
|
120
|
+
cell: Cell<D>,
|
|
121
|
+
) => void;
|
|
92
122
|
onColumnHide?: (column: Column<D>, visibleColumns: Column<D>[]) => void;
|
|
93
|
-
onDetailPanelClick?: (
|
|
123
|
+
onDetailPanelClick?: (
|
|
124
|
+
event: MouseEvent<HTMLTableCellElement>,
|
|
125
|
+
row: Row<D>,
|
|
126
|
+
) => void;
|
|
94
127
|
onGlobalFilterChange?: (event: ChangeEvent<HTMLInputElement>) => void;
|
|
95
128
|
onRowClick?: (event: MouseEvent<HTMLTableRowElement>, row: Row<D>) => void;
|
|
96
129
|
onRowEditSubmit?: (row: Row<D>) => Promise<void> | void;
|
|
97
|
-
onRowExpandChange?: (
|
|
98
|
-
|
|
130
|
+
onRowExpandChange?: (
|
|
131
|
+
event: MouseEvent<HTMLButtonElement>,
|
|
132
|
+
row: Row<D>,
|
|
133
|
+
) => void;
|
|
134
|
+
onRowSelectChange?: (
|
|
135
|
+
event: ChangeEvent,
|
|
136
|
+
row: Row<D>,
|
|
137
|
+
selectedRows: Row<D>[],
|
|
138
|
+
) => void;
|
|
99
139
|
positionActionsColumn?: 'first' | 'last';
|
|
100
140
|
positionPagination?: 'bottom' | 'top' | 'both';
|
|
101
141
|
positionToolbarActions?: 'bottom' | 'top';
|
|
142
|
+
positionToolbarAlertBanner?: 'bottom' | 'top';
|
|
102
143
|
renderDetailPanel?: (row: Row<D>) => ReactNode;
|
|
103
144
|
renderRowActionMenuItems?: (
|
|
104
145
|
rowData: Row<D>,
|
|
105
146
|
tableInstance: TableInstance<D>,
|
|
106
147
|
closeMenu: () => void,
|
|
107
148
|
) => ReactNode[];
|
|
108
|
-
renderRowActions?: (
|
|
109
|
-
|
|
149
|
+
renderRowActions?: (
|
|
150
|
+
row: Row<D>,
|
|
151
|
+
tableInstance: TableInstance<D>,
|
|
152
|
+
) => ReactNode;
|
|
153
|
+
renderToolbarCustomActions?: (tableInstance: TableInstance<D>) => ReactNode;
|
|
110
154
|
};
|
|
111
155
|
|
|
112
156
|
export default <D extends {}>({
|
|
@@ -115,14 +159,16 @@ export default <D extends {}>({
|
|
|
115
159
|
positionActionsColumn = 'first',
|
|
116
160
|
positionPagination = 'bottom',
|
|
117
161
|
positionToolbarActions = 'top',
|
|
162
|
+
positionToolbarAlertBanner = 'top',
|
|
118
163
|
...rest
|
|
119
164
|
}: MaterialReactTableProps<D>) => (
|
|
120
165
|
<MaterialReactTableProvider
|
|
121
166
|
defaultColumn={defaultColumn}
|
|
122
167
|
localization={{ ...defaultLocalization, ...localization }}
|
|
123
|
-
positionPagination={positionPagination}
|
|
124
168
|
positionActionsColumn={positionActionsColumn}
|
|
169
|
+
positionPagination={positionPagination}
|
|
125
170
|
positionToolbarActions={positionToolbarActions}
|
|
171
|
+
positionToolbarAlertBanner={positionToolbarAlertBanner}
|
|
126
172
|
{...rest}
|
|
127
173
|
>
|
|
128
174
|
<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>
|