material-react-table 0.23.1 → 0.23.4
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 +13 -1
- package/dist/MaterialReactTable.d.ts +18 -3
- package/dist/body/MRT_TableBody.d.ts +2 -3
- package/dist/body/MRT_TableBodyCell.d.ts +2 -3
- package/dist/body/MRT_TableBodyRow.d.ts +2 -3
- package/dist/head/MRT_TableHead.d.ts +2 -4
- package/dist/head/MRT_TableHeadCell.d.ts +2 -4
- package/dist/head/MRT_TableHeadRow.d.ts +2 -4
- package/dist/material-react-table.cjs.development.js +86 -68
- 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 +87 -69
- package/dist/material-react-table.esm.js.map +1 -1
- package/package.json +5 -4
- package/src/MaterialReactTable.tsx +18 -3
- package/src/body/MRT_TableBody.tsx +3 -9
- package/src/body/MRT_TableBodyCell.tsx +43 -14
- package/src/body/MRT_TableBodyRow.tsx +3 -10
- package/src/head/MRT_TableHead.tsx +3 -11
- package/src/head/MRT_TableHeadCell.tsx +45 -37
- package/src/head/MRT_TableHeadRow.tsx +3 -17
- package/src/table/MRT_Table.tsx +4 -17
- package/src/table/MRT_TableRoot.tsx +11 -0
package/package.json
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
{
|
2
|
-
"version": "0.23.
|
2
|
+
"version": "0.23.4",
|
3
3
|
"license": "MIT",
|
4
4
|
"name": "material-react-table",
|
5
5
|
"description": "A fully featured Material UI implementation of TanStack React Table, inspired by material-table and the MUI X DataGrid, written from the ground up in TypeScript.",
|
@@ -8,7 +8,8 @@
|
|
8
8
|
"react-table",
|
9
9
|
"material-ui",
|
10
10
|
"material-table",
|
11
|
-
"tanstack table"
|
11
|
+
"tanstack table",
|
12
|
+
"data table"
|
12
13
|
],
|
13
14
|
"repository": {
|
14
15
|
"type": "git",
|
@@ -61,7 +62,7 @@
|
|
61
62
|
"@emotion/styled": "^11.9.3",
|
62
63
|
"@faker-js/faker": "^7.3.0",
|
63
64
|
"@mui/icons-material": "^5.8.4",
|
64
|
-
"@mui/material": "^5.
|
65
|
+
"@mui/material": "^5.9.0",
|
65
66
|
"@size-limit/preset-small-lib": "^7.0.8",
|
66
67
|
"@storybook/addon-a11y": "^6.5.9",
|
67
68
|
"@storybook/addon-actions": "^6.5.9",
|
@@ -99,7 +100,7 @@
|
|
99
100
|
},
|
100
101
|
"dependencies": {
|
101
102
|
"@tanstack/match-sorter-utils": "8.1.1",
|
102
|
-
"@tanstack/react-table": "8.2.
|
103
|
+
"@tanstack/react-table": "8.2.6",
|
103
104
|
"react-virtual": "^2.10.4"
|
104
105
|
}
|
105
106
|
}
|
@@ -106,6 +106,7 @@ export type MRT_TableInstance<TData extends Record<string, any> = {}> = Omit<
|
|
106
106
|
tableId: string;
|
107
107
|
localization: MRT_Localization;
|
108
108
|
};
|
109
|
+
setCurrentDraggingColumn: Dispatch<SetStateAction<MRT_Column<TData> | null>>;
|
109
110
|
setCurrentEditingCell: Dispatch<SetStateAction<MRT_Cell | null>>;
|
110
111
|
setCurrentEditingRow: Dispatch<SetStateAction<MRT_Row | null>>;
|
111
112
|
setCurrentFilterFns: Dispatch<
|
@@ -114,6 +115,7 @@ export type MRT_TableInstance<TData extends Record<string, any> = {}> = Omit<
|
|
114
115
|
}>
|
115
116
|
>;
|
116
117
|
setCurrentGlobalFilterFn: Dispatch<SetStateAction<MRT_FilterOption>>;
|
118
|
+
setCurrentHoveredColumn: Dispatch<SetStateAction<MRT_Column<TData> | null>>;
|
117
119
|
setDensity: Dispatch<SetStateAction<'comfortable' | 'compact' | 'spacious'>>;
|
118
120
|
setIsFullScreen: Dispatch<SetStateAction<boolean>>;
|
119
121
|
setShowAlertBanner: Dispatch<SetStateAction<boolean>>;
|
@@ -123,13 +125,15 @@ export type MRT_TableInstance<TData extends Record<string, any> = {}> = Omit<
|
|
123
125
|
|
124
126
|
export type MRT_TableState<TData extends Record<string, any> = {}> =
|
125
127
|
TableState & {
|
128
|
+
currentDraggingColumn: MRT_Column<TData> | null;
|
126
129
|
currentEditingCell: MRT_Cell<TData> | null;
|
127
130
|
currentEditingRow: MRT_Row<TData> | null;
|
128
131
|
currentFilterFns: Record<string, MRT_FilterOption>;
|
129
132
|
currentGlobalFilterFn: Record<string, MRT_FilterOption>;
|
133
|
+
currentHoveredColumn: MRT_Column<TData> | null;
|
130
134
|
density: 'comfortable' | 'compact' | 'spacious';
|
131
|
-
isLoading: boolean;
|
132
135
|
isFullScreen: boolean;
|
136
|
+
isLoading: boolean;
|
133
137
|
showAlertBanner: boolean;
|
134
138
|
showColumnFilters: boolean;
|
135
139
|
showGlobalFilter: boolean;
|
@@ -618,10 +622,12 @@ export type MaterialReactTableProps<TData extends Record<string, any> = {}> =
|
|
618
622
|
cell: MRT_Cell<TData>;
|
619
623
|
table: MRT_TableInstance<TData>;
|
620
624
|
}) => void;
|
621
|
-
|
622
|
-
|
625
|
+
onCurrentDraggingColumnChange?: OnChangeFn<MRT_Column<TData> | null>;
|
626
|
+
onCurrentEditingCellChange?: OnChangeFn<MRT_Cell<TData> | null>;
|
627
|
+
onCurrentEditingRowChange?: OnChangeFn<MRT_Row<TData> | null>;
|
623
628
|
onCurrentFilterFnsChange?: OnChangeFn<{ [key: string]: MRT_FilterOption }>;
|
624
629
|
onCurrentGlobalFilterFnChange?: OnChangeFn<MRT_FilterOption>;
|
630
|
+
onCurrentHoveredColumnChange?: OnChangeFn<MRT_Column<TData> | null>;
|
625
631
|
onEditRowSubmit?: ({
|
626
632
|
row,
|
627
633
|
table,
|
@@ -703,6 +709,15 @@ export type MaterialReactTableProps<TData extends Record<string, any> = {}> =
|
|
703
709
|
virtualizerProps?: Partial<VirtualizerOptions<HTMLDivElement>>;
|
704
710
|
};
|
705
711
|
|
712
|
+
/**
|
713
|
+
* `columns` and `data` props are the only required props, but there are over 150 other optional props.
|
714
|
+
*
|
715
|
+
* See more info on creating columns and data on the official docs site:
|
716
|
+
* @link https://www.material-react-table.com/docs/usage
|
717
|
+
*
|
718
|
+
* See the full props list on the official docs site:
|
719
|
+
* @link https://www.material-react-table.com/docs/api/props
|
720
|
+
*/
|
706
721
|
export default <TData extends Record<string, any> = {}>({
|
707
722
|
autoResetExpanded = false,
|
708
723
|
columnResizeMode = 'onEnd',
|
@@ -1,21 +1,16 @@
|
|
1
|
-
import React, {
|
1
|
+
import React, { FC, RefObject, useMemo } from 'react';
|
2
2
|
import { useVirtual } from 'react-virtual';
|
3
3
|
import { TableBody } from '@mui/material';
|
4
4
|
import { MRT_TableBodyRow } from './MRT_TableBodyRow';
|
5
5
|
import { rankGlobalFuzzy } from '../sortingFns';
|
6
|
-
import type {
|
6
|
+
import type { MRT_Row, MRT_TableInstance } from '..';
|
7
7
|
|
8
8
|
interface Props {
|
9
9
|
table: MRT_TableInstance;
|
10
|
-
setCurrentHoveredColumn: Dispatch<SetStateAction<MRT_Column | null>>;
|
11
10
|
tableContainerRef: RefObject<HTMLDivElement>;
|
12
11
|
}
|
13
12
|
|
14
|
-
export const MRT_TableBody: FC<Props> = ({
|
15
|
-
setCurrentHoveredColumn,
|
16
|
-
table,
|
17
|
-
tableContainerRef,
|
18
|
-
}) => {
|
13
|
+
export const MRT_TableBody: FC<Props> = ({ table, tableContainerRef }) => {
|
19
14
|
const {
|
20
15
|
getRowModel,
|
21
16
|
getPrePaginationRowModel,
|
@@ -108,7 +103,6 @@ export const MRT_TableBody: FC<Props> = ({
|
|
108
103
|
rowIndex={
|
109
104
|
enableRowVirtualization ? rowOrVirtualRow.index : rowIndex
|
110
105
|
}
|
111
|
-
setCurrentHoveredColumn={setCurrentHoveredColumn}
|
112
106
|
table={table}
|
113
107
|
/>
|
114
108
|
);
|
@@ -1,21 +1,20 @@
|
|
1
|
-
import React, {
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
1
|
+
import React, { DragEvent, FC, MouseEvent, useMemo } from 'react';
|
2
|
+
import {
|
3
|
+
alpha,
|
4
|
+
darken,
|
5
|
+
lighten,
|
6
|
+
Skeleton,
|
7
|
+
TableCell,
|
8
|
+
useTheme,
|
9
|
+
} from '@mui/material';
|
10
10
|
import { MRT_EditCellTextField } from '../inputs/MRT_EditCellTextField';
|
11
11
|
import { MRT_CopyButton } from '../buttons/MRT_CopyButton';
|
12
|
-
import type { MRT_Cell,
|
12
|
+
import type { MRT_Cell, MRT_TableInstance } from '..';
|
13
13
|
|
14
14
|
interface Props {
|
15
15
|
cell: MRT_Cell;
|
16
16
|
enableHover?: boolean;
|
17
17
|
rowIndex: number;
|
18
|
-
setCurrentHoveredColumn: Dispatch<SetStateAction<MRT_Column | null>>;
|
19
18
|
table: MRT_TableInstance;
|
20
19
|
}
|
21
20
|
|
@@ -23,9 +22,9 @@ export const MRT_TableBodyCell: FC<Props> = ({
|
|
23
22
|
cell,
|
24
23
|
enableHover,
|
25
24
|
rowIndex,
|
26
|
-
setCurrentHoveredColumn,
|
27
25
|
table,
|
28
26
|
}) => {
|
27
|
+
const theme = useTheme();
|
29
28
|
const {
|
30
29
|
getState,
|
31
30
|
options: {
|
@@ -39,10 +38,13 @@ export const MRT_TableBodyCell: FC<Props> = ({
|
|
39
38
|
tableId,
|
40
39
|
},
|
41
40
|
setCurrentEditingCell,
|
41
|
+
setCurrentHoveredColumn,
|
42
42
|
} = table;
|
43
43
|
const {
|
44
|
+
currentDraggingColumn,
|
44
45
|
currentEditingCell,
|
45
46
|
currentEditingRow,
|
47
|
+
currentHoveredColumn,
|
46
48
|
density,
|
47
49
|
isLoading,
|
48
50
|
showSkeletons,
|
@@ -122,9 +124,25 @@ export const MRT_TableBodyCell: FC<Props> = ({
|
|
122
124
|
};
|
123
125
|
|
124
126
|
const handleDragEnter = (_e: DragEvent) => {
|
125
|
-
|
127
|
+
if (currentDraggingColumn) {
|
128
|
+
setCurrentHoveredColumn(columnDefType === 'data' ? column : null);
|
129
|
+
}
|
126
130
|
};
|
127
131
|
|
132
|
+
const draggingBorder =
|
133
|
+
currentDraggingColumn?.id === column.id
|
134
|
+
? `1px dashed ${theme.palette.divider}`
|
135
|
+
: currentHoveredColumn?.id === column.id
|
136
|
+
? `2px dashed ${theme.palette.primary.main}`
|
137
|
+
: undefined;
|
138
|
+
|
139
|
+
const draggingBorders = draggingBorder
|
140
|
+
? {
|
141
|
+
borderLeft: draggingBorder,
|
142
|
+
borderRight: draggingBorder,
|
143
|
+
}
|
144
|
+
: undefined;
|
145
|
+
|
128
146
|
return (
|
129
147
|
<TableCell
|
130
148
|
onDoubleClick={handleDoubleClick}
|
@@ -144,6 +162,11 @@ export const MRT_TableBodyCell: FC<Props> = ({
|
|
144
162
|
column.getIsPinned() === 'left'
|
145
163
|
? `${column.getStart('left')}px`
|
146
164
|
: undefined,
|
165
|
+
opacity:
|
166
|
+
currentDraggingColumn?.id === column.id ||
|
167
|
+
currentHoveredColumn?.id === column.id
|
168
|
+
? 0.5
|
169
|
+
: 1,
|
147
170
|
overflow: 'hidden',
|
148
171
|
p:
|
149
172
|
density === 'compact'
|
@@ -174,7 +197,12 @@ export const MRT_TableBodyCell: FC<Props> = ({
|
|
174
197
|
textOverflow: columnDefType !== 'display' ? 'ellipsis' : undefined,
|
175
198
|
transition: 'all 0.2s ease-in-out',
|
176
199
|
whiteSpace: density === 'compact' ? 'nowrap' : 'normal',
|
177
|
-
zIndex:
|
200
|
+
zIndex:
|
201
|
+
currentDraggingColumn?.id === column.id
|
202
|
+
? 2
|
203
|
+
: column.getIsPinned()
|
204
|
+
? 1
|
205
|
+
: undefined,
|
178
206
|
'&:hover': {
|
179
207
|
backgroundColor:
|
180
208
|
enableHover && enableEditing && editingMode !== 'row'
|
@@ -187,6 +215,7 @@ export const MRT_TableBodyCell: FC<Props> = ({
|
|
187
215
|
: undefined,
|
188
216
|
},
|
189
217
|
...(tableCellProps?.sx as any),
|
218
|
+
...draggingBorders,
|
190
219
|
maxWidth: `min(${column.getSize()}px, fit-content)`,
|
191
220
|
minWidth: `max(${column.getSize()}px, ${columnDef.minSize ?? 30}px)`,
|
192
221
|
width: column.getSize(),
|
@@ -1,22 +1,16 @@
|
|
1
|
-
import React, {
|
1
|
+
import React, { FC } from 'react';
|
2
2
|
import { darken, lighten, TableRow } from '@mui/material';
|
3
3
|
import { MRT_TableBodyCell } from './MRT_TableBodyCell';
|
4
4
|
import { MRT_TableDetailPanel } from './MRT_TableDetailPanel';
|
5
|
-
import type {
|
5
|
+
import type { MRT_Row, MRT_TableInstance } from '..';
|
6
6
|
|
7
7
|
interface Props {
|
8
8
|
row: MRT_Row;
|
9
9
|
rowIndex: number;
|
10
|
-
setCurrentHoveredColumn: Dispatch<SetStateAction<MRT_Column | null>>;
|
11
10
|
table: MRT_TableInstance;
|
12
11
|
}
|
13
12
|
|
14
|
-
export const MRT_TableBodyRow: FC<Props> = ({
|
15
|
-
row,
|
16
|
-
rowIndex,
|
17
|
-
setCurrentHoveredColumn,
|
18
|
-
table,
|
19
|
-
}) => {
|
13
|
+
export const MRT_TableBodyRow: FC<Props> = ({ row, rowIndex, table }) => {
|
20
14
|
const {
|
21
15
|
getIsSomeColumnsPinned,
|
22
16
|
options: { muiTableBodyRowProps, renderDetailPanel },
|
@@ -53,7 +47,6 @@ export const MRT_TableBodyRow: FC<Props> = ({
|
|
53
47
|
key={cell.id}
|
54
48
|
enableHover={tableRowProps?.hover !== false}
|
55
49
|
rowIndex={rowIndex}
|
56
|
-
setCurrentHoveredColumn={setCurrentHoveredColumn}
|
57
50
|
table={table}
|
58
51
|
/>
|
59
52
|
))}
|
@@ -1,19 +1,13 @@
|
|
1
|
-
import React, {
|
1
|
+
import React, { FC } from 'react';
|
2
2
|
import { TableHead } from '@mui/material';
|
3
3
|
import { MRT_TableHeadRow } from './MRT_TableHeadRow';
|
4
|
-
import type {
|
4
|
+
import type { MRT_TableInstance } from '..';
|
5
5
|
|
6
6
|
interface Props {
|
7
|
-
currentHoveredColumn: MRT_Column | null;
|
8
|
-
setCurrentHoveredColumn: Dispatch<SetStateAction<MRT_Column | null>>;
|
9
7
|
table: MRT_TableInstance;
|
10
8
|
}
|
11
9
|
|
12
|
-
export const MRT_TableHead: FC<Props> = ({
|
13
|
-
currentHoveredColumn,
|
14
|
-
setCurrentHoveredColumn,
|
15
|
-
table,
|
16
|
-
}) => {
|
10
|
+
export const MRT_TableHead: FC<Props> = ({ table }) => {
|
17
11
|
const {
|
18
12
|
getHeaderGroups,
|
19
13
|
options: { muiTableHeadProps },
|
@@ -28,8 +22,6 @@ export const MRT_TableHead: FC<Props> = ({
|
|
28
22
|
<TableHead {...tableHeadProps}>
|
29
23
|
{getHeaderGroups().map((headerGroup) => (
|
30
24
|
<MRT_TableHeadRow
|
31
|
-
currentHoveredColumn={currentHoveredColumn}
|
32
|
-
setCurrentHoveredColumn={setCurrentHoveredColumn}
|
33
25
|
headerGroup={headerGroup as any}
|
34
26
|
key={headerGroup.id}
|
35
27
|
table={table}
|
@@ -1,34 +1,21 @@
|
|
1
|
-
import React, {
|
2
|
-
|
3
|
-
DragEvent,
|
4
|
-
FC,
|
5
|
-
ReactNode,
|
6
|
-
SetStateAction,
|
7
|
-
useState,
|
8
|
-
} from 'react';
|
9
|
-
import { Box, TableCell, Theme, alpha, lighten } from '@mui/material';
|
1
|
+
import React, { DragEvent, FC, ReactNode } from 'react';
|
2
|
+
import { Box, TableCell, Theme, alpha, lighten, useTheme } from '@mui/material';
|
10
3
|
import { MRT_TableHeadCellFilterContainer } from './MRT_TableHeadCellFilterContainer';
|
11
4
|
import { MRT_TableHeadCellFilterLabel } from './MRT_TableHeadCellFilterLabel';
|
12
5
|
import { MRT_GrabHandleButton } from '../buttons/MRT_GrabHandleButton';
|
13
6
|
import { MRT_TableHeadCellResizeHandle } from './MRT_TableHeadCellResizeHandle';
|
14
7
|
import { MRT_TableHeadCellSortLabel } from './MRT_TableHeadCellSortLabel';
|
15
8
|
import { MRT_TableHeadCellColumnActionsButton } from './MRT_TableHeadCellColumnActionsButton';
|
16
|
-
import type { MRT_Column, MRT_Header, MRT_TableInstance } from '..';
|
17
9
|
import { reorderColumn } from '../utils';
|
10
|
+
import type { MRT_Header, MRT_TableInstance } from '..';
|
18
11
|
|
19
12
|
interface Props {
|
20
|
-
currentHoveredColumn: MRT_Column | null;
|
21
|
-
setCurrentHoveredColumn: Dispatch<SetStateAction<MRT_Column | null>>;
|
22
13
|
header: MRT_Header;
|
23
14
|
table: MRT_TableInstance;
|
24
15
|
}
|
25
16
|
|
26
|
-
export const MRT_TableHeadCell: FC<Props> = ({
|
27
|
-
|
28
|
-
setCurrentHoveredColumn,
|
29
|
-
header,
|
30
|
-
table,
|
31
|
-
}) => {
|
17
|
+
export const MRT_TableHeadCell: FC<Props> = ({ header, table }) => {
|
18
|
+
const theme = useTheme();
|
32
19
|
const {
|
33
20
|
getState,
|
34
21
|
options: {
|
@@ -40,8 +27,11 @@ export const MRT_TableHeadCell: FC<Props> = ({
|
|
40
27
|
muiTableHeadCellProps,
|
41
28
|
},
|
42
29
|
setColumnOrder,
|
30
|
+
setCurrentDraggingColumn,
|
31
|
+
setCurrentHoveredColumn,
|
43
32
|
} = table;
|
44
|
-
const { columnOrder, density } =
|
33
|
+
const { columnOrder, density, currentDraggingColumn, currentHoveredColumn } =
|
34
|
+
getState();
|
45
35
|
const { column } = header;
|
46
36
|
const { columnDef } = column;
|
47
37
|
const { columnDefType } = columnDef;
|
@@ -87,25 +77,43 @@ export const MRT_TableHeadCell: FC<Props> = ({
|
|
87
77
|
|
88
78
|
const tableHeadCellRef = React.useRef<HTMLElement>(null);
|
89
79
|
|
90
|
-
const [isDragging, setIsDragging] = useState(false);
|
91
|
-
|
92
80
|
const handleDragStart = (e: DragEvent<HTMLButtonElement>) => {
|
93
|
-
|
81
|
+
setCurrentDraggingColumn(column);
|
94
82
|
e.dataTransfer.setDragImage(tableHeadCellRef.current as HTMLElement, 0, 0);
|
95
83
|
};
|
96
84
|
|
97
85
|
const handleDragEnd = (_e: DragEvent<HTMLButtonElement>) => {
|
98
|
-
|
86
|
+
setCurrentDraggingColumn(null);
|
99
87
|
setCurrentHoveredColumn(null);
|
100
|
-
if (
|
88
|
+
if (
|
89
|
+
currentHoveredColumn &&
|
90
|
+
currentHoveredColumn?.id !== currentDraggingColumn?.id
|
91
|
+
) {
|
101
92
|
setColumnOrder(reorderColumn(column, currentHoveredColumn, columnOrder));
|
102
93
|
}
|
103
94
|
};
|
104
95
|
|
105
96
|
const handleDragEnter = (_e: DragEvent) => {
|
106
|
-
|
97
|
+
if (currentDraggingColumn) {
|
98
|
+
setCurrentHoveredColumn(columnDefType === 'data' ? column : null);
|
99
|
+
}
|
107
100
|
};
|
108
101
|
|
102
|
+
const draggingBorder =
|
103
|
+
currentDraggingColumn?.id === column.id
|
104
|
+
? `1px dashed ${theme.palette.divider}`
|
105
|
+
: currentHoveredColumn?.id === column.id
|
106
|
+
? `2px dashed ${theme.palette.primary.main}`
|
107
|
+
: undefined;
|
108
|
+
|
109
|
+
const draggingBorders = draggingBorder
|
110
|
+
? {
|
111
|
+
borderLeft: draggingBorder,
|
112
|
+
borderRight: draggingBorder,
|
113
|
+
borderTop: draggingBorder,
|
114
|
+
}
|
115
|
+
: undefined;
|
116
|
+
|
109
117
|
return (
|
110
118
|
<TableCell
|
111
119
|
align={columnDefType === 'group' ? 'center' : 'left'}
|
@@ -119,11 +127,6 @@ export const MRT_TableHeadCell: FC<Props> = ({
|
|
119
127
|
? alpha(lighten(theme.palette.background.default, 0.04), 0.95)
|
120
128
|
: 'inherit',
|
121
129
|
backgroundImage: 'inherit',
|
122
|
-
border: isDragging
|
123
|
-
? `2px dashed ${theme.palette.divider}`
|
124
|
-
: currentHoveredColumn?.id === column.id
|
125
|
-
? `2px dashed ${theme.palette.primary.main}`
|
126
|
-
: undefined,
|
127
130
|
boxShadow: getIsLastLeftPinnedColumn()
|
128
131
|
? `4px 0 4px -2px ${alpha(theme.palette.common.black, 0.1)}`
|
129
132
|
: getIsFirstRightPinnedColumn()
|
@@ -135,7 +138,11 @@ export const MRT_TableHeadCell: FC<Props> = ({
|
|
135
138
|
? `${column.getStart('left')}px`
|
136
139
|
: undefined,
|
137
140
|
overflow: 'visible',
|
138
|
-
opacity:
|
141
|
+
opacity:
|
142
|
+
currentDraggingColumn?.id === column.id ||
|
143
|
+
currentHoveredColumn?.id === column.id
|
144
|
+
? 0.5
|
145
|
+
: 1,
|
139
146
|
p:
|
140
147
|
density === 'compact'
|
141
148
|
? columnDefType === 'display'
|
@@ -166,12 +173,14 @@ export const MRT_TableHeadCell: FC<Props> = ({
|
|
166
173
|
transition: `all ${enableColumnResizing ? 0 : '0.2s'} ease-in-out`,
|
167
174
|
userSelect: enableMultiSort && column.getCanSort() ? 'none' : undefined,
|
168
175
|
verticalAlign: 'text-top',
|
169
|
-
zIndex:
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
176
|
+
zIndex:
|
177
|
+
column.getIsResizing() || currentDraggingColumn?.id === column.id
|
178
|
+
? 3
|
179
|
+
: column.getIsPinned() && columnDefType !== 'group'
|
180
|
+
? 2
|
181
|
+
: 1,
|
174
182
|
...(tableCellProps?.sx as any),
|
183
|
+
...draggingBorders,
|
175
184
|
maxWidth: `min(${column.getSize()}px, fit-content)`,
|
176
185
|
minWidth: `max(${column.getSize()}px, ${columnDef.minSize ?? 30}px)`,
|
177
186
|
width: header.getSize(),
|
@@ -186,7 +195,6 @@ export const MRT_TableHeadCell: FC<Props> = ({
|
|
186
195
|
display: 'flex',
|
187
196
|
justifyContent:
|
188
197
|
columnDefType === 'group' ? 'center' : 'space-between',
|
189
|
-
opacity: isDragging ? 0.5 : 1,
|
190
198
|
position: 'relative',
|
191
199
|
width: '100%',
|
192
200
|
}}
|
@@ -1,26 +1,14 @@
|
|
1
|
-
import React, {
|
1
|
+
import React, { FC } from 'react';
|
2
2
|
import { alpha, lighten, TableRow } from '@mui/material';
|
3
3
|
import { MRT_TableHeadCell } from './MRT_TableHeadCell';
|
4
|
-
import type {
|
5
|
-
MRT_Column,
|
6
|
-
MRT_Header,
|
7
|
-
MRT_HeaderGroup,
|
8
|
-
MRT_TableInstance,
|
9
|
-
} from '..';
|
4
|
+
import type { MRT_Header, MRT_HeaderGroup, MRT_TableInstance } from '..';
|
10
5
|
|
11
6
|
interface Props {
|
12
|
-
currentHoveredColumn: MRT_Column | null;
|
13
|
-
setCurrentHoveredColumn: Dispatch<SetStateAction<MRT_Column | null>>;
|
14
7
|
headerGroup: MRT_HeaderGroup;
|
15
8
|
table: MRT_TableInstance;
|
16
9
|
}
|
17
10
|
|
18
|
-
export const MRT_TableHeadRow: FC<Props> = ({
|
19
|
-
currentHoveredColumn,
|
20
|
-
setCurrentHoveredColumn,
|
21
|
-
headerGroup,
|
22
|
-
table,
|
23
|
-
}) => {
|
11
|
+
export const MRT_TableHeadRow: FC<Props> = ({ headerGroup, table }) => {
|
24
12
|
const {
|
25
13
|
options: { muiTableHeadRowProps },
|
26
14
|
} = table;
|
@@ -41,8 +29,6 @@ export const MRT_TableHeadRow: FC<Props> = ({
|
|
41
29
|
>
|
42
30
|
{headerGroup.headers.map((header: MRT_Header, index) => (
|
43
31
|
<MRT_TableHeadCell
|
44
|
-
currentHoveredColumn={currentHoveredColumn}
|
45
|
-
setCurrentHoveredColumn={setCurrentHoveredColumn}
|
46
32
|
header={header}
|
47
33
|
key={header.id || index}
|
48
34
|
table={table}
|
package/src/table/MRT_Table.tsx
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
import React, { FC, RefObject
|
1
|
+
import React, { FC, RefObject } from 'react';
|
2
2
|
import { Table } from '@mui/material';
|
3
3
|
import { MRT_TableHead } from '../head/MRT_TableHead';
|
4
4
|
import { MRT_TableBody } from '../body/MRT_TableBody';
|
5
5
|
import { MRT_TableFooter } from '../footer/MRT_TableFooter';
|
6
|
-
import {
|
6
|
+
import { MRT_TableInstance } from '..';
|
7
7
|
|
8
8
|
interface Props {
|
9
9
|
tableContainerRef: RefObject<HTMLDivElement>;
|
@@ -29,9 +29,6 @@ export const MRT_Table: FC<Props> = ({ tableContainerRef, table }) => {
|
|
29
29
|
? muiTableProps({ table })
|
30
30
|
: muiTableProps;
|
31
31
|
|
32
|
-
const [currentHoveredColumn, setCurrentHoveredColumn] =
|
33
|
-
useState<MRT_Column | null>(null);
|
34
|
-
|
35
32
|
return (
|
36
33
|
<Table
|
37
34
|
stickyHeader={
|
@@ -44,18 +41,8 @@ export const MRT_Table: FC<Props> = ({ tableContainerRef, table }) => {
|
|
44
41
|
...tableProps?.sx,
|
45
42
|
}}
|
46
43
|
>
|
47
|
-
{enableTableHead &&
|
48
|
-
|
49
|
-
currentHoveredColumn={currentHoveredColumn}
|
50
|
-
setCurrentHoveredColumn={setCurrentHoveredColumn}
|
51
|
-
table={table}
|
52
|
-
/>
|
53
|
-
)}
|
54
|
-
<MRT_TableBody
|
55
|
-
setCurrentHoveredColumn={setCurrentHoveredColumn}
|
56
|
-
tableContainerRef={tableContainerRef}
|
57
|
-
table={table}
|
58
|
-
/>
|
44
|
+
{enableTableHead && <MRT_TableHead table={table} />}
|
45
|
+
<MRT_TableBody tableContainerRef={tableContainerRef} table={table} />
|
59
46
|
{enableTableFooter && <MRT_TableFooter table={table} />}
|
60
47
|
</Table>
|
61
48
|
);
|
@@ -12,6 +12,7 @@ import {
|
|
12
12
|
} from '@tanstack/react-table';
|
13
13
|
import {
|
14
14
|
MRT_Cell,
|
15
|
+
MRT_Column,
|
15
16
|
MRT_ColumnDef,
|
16
17
|
MRT_FilterOption,
|
17
18
|
MRT_Row,
|
@@ -56,6 +57,10 @@ export const MRT_TableRoot = <TData extends Record<string, any> = {}>(
|
|
56
57
|
useState<MRT_Cell<TData> | null>(initialState?.currentEditingCell ?? null);
|
57
58
|
const [currentEditingRow, setCurrentEditingRow] =
|
58
59
|
useState<MRT_Row<TData> | null>(initialState?.currentEditingRow ?? null);
|
60
|
+
const [currentDraggingColumn, setCurrentDraggingColumn] =
|
61
|
+
useState<MRT_Column<TData> | null>(null);
|
62
|
+
const [currentHoveredColumn, setCurrentHoveredColumn] =
|
63
|
+
useState<MRT_Column<TData> | null>(null);
|
59
64
|
const [density, setDensity] = useState(
|
60
65
|
initialState?.density ?? 'comfortable',
|
61
66
|
);
|
@@ -223,10 +228,12 @@ export const MRT_TableRoot = <TData extends Record<string, any> = {}>(
|
|
223
228
|
initialState,
|
224
229
|
state: {
|
225
230
|
columnOrder,
|
231
|
+
currentDraggingColumn,
|
226
232
|
currentEditingCell,
|
227
233
|
currentEditingRow,
|
228
234
|
currentFilterFns,
|
229
235
|
currentGlobalFilterFn,
|
236
|
+
currentHoveredColumn,
|
230
237
|
density,
|
231
238
|
isFullScreen,
|
232
239
|
showAlertBanner,
|
@@ -236,6 +243,8 @@ export const MRT_TableRoot = <TData extends Record<string, any> = {}>(
|
|
236
243
|
} as TableState,
|
237
244
|
tableId,
|
238
245
|
}),
|
246
|
+
setCurrentDraggingColumn:
|
247
|
+
props.onCurrentDraggingColumnChange ?? setCurrentDraggingColumn,
|
239
248
|
setCurrentEditingCell:
|
240
249
|
props.onCurrentEditingCellChange ?? setCurrentEditingCell,
|
241
250
|
setCurrentEditingRow:
|
@@ -243,6 +252,8 @@ export const MRT_TableRoot = <TData extends Record<string, any> = {}>(
|
|
243
252
|
setCurrentFilterFns: props.onCurrentFilterFnsChange ?? setCurrentFilterFns,
|
244
253
|
setCurrentGlobalFilterFn:
|
245
254
|
props.onCurrentGlobalFilterFnChange ?? setCurrentGlobalFilterFn,
|
255
|
+
setCurrentHoveredColumn:
|
256
|
+
props.onCurrentHoveredColumnChange ?? setCurrentHoveredColumn,
|
246
257
|
setDensity: props.onDensityChange ?? setDensity,
|
247
258
|
setIsFullScreen: props.onIsFullScreenChange ?? setIsFullScreen,
|
248
259
|
setShowAlertBanner: props.onShowAlertBannerChange ?? setShowAlertBanner,
|