material-react-table 0.23.1 → 0.23.4

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.23.1",
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.8.7",
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.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
- onCurrentEditingCellChange?: OnChangeFn<MRT_Cell>;
622
- onCurrentEditingRowChange?: OnChangeFn<MRT_Row>;
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, { Dispatch, FC, RefObject, SetStateAction, useMemo } from '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 { MRT_Column, MRT_Row, MRT_TableInstance } from '..';
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
- Dispatch,
3
- DragEvent,
4
- FC,
5
- MouseEvent,
6
- SetStateAction,
7
- useMemo,
8
- } from 'react';
9
- import { alpha, darken, lighten, Skeleton, TableCell } from '@mui/material';
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, MRT_Column, MRT_TableInstance } from '..';
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
- setCurrentHoveredColumn(columnDefType === 'data' ? column : null);
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: column.getIsPinned() ? 1 : undefined,
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, { Dispatch, FC, SetStateAction } from '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 { MRT_Column, MRT_Row, MRT_TableInstance } from '..';
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, { Dispatch, FC, SetStateAction } from '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 { MRT_Column, MRT_TableInstance } from '..';
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
- Dispatch,
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
- currentHoveredColumn,
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 } = getState();
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
- setIsDragging(true);
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
- setIsDragging(false);
86
+ setCurrentDraggingColumn(null);
99
87
  setCurrentHoveredColumn(null);
100
- if (currentHoveredColumn) {
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
- setCurrentHoveredColumn(columnDefType === 'data' ? column : null);
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: isDragging ? 0.5 : 1,
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: column.getIsResizing()
170
- ? 3
171
- : column.getIsPinned() && columnDefType !== 'group'
172
- ? 2
173
- : 1,
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, { Dispatch, FC, SetStateAction } from '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}
@@ -1,9 +1,9 @@
1
- import React, { FC, RefObject, useState } from 'react';
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 { MRT_Column, MRT_TableInstance } from '..';
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
- <MRT_TableHead
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,