material-react-table 0.3.1 → 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.
- package/README.md +32 -162
- package/dist/MaterialReactTable.d.ts +3 -1
- package/dist/body/MRT_TableBodyRow.d.ts +16 -1
- package/dist/head/MRT_TableHeadCell.d.ts +4 -1
- package/dist/inputs/MRT_EditCellTextfield.d.ts +7 -0
- package/dist/material-react-table.cjs.development.js +286 -157
- 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 +292 -163
- package/dist/material-react-table.esm.js.map +1 -1
- package/dist/useMaterialReactTable.d.ts +3 -3
- package/dist/utils/localization.d.ts +4 -3
- package/package.json +15 -14
- package/src/@types/faker.d.ts +4 -0
- package/src/@types/react-table-config.d.ts +153 -0
- package/src/MaterialReactTable.tsx +10 -4
- package/src/body/MRT_TableBody.tsx +2 -23
- package/src/body/MRT_TableBodyCell.tsx +27 -6
- package/src/body/MRT_TableBodyRow.tsx +15 -5
- package/src/body/MRT_TableDetailPanel.tsx +17 -6
- package/src/buttons/MRT_EditActionButtons.tsx +9 -5
- package/src/buttons/MRT_ExpandAllButton.tsx +12 -10
- package/src/buttons/MRT_ExpandButton.tsx +27 -24
- package/src/buttons/MRT_ToggleRowActionMenuButton.tsx +2 -2
- package/src/footer/MRT_TableFooter.tsx +2 -2
- package/src/footer/MRT_TableFooterCell.tsx +22 -6
- package/src/footer/MRT_TableFooterRow.tsx +2 -2
- package/src/head/MRT_TableHead.tsx +2 -2
- package/src/head/MRT_TableHeadCell.tsx +24 -7
- package/src/head/MRT_TableHeadRow.tsx +3 -2
- package/src/inputs/MRT_EditCellTextfield.tsx +57 -0
- package/src/inputs/MRT_FilterTextField.tsx +0 -1
- package/src/inputs/MRT_SelectAllCheckbox.tsx +11 -11
- package/src/inputs/MRT_SelectCheckbox.tsx +9 -8
- package/src/menus/MRT_RowActionMenu.tsx +2 -2
- package/src/table/MRT_TableContainer.tsx +31 -3
- package/src/table/MRT_TableSpacerCell.tsx +3 -3
- package/src/toolbar/MRT_ToolbarBottom.tsx +2 -17
- package/src/toolbar/MRT_ToolbarTop.tsx +4 -17
- package/src/useMaterialReactTable.tsx +6 -7
- package/src/utils/localization.ts +8 -6
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import React, { PropsWithChildren } from 'react';
|
|
2
|
-
import { TableInstance } from 'react-table';
|
|
2
|
+
import { Row, TableInstance } from 'react-table';
|
|
3
3
|
import { MaterialReactTableProps } from './MaterialReactTable';
|
|
4
4
|
import { UseMRTCalcs } from './utils/useMRTCalcs';
|
|
5
5
|
export interface UseMaterialReactTable<D extends {}> extends MaterialReactTableProps<D>, UseMRTCalcs {
|
|
6
|
-
|
|
6
|
+
currentEditingRow: Row<D> | null;
|
|
7
7
|
densePadding: boolean;
|
|
8
|
-
|
|
8
|
+
setCurrentEditingRow: (currentRowEditingId: Row<D> | null) => void;
|
|
9
9
|
setDensePadding: (densePadding: boolean) => void;
|
|
10
10
|
setShowFilters: (showFilters: boolean) => void;
|
|
11
11
|
showFilters: boolean;
|
|
@@ -11,13 +11,14 @@ export interface MRT_Localization {
|
|
|
11
11
|
expandButtonTitle: string;
|
|
12
12
|
filterTextFieldClearButtonTitle: string;
|
|
13
13
|
filterTextFieldPlaceholder: string;
|
|
14
|
-
rowActionMenuButtonTitle: string;
|
|
15
|
-
rowActionsColumnTitle: string;
|
|
16
|
-
rowActionButtonSave: string;
|
|
17
14
|
rowActionButtonCancel: string;
|
|
15
|
+
rowActionButtonSave: string;
|
|
16
|
+
rowActionMenuButtonTitle: string;
|
|
18
17
|
rowActionMenuItemEdit: string;
|
|
18
|
+
rowActionsColumnTitle: string;
|
|
19
19
|
searchTextFieldClearButtonTitle: string;
|
|
20
20
|
searchTextFieldPlaceholder: string;
|
|
21
|
+
selectAllCheckboxTitle: string;
|
|
21
22
|
showHideColumnsButtonTitle: string;
|
|
22
23
|
toggleDensePaddingSwitchTitle: string;
|
|
23
24
|
toggleFilterButtonTitle: string;
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.3.
|
|
2
|
+
"version": "0.3.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.",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"type": "git",
|
|
14
14
|
"url": "https://github.com/KevinVandy/material-react-table"
|
|
15
15
|
},
|
|
16
|
-
"homepage": "https://
|
|
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": ">=
|
|
27
|
+
"node": ">=12"
|
|
28
28
|
},
|
|
29
29
|
"scripts": {
|
|
30
30
|
"start": "tsdx watch",
|
|
@@ -55,24 +55,25 @@
|
|
|
55
55
|
}
|
|
56
56
|
],
|
|
57
57
|
"devDependencies": {
|
|
58
|
-
"@babel/core": "^7.
|
|
58
|
+
"@babel/core": "^7.17.0",
|
|
59
59
|
"@emotion/react": "^11.7.1",
|
|
60
60
|
"@emotion/styled": "^11.6.0",
|
|
61
|
+
"@etchteam/storybook-addon-status": "^4.2.0",
|
|
61
62
|
"@faker-js/faker": "^6.0.0-alpha.5",
|
|
62
63
|
"@mui/icons-material": "^5.3.1",
|
|
63
|
-
"@mui/material": "^5.
|
|
64
|
+
"@mui/material": "^5.4.0",
|
|
64
65
|
"@size-limit/preset-small-lib": "^7.0.5",
|
|
65
|
-
"@storybook/addon-a11y": "^6.4.
|
|
66
|
-
"@storybook/addon-actions": "^6.4.
|
|
66
|
+
"@storybook/addon-a11y": "^6.4.18",
|
|
67
|
+
"@storybook/addon-actions": "^6.4.18",
|
|
67
68
|
"@storybook/addon-console": "^1.2.3",
|
|
68
|
-
"@storybook/addon-essentials": "^6.4.
|
|
69
|
+
"@storybook/addon-essentials": "^6.4.18",
|
|
69
70
|
"@storybook/addon-info": "^5.3.21",
|
|
70
|
-
"@storybook/addon-links": "^6.4.
|
|
71
|
-
"@storybook/addon-storysource": "^6.4.
|
|
72
|
-
"@storybook/addons": "^6.4.
|
|
73
|
-
"@storybook/react": "^6.4.
|
|
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",
|
|
74
75
|
"@types/faker": "^6.6.8",
|
|
75
|
-
"@types/react": "^17.0.
|
|
76
|
+
"@types/react": "^17.0.39",
|
|
76
77
|
"@types/react-dom": "^17.0.11",
|
|
77
78
|
"@types/react-table": "^7.7.9",
|
|
78
79
|
"babel-loader": "^8.2.3",
|
|
@@ -93,7 +94,7 @@
|
|
|
93
94
|
"@emotion/react": ">=11",
|
|
94
95
|
"@mui/icons-material": ">=5",
|
|
95
96
|
"@mui/material": ">=5",
|
|
96
|
-
"react": ">=
|
|
97
|
+
"react": ">=16.8",
|
|
97
98
|
"react-table": ">=7"
|
|
98
99
|
}
|
|
99
100
|
}
|
|
@@ -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';
|
|
@@ -65,6 +65,9 @@ export type MaterialReactTableProps<D extends {} = {}> = TableOptions<D> &
|
|
|
65
65
|
isLoading?: boolean;
|
|
66
66
|
localization?: Partial<MRT_Localization>;
|
|
67
67
|
muiSearchTextFieldProps?: TextFieldProps;
|
|
68
|
+
muiTableBodyCellEditTextFieldProps?:
|
|
69
|
+
| TextFieldProps
|
|
70
|
+
| ((cell?: Cell<D>) => TextFieldProps);
|
|
68
71
|
muiTableBodyCellProps?:
|
|
69
72
|
| TableCellProps
|
|
70
73
|
| ((cell?: Cell<D>) => TableCellProps);
|
|
@@ -81,6 +84,9 @@ export type MaterialReactTableProps<D extends {} = {}> = TableOptions<D> &
|
|
|
81
84
|
muiTableFooterRowProps?:
|
|
82
85
|
| TableRowProps
|
|
83
86
|
| ((footerGroup: HeaderGroup<D>) => TableRowProps);
|
|
87
|
+
muiTableHeadCellFilterTextFieldProps?:
|
|
88
|
+
| TextFieldProps
|
|
89
|
+
| ((column: Column<D>) => TextFieldProps);
|
|
84
90
|
muiTableHeadCellProps?:
|
|
85
91
|
| TableCellProps
|
|
86
92
|
| ((column: Column<D>) => TableCellProps);
|
|
@@ -122,16 +128,16 @@ export type MaterialReactTableProps<D extends {} = {}> = TableOptions<D> &
|
|
|
122
128
|
positionActionsColumn?: 'first' | 'last';
|
|
123
129
|
positionPagination?: 'bottom' | 'top' | 'both';
|
|
124
130
|
positionToolbarActions?: 'bottom' | 'top';
|
|
125
|
-
renderRowActions?: (
|
|
126
|
-
row: Row<D>,
|
|
127
|
-
tableInstance: TableInstance<D>,
|
|
128
|
-
) => ReactNode;
|
|
129
131
|
renderDetailPanel?: (row: Row<D>) => ReactNode;
|
|
130
132
|
renderRowActionMenuItems?: (
|
|
131
133
|
rowData: Row<D>,
|
|
132
134
|
tableInstance: TableInstance<D>,
|
|
133
135
|
closeMenu: () => void,
|
|
134
136
|
) => ReactNode[];
|
|
137
|
+
renderRowActions?: (
|
|
138
|
+
row: Row<D>,
|
|
139
|
+
tableInstance: TableInstance<D>,
|
|
140
|
+
) => ReactNode;
|
|
135
141
|
title?: string | ReactNode;
|
|
136
142
|
};
|
|
137
143
|
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import React, { FC } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
alpha,
|
|
4
|
-
CircularProgress,
|
|
5
|
-
styled,
|
|
6
|
-
TableBody as MuiTableBody,
|
|
7
|
-
} from '@mui/material';
|
|
2
|
+
import { styled, TableBody as MuiTableBody } from '@mui/material';
|
|
8
3
|
import { MRT_TableBodyRow } from './MRT_TableBodyRow';
|
|
9
4
|
import { useMaterialReactTable } from '../useMaterialReactTable';
|
|
10
5
|
|
|
@@ -12,21 +7,10 @@ const TableBody = styled(MuiTableBody)({
|
|
|
12
7
|
overflowY: 'hidden',
|
|
13
8
|
});
|
|
14
9
|
|
|
15
|
-
const CircularProgressWrapper = styled('div')(({ theme }) => ({
|
|
16
|
-
backgroundColor: alpha(theme.palette.background.paper, 0.5),
|
|
17
|
-
display: 'grid',
|
|
18
|
-
height: '100%',
|
|
19
|
-
justifyContent: 'center',
|
|
20
|
-
margin: 'auto',
|
|
21
|
-
paddingTop: '5rem',
|
|
22
|
-
position: 'fixed',
|
|
23
|
-
width: 'calc(100% - 2rem)',
|
|
24
|
-
}));
|
|
25
|
-
|
|
26
10
|
interface Props {}
|
|
27
11
|
|
|
28
12
|
export const MRT_TableBody: FC<Props> = () => {
|
|
29
|
-
const { tableInstance, muiTableBodyProps,
|
|
13
|
+
const { tableInstance, muiTableBodyProps, manualPagination } =
|
|
30
14
|
useMaterialReactTable();
|
|
31
15
|
|
|
32
16
|
const rows = manualPagination ? tableInstance.rows : tableInstance.page;
|
|
@@ -42,11 +26,6 @@ export const MRT_TableBody: FC<Props> = () => {
|
|
|
42
26
|
|
|
43
27
|
return (
|
|
44
28
|
<TableBody {...tableBodyProps}>
|
|
45
|
-
{isLoading && (
|
|
46
|
-
<CircularProgressWrapper>
|
|
47
|
-
<CircularProgress />
|
|
48
|
-
</CircularProgressWrapper>
|
|
49
|
-
)}
|
|
50
29
|
{rows.map((row) => {
|
|
51
30
|
tableInstance.prepareRow(row);
|
|
52
31
|
return <MRT_TableBodyRow key={row.getRowProps().key} row={row} />;
|
|
@@ -1,40 +1,60 @@
|
|
|
1
1
|
import React, { FC, MouseEvent } from 'react';
|
|
2
|
-
import { TableCell } from '@mui/material';
|
|
2
|
+
import { styled, TableCell as MuiTableCell } from '@mui/material';
|
|
3
3
|
import { Cell } from 'react-table';
|
|
4
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
|
+
}));
|
|
5
13
|
|
|
6
14
|
interface Props {
|
|
7
15
|
cell: Cell;
|
|
8
16
|
}
|
|
9
17
|
|
|
10
18
|
export const MRT_TableBodyCell: FC<Props> = ({ cell }) => {
|
|
11
|
-
const {
|
|
12
|
-
|
|
19
|
+
const {
|
|
20
|
+
onCellClick,
|
|
21
|
+
muiTableBodyCellProps,
|
|
22
|
+
densePadding,
|
|
23
|
+
currentEditingRow,
|
|
24
|
+
} = useMaterialReactTable();
|
|
13
25
|
|
|
14
26
|
const mTableCellBodyProps =
|
|
15
27
|
muiTableBodyCellProps instanceof Function
|
|
16
28
|
? muiTableBodyCellProps(cell)
|
|
17
29
|
: muiTableBodyCellProps;
|
|
18
30
|
|
|
31
|
+
const mcTableCellBodyProps =
|
|
32
|
+
cell.column.muiTableBodyCellProps instanceof Function
|
|
33
|
+
? cell.column.muiTableBodyCellProps(cell)
|
|
34
|
+
: cell.column.muiTableBodyCellProps;
|
|
35
|
+
|
|
19
36
|
const tableCellProps = {
|
|
20
37
|
...mTableCellBodyProps,
|
|
38
|
+
...mcTableCellBodyProps,
|
|
21
39
|
...cell.getCellProps(),
|
|
22
40
|
style: {
|
|
23
|
-
padding: densePadding ? '0.5rem' : '1rem',
|
|
24
|
-
transition: 'all 0.2s ease-in-out',
|
|
25
41
|
...cell.getCellProps().style,
|
|
26
42
|
...(mTableCellBodyProps?.style ?? {}),
|
|
43
|
+
...(mcTableCellBodyProps?.style ?? {}),
|
|
27
44
|
},
|
|
28
45
|
};
|
|
29
46
|
|
|
30
47
|
return (
|
|
31
48
|
<TableCell
|
|
49
|
+
densePadding={densePadding}
|
|
32
50
|
onClick={(event: MouseEvent<HTMLTableCellElement>) =>
|
|
33
51
|
onCellClick?.(event, cell)
|
|
34
52
|
}
|
|
35
53
|
{...tableCellProps}
|
|
36
54
|
>
|
|
37
|
-
{
|
|
55
|
+
{currentEditingRow?.id === cell.row.id ? (
|
|
56
|
+
<MRT_EditCellTextfield cell={cell} />
|
|
57
|
+
) : cell.isPlaceholder ? null : cell.isAggregated ? (
|
|
38
58
|
cell.render('Aggregated')
|
|
39
59
|
) : cell.isGrouped ? (
|
|
40
60
|
<span>
|
|
@@ -43,6 +63,7 @@ export const MRT_TableBodyCell: FC<Props> = ({ cell }) => {
|
|
|
43
63
|
) : (
|
|
44
64
|
cell.render('Cell')
|
|
45
65
|
)}
|
|
66
|
+
{}
|
|
46
67
|
</TableCell>
|
|
47
68
|
);
|
|
48
69
|
};
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import React, { FC, MouseEvent } from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
alpha,
|
|
4
|
+
styled,
|
|
5
|
+
TableCell,
|
|
6
|
+
TableRow as MuiTableRow,
|
|
7
|
+
} from '@mui/material';
|
|
3
8
|
import { Row } from 'react-table';
|
|
4
9
|
import { MRT_TableBodyCell } from './MRT_TableBodyCell';
|
|
5
10
|
import { useMaterialReactTable } from '../useMaterialReactTable';
|
|
@@ -8,6 +13,14 @@ import { MRT_ExpandButton } from '../buttons/MRT_ExpandButton';
|
|
|
8
13
|
import { MRT_SelectCheckbox } from '../inputs/MRT_SelectCheckbox';
|
|
9
14
|
import { MRT_ToggleRowActionMenuButton } from '../buttons/MRT_ToggleRowActionMenuButton';
|
|
10
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
|
+
|
|
11
24
|
interface Props {
|
|
12
25
|
row: Row;
|
|
13
26
|
}
|
|
@@ -22,7 +35,6 @@ export const MRT_TableBodyRow: FC<Props> = ({ row }) => {
|
|
|
22
35
|
positionActionsColumn,
|
|
23
36
|
renderDetailPanel,
|
|
24
37
|
} = useMaterialReactTable();
|
|
25
|
-
const theme = useTheme();
|
|
26
38
|
|
|
27
39
|
const mTableBodyRowProps =
|
|
28
40
|
muiTableBodyRowProps instanceof Function
|
|
@@ -33,9 +45,6 @@ export const MRT_TableBodyRow: FC<Props> = ({ row }) => {
|
|
|
33
45
|
...mTableBodyRowProps,
|
|
34
46
|
...row.getRowProps(),
|
|
35
47
|
style: {
|
|
36
|
-
backgroundColor: row.isSelected
|
|
37
|
-
? alpha(theme.palette.primary.light, 0.1)
|
|
38
|
-
: 'transparent',
|
|
39
48
|
...row.getRowProps().style,
|
|
40
49
|
...(mTableBodyRowProps?.style ?? {}),
|
|
41
50
|
},
|
|
@@ -44,6 +53,7 @@ export const MRT_TableBodyRow: FC<Props> = ({ row }) => {
|
|
|
44
53
|
return (
|
|
45
54
|
<>
|
|
46
55
|
<TableRow
|
|
56
|
+
isSelected={row.isSelected}
|
|
47
57
|
hover
|
|
48
58
|
onClick={(event: MouseEvent<HTMLTableRowElement>) =>
|
|
49
59
|
onRowClick?.(event, row)
|
|
@@ -1,8 +1,22 @@
|
|
|
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
9
|
import { useMaterialReactTable } from '../useMaterialReactTable';
|
|
5
10
|
|
|
11
|
+
const TableCell = styled(MuiTableCell, {
|
|
12
|
+
shouldForwardProp: (prop) => prop !== 'isExpanded',
|
|
13
|
+
})<{ isExpanded?: boolean }>(({ isExpanded }) => ({
|
|
14
|
+
borderBottom: !isExpanded ? 'none' : undefined,
|
|
15
|
+
paddingBottom: isExpanded ? '1rem' : 0,
|
|
16
|
+
paddingTop: isExpanded ? '1rem' : 0,
|
|
17
|
+
transition: 'all 0.2s ease-in-out',
|
|
18
|
+
}));
|
|
19
|
+
|
|
6
20
|
interface Props {
|
|
7
21
|
row: Row;
|
|
8
22
|
}
|
|
@@ -38,11 +52,7 @@ export const MRT_TableDetailPanel: FC<Props> = ({ row }) => {
|
|
|
38
52
|
const tableCellProps = {
|
|
39
53
|
...mTableDetailPanelProps,
|
|
40
54
|
style: {
|
|
41
|
-
|
|
42
|
-
paddingBottom: row.isExpanded ? '1rem' : 0,
|
|
43
|
-
paddingTop: row.isExpanded ? '1rem' : 0,
|
|
44
|
-
transition: 'all 0.2s ease-in-out',
|
|
45
|
-
...(mTableDetailPanelProps?.style || {}),
|
|
55
|
+
...(mTableDetailPanelProps?.style ?? {}),
|
|
46
56
|
},
|
|
47
57
|
};
|
|
48
58
|
|
|
@@ -50,6 +60,7 @@ export const MRT_TableDetailPanel: FC<Props> = ({ row }) => {
|
|
|
50
60
|
<TableRow hover {...tableRowProps}>
|
|
51
61
|
<TableCell
|
|
52
62
|
colSpan={tableInstance.visibleColumns.length + 10}
|
|
63
|
+
isExpanded={row.isExpanded}
|
|
53
64
|
onClick={(event: MouseEvent<HTMLTableCellElement>) =>
|
|
54
65
|
onDetailPanelClick?.(event, row)
|
|
55
66
|
}
|
|
@@ -15,16 +15,20 @@ 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
|
+
} = useMaterialReactTable();
|
|
20
24
|
|
|
21
25
|
const handleCancel = () => {
|
|
22
|
-
|
|
26
|
+
setCurrentEditingRow(null);
|
|
23
27
|
};
|
|
24
28
|
|
|
25
29
|
const handleSave = async () => {
|
|
26
|
-
|
|
27
|
-
|
|
30
|
+
await onRowEditSubmit?.(currentEditingRow ?? row);
|
|
31
|
+
setCurrentEditingRow(null);
|
|
28
32
|
};
|
|
29
33
|
|
|
30
34
|
return (
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import React, { FC } from 'react';
|
|
2
|
-
import { IconButton, TableCell } from '@mui/material';
|
|
3
|
-
import
|
|
2
|
+
import { IconButton, styled, TableCell } from '@mui/material';
|
|
3
|
+
import MuiArrowRightIcon from '@mui/icons-material/KeyboardDoubleArrowDown';
|
|
4
4
|
import { useMaterialReactTable } from '../useMaterialReactTable';
|
|
5
5
|
|
|
6
|
+
const ArrowRightIcon = styled(MuiArrowRightIcon, {
|
|
7
|
+
shouldForwardProp: (prop) => prop !== 'rotation',
|
|
8
|
+
})<{ rotation?: number }>(({ rotation }) => ({
|
|
9
|
+
transform: `rotate(${rotation}deg)`,
|
|
10
|
+
transition: 'transform 0.2s',
|
|
11
|
+
}));
|
|
12
|
+
|
|
6
13
|
interface Props {}
|
|
7
14
|
|
|
8
15
|
export const MRT_ExpandAllButton: FC<Props> = () => {
|
|
@@ -30,14 +37,9 @@ export const MRT_ExpandAllButton: FC<Props> = () => {
|
|
|
30
37
|
>
|
|
31
38
|
<ArrowRightIcon
|
|
32
39
|
fontSize="small"
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
: anyRowsExpanded
|
|
37
|
-
? 'rotate(-90deg)'
|
|
38
|
-
: 'rotate(0)',
|
|
39
|
-
transition: 'transform 0.2s',
|
|
40
|
-
}}
|
|
40
|
+
rotation={
|
|
41
|
+
tableInstance.isAllRowsExpanded ? -180 : anyRowsExpanded ? -90 : 0
|
|
42
|
+
}
|
|
41
43
|
/>
|
|
42
44
|
</IconButton>
|
|
43
45
|
</TableCell>
|
|
@@ -1,46 +1,49 @@
|
|
|
1
1
|
import React, { FC } from 'react';
|
|
2
|
-
import { IconButton, TableCell } from '@mui/material';
|
|
2
|
+
import { IconButton, styled, TableCell as MuiTableCell } from '@mui/material';
|
|
3
3
|
import { Row } from 'react-table';
|
|
4
|
-
import
|
|
4
|
+
import MuiExpandMoreIcon from '@mui/icons-material/ExpandMore';
|
|
5
5
|
import { useMaterialReactTable } from '../useMaterialReactTable';
|
|
6
6
|
|
|
7
|
+
const TableCell = styled(MuiTableCell, {
|
|
8
|
+
shouldForwardProp: (prop) => prop !== 'densePadding' && prop !== 'depth',
|
|
9
|
+
})<{ densePadding?: boolean; depth: number }>(({ densePadding, depth }) => ({
|
|
10
|
+
padding: densePadding ? '0' : '0.6rem',
|
|
11
|
+
paddingLeft: `${depth + 0.5}rem`,
|
|
12
|
+
transition: 'all 0.2s ease-in-out',
|
|
13
|
+
}));
|
|
14
|
+
|
|
15
|
+
const ExpandMoreIcon = styled(MuiExpandMoreIcon, {
|
|
16
|
+
shouldForwardProp: (prop) => prop !== 'rotation',
|
|
17
|
+
})<{ rotation?: number }>(({ rotation }) => ({
|
|
18
|
+
transform: `rotate(${rotation}deg)`,
|
|
19
|
+
transition: 'transform 0.2s',
|
|
20
|
+
}));
|
|
21
|
+
|
|
7
22
|
interface Props {
|
|
8
23
|
row: Row;
|
|
9
24
|
}
|
|
10
25
|
|
|
11
26
|
export const MRT_ExpandButton: FC<Props> = ({ row }) => {
|
|
12
|
-
const { localization,
|
|
27
|
+
const { localization, densePadding, renderDetailPanel } =
|
|
13
28
|
useMaterialReactTable();
|
|
14
29
|
|
|
15
30
|
return (
|
|
16
|
-
<TableCell
|
|
17
|
-
size="small"
|
|
18
|
-
style={{
|
|
19
|
-
padding: densePadding ? '0' : '0.6rem 0',
|
|
20
|
-
paddingLeft: `${row.depth + 0.5}rem`,
|
|
21
|
-
transition: 'all 0.2s ease-in-out',
|
|
22
|
-
width: `${
|
|
23
|
-
renderDetailPanel ? 2 : tableInstance.expandedDepth - row.depth + 2
|
|
24
|
-
}rem`,
|
|
25
|
-
}}
|
|
26
|
-
>
|
|
31
|
+
<TableCell size="small" densePadding={densePadding} depth={row.depth}>
|
|
27
32
|
<IconButton
|
|
28
|
-
disabled={!row.canExpand && !renderDetailPanel}
|
|
29
33
|
aria-label={localization?.expandButtonTitle}
|
|
34
|
+
disabled={!row.canExpand && !renderDetailPanel}
|
|
30
35
|
title={localization?.expandButtonTitle}
|
|
31
36
|
{...row.getToggleRowExpandedProps()}
|
|
32
37
|
>
|
|
33
38
|
<ExpandMoreIcon
|
|
34
39
|
fontSize={row.canExpand || renderDetailPanel ? 'medium' : 'small'}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
transition: 'transform 0.2s',
|
|
43
|
-
}}
|
|
40
|
+
rotation={
|
|
41
|
+
!row.canExpand && !renderDetailPanel
|
|
42
|
+
? -90
|
|
43
|
+
: row.isExpanded
|
|
44
|
+
? -180
|
|
45
|
+
: 0
|
|
46
|
+
}
|
|
44
47
|
/>
|
|
45
48
|
</IconButton>
|
|
46
49
|
</TableCell>
|
|
@@ -24,7 +24,7 @@ interface Props {
|
|
|
24
24
|
export const MRT_ToggleRowActionMenuButton: FC<Props> = ({ row }) => {
|
|
25
25
|
const {
|
|
26
26
|
localization,
|
|
27
|
-
|
|
27
|
+
currentEditingRow,
|
|
28
28
|
renderRowActions,
|
|
29
29
|
tableInstance,
|
|
30
30
|
} = useMaterialReactTable();
|
|
@@ -41,7 +41,7 @@ export const MRT_ToggleRowActionMenuButton: FC<Props> = ({ row }) => {
|
|
|
41
41
|
return <>{renderRowActions(row, tableInstance)}</>;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
if (row.id ===
|
|
44
|
+
if (row.id === currentEditingRow?.id) {
|
|
45
45
|
return <MRT_EditActionButtons row={row} />;
|
|
46
46
|
}
|
|
47
47
|
|