material-react-table 1.1.0-beta.1 → 1.1.0
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/cjs/MaterialReactTable.d.ts +1 -1
- package/dist/cjs/body/MRT_TableBodyCell.d.ts +1 -0
- package/dist/cjs/body/MRT_TableBodyRow.d.ts +1 -0
- package/dist/cjs/index.js +40 -45
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/table/MRT_TableRoot.d.ts +1 -1
- package/dist/esm/MaterialReactTable.d.ts +1 -1
- package/dist/esm/body/MRT_TableBodyCell.d.ts +1 -0
- package/dist/esm/body/MRT_TableBodyRow.d.ts +1 -0
- package/dist/esm/material-react-table.esm.js +40 -45
- package/dist/esm/material-react-table.esm.js.map +1 -1
- package/dist/esm/table/MRT_TableRoot.d.ts +1 -1
- package/dist/index.d.ts +1 -1
- package/package.json +1 -1
- package/src/MaterialReactTable.tsx +1 -1
- package/src/body/MRT_TableBody.tsx +6 -2
- package/src/body/MRT_TableBodyCell.tsx +37 -36
- package/src/body/MRT_TableBodyRow.tsx +15 -9
- package/src/head/MRT_TableHeadCell.tsx +19 -16
|
@@ -45,7 +45,7 @@ export declare const MRT_TableRoot: <TData extends Record<string, any> = {}>(pro
|
|
|
45
45
|
icons?: Partial<import("..").MRT_Icons> | undefined;
|
|
46
46
|
initialState?: Partial<MRT_TableState<TData>> | undefined;
|
|
47
47
|
localization?: Partial<MRT_Localization> | undefined;
|
|
48
|
-
memoMode?: "
|
|
48
|
+
memoMode?: "rows" | "cells" | "table-body" | undefined;
|
|
49
49
|
muiBottomToolbarProps?: import("@mui/material").ToolbarProps<"div", {}> | (({ table }: {
|
|
50
50
|
table: MRT_TableInstance<TData>;
|
|
51
51
|
}) => import("@mui/material").ToolbarProps<"div", {}>) | undefined;
|
package/dist/index.d.ts
CHANGED
|
@@ -564,7 +564,7 @@ declare type MaterialReactTableProps<TData extends Record<string, any> = {}> = O
|
|
|
564
564
|
* @warning This will break some dynamic rendering features. See the memoization guide for more info:
|
|
565
565
|
* @link https://www.material-react-table.com/docs/guides/memoize-components
|
|
566
566
|
*/
|
|
567
|
-
memoMode?: '
|
|
567
|
+
memoMode?: 'cells' | 'rows' | 'table-body';
|
|
568
568
|
muiBottomToolbarProps?: ToolbarProps | (({ table }: {
|
|
569
569
|
table: MRT_TableInstance<TData>;
|
|
570
570
|
}) => ToolbarProps);
|
package/package.json
CHANGED
|
@@ -680,7 +680,7 @@ export type MaterialReactTableProps<TData extends Record<string, any> = {}> =
|
|
|
680
680
|
* @warning This will break some dynamic rendering features. See the memoization guide for more info:
|
|
681
681
|
* @link https://www.material-react-table.com/docs/guides/memoize-components
|
|
682
682
|
*/
|
|
683
|
-
memoMode?: '
|
|
683
|
+
memoMode?: 'cells' | 'rows' | 'table-body';
|
|
684
684
|
muiBottomToolbarProps?:
|
|
685
685
|
| ToolbarProps
|
|
686
686
|
| (({ table }: { table: MRT_TableInstance<TData> }) => ToolbarProps);
|
|
@@ -151,6 +151,7 @@ export const MRT_TableBody: FC<Props> = ({ table }) => {
|
|
|
151
151
|
: (rowOrVirtualRow as MRT_Row);
|
|
152
152
|
const props = {
|
|
153
153
|
key: row.id,
|
|
154
|
+
numRows: rows.length,
|
|
154
155
|
row,
|
|
155
156
|
rowIndex: enableRowVirtualization
|
|
156
157
|
? rowOrVirtualRow.index
|
|
@@ -158,7 +159,7 @@ export const MRT_TableBody: FC<Props> = ({ table }) => {
|
|
|
158
159
|
table,
|
|
159
160
|
virtualRow: enableRowVirtualization ? rowOrVirtualRow : null,
|
|
160
161
|
};
|
|
161
|
-
return memoMode === '
|
|
162
|
+
return memoMode === 'rows' ? (
|
|
162
163
|
<Memo_MRT_TableBodyRow {...props} />
|
|
163
164
|
) : (
|
|
164
165
|
<MRT_TableBodyRow {...props} />
|
|
@@ -176,4 +177,7 @@ export const MRT_TableBody: FC<Props> = ({ table }) => {
|
|
|
176
177
|
);
|
|
177
178
|
};
|
|
178
179
|
|
|
179
|
-
export const Memo_MRT_TableBody = memo(
|
|
180
|
+
export const Memo_MRT_TableBody = memo(
|
|
181
|
+
MRT_TableBody,
|
|
182
|
+
(prev, next) => prev.table.options.data === next.table.options.data,
|
|
183
|
+
);
|
|
@@ -5,6 +5,7 @@ import React, {
|
|
|
5
5
|
MouseEvent,
|
|
6
6
|
RefObject,
|
|
7
7
|
useEffect,
|
|
8
|
+
useMemo,
|
|
8
9
|
useState,
|
|
9
10
|
} from 'react';
|
|
10
11
|
import { darken, lighten, Skeleton, TableCell, useTheme } from '@mui/material';
|
|
@@ -18,6 +19,7 @@ import type { MRT_Cell, MRT_TableInstance } from '..';
|
|
|
18
19
|
interface Props {
|
|
19
20
|
cell: MRT_Cell;
|
|
20
21
|
enableHover?: boolean;
|
|
22
|
+
numRows: number;
|
|
21
23
|
rowIndex: number;
|
|
22
24
|
rowRef: RefObject<HTMLTableRowElement>;
|
|
23
25
|
table: MRT_TableInstance;
|
|
@@ -26,6 +28,7 @@ interface Props {
|
|
|
26
28
|
export const MRT_TableBodyCell: FC<Props> = ({
|
|
27
29
|
cell,
|
|
28
30
|
enableHover,
|
|
31
|
+
numRows,
|
|
29
32
|
rowIndex,
|
|
30
33
|
rowRef,
|
|
31
34
|
table,
|
|
@@ -39,7 +42,6 @@ export const MRT_TableBodyCell: FC<Props> = ({
|
|
|
39
42
|
enableColumnOrdering,
|
|
40
43
|
enableEditing,
|
|
41
44
|
enableGrouping,
|
|
42
|
-
enablePagination,
|
|
43
45
|
enableRowNumbers,
|
|
44
46
|
muiTableBodyCellProps,
|
|
45
47
|
muiTableBodyCellSkeletonProps,
|
|
@@ -82,17 +84,6 @@ export const MRT_TableBodyCell: FC<Props> = ({
|
|
|
82
84
|
? muiTableBodyCellSkeletonProps({ cell, column, row, table })
|
|
83
85
|
: muiTableBodyCellSkeletonProps;
|
|
84
86
|
|
|
85
|
-
const isEditable =
|
|
86
|
-
(enableEditing || columnDef.enableEditing) &&
|
|
87
|
-
columnDef.enableEditing !== false;
|
|
88
|
-
|
|
89
|
-
const isEditing =
|
|
90
|
-
isEditable &&
|
|
91
|
-
editingMode !== 'modal' &&
|
|
92
|
-
(editingMode === 'table' ||
|
|
93
|
-
editingRow?.id === row.id ||
|
|
94
|
-
editingCell?.id === cell.id);
|
|
95
|
-
|
|
96
87
|
const [skeletonWidth, setSkeletonWidth] = useState(0);
|
|
97
88
|
useEffect(
|
|
98
89
|
() =>
|
|
@@ -106,9 +97,42 @@ export const MRT_TableBodyCell: FC<Props> = ({
|
|
|
106
97
|
)
|
|
107
98
|
: 100,
|
|
108
99
|
),
|
|
109
|
-
[
|
|
100
|
+
[],
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
const draggingBorder = useMemo(
|
|
104
|
+
() =>
|
|
105
|
+
draggingColumn?.id === column.id
|
|
106
|
+
? `1px dashed ${theme.palette.text.secondary}`
|
|
107
|
+
: hoveredColumn?.id === column.id
|
|
108
|
+
? `2px dashed ${theme.palette.primary.main}`
|
|
109
|
+
: undefined,
|
|
110
|
+
[draggingColumn, hoveredColumn],
|
|
110
111
|
);
|
|
111
112
|
|
|
113
|
+
const draggingBorders = useMemo(
|
|
114
|
+
() =>
|
|
115
|
+
draggingBorder
|
|
116
|
+
? {
|
|
117
|
+
borderLeft: draggingBorder,
|
|
118
|
+
borderRight: draggingBorder,
|
|
119
|
+
borderBottom: rowIndex === numRows - 1 ? draggingBorder : undefined,
|
|
120
|
+
}
|
|
121
|
+
: undefined,
|
|
122
|
+
[draggingBorder, numRows],
|
|
123
|
+
);
|
|
124
|
+
|
|
125
|
+
const isEditable =
|
|
126
|
+
(enableEditing || columnDef.enableEditing) &&
|
|
127
|
+
columnDef.enableEditing !== false;
|
|
128
|
+
|
|
129
|
+
const isEditing =
|
|
130
|
+
isEditable &&
|
|
131
|
+
editingMode !== 'modal' &&
|
|
132
|
+
(editingMode === 'table' ||
|
|
133
|
+
editingRow?.id === row.id ||
|
|
134
|
+
editingCell?.id === cell.id);
|
|
135
|
+
|
|
112
136
|
const handleDoubleClick = (event: MouseEvent<HTMLTableCellElement>) => {
|
|
113
137
|
tableCellProps?.onDoubleClick?.(event);
|
|
114
138
|
if (
|
|
@@ -139,29 +163,6 @@ export const MRT_TableBodyCell: FC<Props> = ({
|
|
|
139
163
|
}
|
|
140
164
|
};
|
|
141
165
|
|
|
142
|
-
const draggingBorder =
|
|
143
|
-
draggingColumn?.id === column.id
|
|
144
|
-
? `1px dashed ${theme.palette.text.secondary}`
|
|
145
|
-
: hoveredColumn?.id === column.id
|
|
146
|
-
? `2px dashed ${theme.palette.primary.main}`
|
|
147
|
-
: undefined;
|
|
148
|
-
|
|
149
|
-
const draggingBorders = draggingBorder
|
|
150
|
-
? {
|
|
151
|
-
borderLeft: draggingBorder,
|
|
152
|
-
borderRight: draggingBorder,
|
|
153
|
-
borderBottom:
|
|
154
|
-
row.index ===
|
|
155
|
-
(enablePagination
|
|
156
|
-
? table.getRowModel()
|
|
157
|
-
: table.getPrePaginationRowModel()
|
|
158
|
-
).rows.length -
|
|
159
|
-
1
|
|
160
|
-
? draggingBorder
|
|
161
|
-
: undefined,
|
|
162
|
-
}
|
|
163
|
-
: undefined;
|
|
164
|
-
|
|
165
166
|
return (
|
|
166
167
|
<TableCell
|
|
167
168
|
{...tableCellProps}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import React, { DragEvent, FC, memo, useRef } from 'react';
|
|
1
|
+
import React, { DragEvent, FC, memo, useMemo, useRef } from 'react';
|
|
2
2
|
import { darken, lighten, TableRow, useTheme } from '@mui/material';
|
|
3
3
|
import { Memo_MRT_TableBodyCell, MRT_TableBodyCell } from './MRT_TableBodyCell';
|
|
4
4
|
import { MRT_TableDetailPanel } from './MRT_TableDetailPanel';
|
|
5
5
|
import type { MRT_Row, MRT_TableInstance } from '..';
|
|
6
6
|
|
|
7
7
|
interface Props {
|
|
8
|
+
numRows: number;
|
|
8
9
|
row: MRT_Row;
|
|
9
10
|
rowIndex: number;
|
|
10
11
|
table: MRT_TableInstance;
|
|
@@ -12,6 +13,7 @@ interface Props {
|
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
export const MRT_TableBodyRow: FC<Props> = ({
|
|
16
|
+
numRows,
|
|
15
17
|
row,
|
|
16
18
|
rowIndex,
|
|
17
19
|
table,
|
|
@@ -45,12 +47,15 @@ export const MRT_TableBodyRow: FC<Props> = ({
|
|
|
45
47
|
|
|
46
48
|
const rowRef = useRef<HTMLTableRowElement | null>(null);
|
|
47
49
|
|
|
48
|
-
const draggingBorder =
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
50
|
+
const draggingBorder = useMemo(
|
|
51
|
+
() =>
|
|
52
|
+
draggingRow?.id === row.id
|
|
53
|
+
? `1px dashed ${theme.palette.text.secondary}`
|
|
54
|
+
: hoveredRow?.id === row.id
|
|
55
|
+
? `2px dashed ${theme.palette.primary.main}`
|
|
56
|
+
: undefined,
|
|
57
|
+
[draggingRow, hoveredRow],
|
|
58
|
+
);
|
|
54
59
|
|
|
55
60
|
const draggingBorders = draggingBorder
|
|
56
61
|
? {
|
|
@@ -90,16 +95,17 @@ export const MRT_TableBodyRow: FC<Props> = ({
|
|
|
90
95
|
...draggingBorders,
|
|
91
96
|
})}
|
|
92
97
|
>
|
|
93
|
-
{row
|
|
98
|
+
{row.getVisibleCells().map((cell) => {
|
|
94
99
|
const props = {
|
|
95
100
|
cell,
|
|
96
101
|
enableHover: tableRowProps?.hover !== false,
|
|
97
102
|
key: cell.id,
|
|
103
|
+
numRows,
|
|
98
104
|
rowIndex,
|
|
99
105
|
rowRef,
|
|
100
106
|
table,
|
|
101
107
|
};
|
|
102
|
-
return memoMode === '
|
|
108
|
+
return memoMode === 'cells' &&
|
|
103
109
|
cell.column.columnDef.columnDefType === 'data' &&
|
|
104
110
|
!draggingColumn &&
|
|
105
111
|
!draggingRow &&
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { DragEvent, FC, ReactNode } from 'react';
|
|
1
|
+
import React, { DragEvent, FC, ReactNode, useMemo } from 'react';
|
|
2
2
|
import { Box, TableCell, Theme, useTheme } from '@mui/material';
|
|
3
3
|
import { MRT_TableHeadCellColumnActionsButton } from './MRT_TableHeadCellColumnActionsButton';
|
|
4
4
|
import { MRT_TableHeadCellFilterContainer } from './MRT_TableHeadCellFilterContainer';
|
|
@@ -54,6 +54,24 @@ export const MRT_TableHeadCell: FC<Props> = ({ header, table }) => {
|
|
|
54
54
|
...mcTableHeadCellProps,
|
|
55
55
|
};
|
|
56
56
|
|
|
57
|
+
const draggingBorder = useMemo(
|
|
58
|
+
() =>
|
|
59
|
+
draggingColumn?.id === column.id
|
|
60
|
+
? `1px dashed ${theme.palette.text.secondary}`
|
|
61
|
+
: hoveredColumn?.id === column.id
|
|
62
|
+
? `2px dashed ${theme.palette.primary.main}`
|
|
63
|
+
: undefined,
|
|
64
|
+
[draggingColumn, hoveredColumn],
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
const draggingBorders = draggingBorder
|
|
68
|
+
? {
|
|
69
|
+
borderLeft: draggingBorder,
|
|
70
|
+
borderRight: draggingBorder,
|
|
71
|
+
borderTop: draggingBorder,
|
|
72
|
+
}
|
|
73
|
+
: undefined;
|
|
74
|
+
|
|
57
75
|
const handleDragEnter = (_e: DragEvent) => {
|
|
58
76
|
if (enableGrouping && hoveredColumn?.id === 'drop-zone') {
|
|
59
77
|
setHoveredColumn(null);
|
|
@@ -65,21 +83,6 @@ export const MRT_TableHeadCell: FC<Props> = ({ header, table }) => {
|
|
|
65
83
|
}
|
|
66
84
|
};
|
|
67
85
|
|
|
68
|
-
const draggingBorder =
|
|
69
|
-
draggingColumn?.id === column.id
|
|
70
|
-
? `1px dashed ${theme.palette.text.secondary}`
|
|
71
|
-
: hoveredColumn?.id === column.id
|
|
72
|
-
? `2px dashed ${theme.palette.primary.main}`
|
|
73
|
-
: undefined;
|
|
74
|
-
|
|
75
|
-
const draggingBorders = draggingBorder
|
|
76
|
-
? {
|
|
77
|
-
borderLeft: draggingBorder,
|
|
78
|
-
borderRight: draggingBorder,
|
|
79
|
-
borderTop: draggingBorder,
|
|
80
|
-
}
|
|
81
|
-
: undefined;
|
|
82
|
-
|
|
83
86
|
const headerElement = ((columnDef?.Header instanceof Function
|
|
84
87
|
? columnDef?.Header?.({
|
|
85
88
|
column,
|