material-react-table 2.7.0 → 2.8.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.
Files changed (93) hide show
  1. package/dist/index.d.ts +239 -93
  2. package/dist/index.esm.js +3489 -3470
  3. package/dist/index.esm.js.map +1 -1
  4. package/dist/index.js +3486 -3470
  5. package/dist/index.js.map +1 -1
  6. package/package.json +20 -20
  7. package/src/{MaterialReactTable.tsx → components/MaterialReactTable.tsx} +3 -3
  8. package/src/{body → components/body}/MRT_TableBody.tsx +4 -4
  9. package/src/{body → components/body}/MRT_TableBodyCell.tsx +6 -23
  10. package/src/{body → components/body}/MRT_TableBodyCellValue.tsx +2 -2
  11. package/src/{body → components/body}/MRT_TableBodyRow.tsx +3 -3
  12. package/src/{body → components/body}/MRT_TableBodyRowGrabHandle.tsx +3 -3
  13. package/src/{body → components/body}/MRT_TableBodyRowPinButton.tsx +3 -3
  14. package/src/{body → components/body}/MRT_TableDetailPanel.tsx +3 -3
  15. package/src/{buttons → components/buttons}/MRT_ColumnPinningButtons.tsx +2 -2
  16. package/src/{buttons → components/buttons}/MRT_CopyButton.tsx +3 -3
  17. package/src/{buttons → components/buttons}/MRT_EditActionButtons.tsx +2 -2
  18. package/src/{buttons → components/buttons}/MRT_ExpandAllButton.tsx +3 -3
  19. package/src/{buttons → components/buttons}/MRT_ExpandButton.tsx +6 -3
  20. package/src/{buttons → components/buttons}/MRT_GrabHandleButton.tsx +3 -3
  21. package/src/{buttons → components/buttons}/MRT_RowPinButton.tsx +3 -3
  22. package/src/{buttons → components/buttons}/MRT_ShowHideColumnsButton.tsx +1 -1
  23. package/src/{buttons → components/buttons}/MRT_ToggleDensePaddingButton.tsx +1 -1
  24. package/src/{buttons → components/buttons}/MRT_ToggleFiltersButton.tsx +1 -1
  25. package/src/{buttons → components/buttons}/MRT_ToggleFullScreenButton.tsx +1 -1
  26. package/src/{buttons → components/buttons}/MRT_ToggleGlobalFilterButton.tsx +1 -1
  27. package/src/{buttons → components/buttons}/MRT_ToggleRowActionMenuButton.tsx +4 -4
  28. package/src/{footer → components/footer}/MRT_TableFooter.tsx +2 -2
  29. package/src/{footer → components/footer}/MRT_TableFooterCell.tsx +3 -3
  30. package/src/{footer → components/footer}/MRT_TableFooterRow.tsx +3 -3
  31. package/src/{head → components/head}/MRT_TableHead.tsx +3 -3
  32. package/src/{head → components/head}/MRT_TableHeadCell.tsx +3 -3
  33. package/src/{head → components/head}/MRT_TableHeadCellColumnActionsButton.tsx +4 -4
  34. package/src/{head → components/head}/MRT_TableHeadCellFilterContainer.tsx +5 -5
  35. package/src/{head → components/head}/MRT_TableHeadCellFilterLabel.tsx +2 -2
  36. package/src/{head → components/head}/MRT_TableHeadCellGrabHandle.tsx +4 -3
  37. package/src/{head → components/head}/MRT_TableHeadCellResizeHandle.tsx +2 -2
  38. package/src/{head → components/head}/MRT_TableHeadCellSortLabel.tsx +2 -2
  39. package/src/{head → components/head}/MRT_TableHeadRow.tsx +3 -3
  40. package/src/{inputs → components/inputs}/MRT_EditCellTextField.tsx +12 -4
  41. package/src/{inputs → components/inputs}/MRT_FilterCheckbox.tsx +3 -3
  42. package/src/{inputs → components/inputs}/MRT_FilterRangeFields.tsx +2 -2
  43. package/src/{inputs → components/inputs}/MRT_FilterRangeSlider.tsx +2 -2
  44. package/src/{inputs → components/inputs}/MRT_FilterTextField.tsx +3 -3
  45. package/src/{inputs → components/inputs}/MRT_GlobalFilterTextField.tsx +2 -2
  46. package/src/{inputs → components/inputs}/MRT_SelectCheckbox.tsx +3 -3
  47. package/src/{menus → components/menus}/MRT_ColumnActionMenu.tsx +8 -8
  48. package/src/{menus → components/menus}/MRT_FilterOptionMenu.tsx +2 -2
  49. package/src/{menus → components/menus}/MRT_RowActionMenu.tsx +9 -9
  50. package/src/{menus → components/menus}/MRT_ShowHideColumnsMenu.tsx +5 -7
  51. package/src/{menus → components/menus}/MRT_ShowHideColumnsMenuItems.tsx +6 -5
  52. package/src/{modals → components/modals}/MRT_EditRowModal.tsx +4 -4
  53. package/src/{table → components/table}/MRT_Table.tsx +4 -4
  54. package/src/{table → components/table}/MRT_TableContainer.tsx +2 -2
  55. package/src/{table → components/table}/MRT_TableLoadingOverlay.tsx +3 -3
  56. package/src/{table → components/table}/MRT_TablePaper.tsx +3 -3
  57. package/src/{toolbar → components/toolbar}/MRT_BottomToolbar.tsx +3 -3
  58. package/src/{toolbar → components/toolbar}/MRT_LinearProgressBar.tsx +2 -2
  59. package/src/{toolbar → components/toolbar}/MRT_TablePagination.tsx +3 -3
  60. package/src/{toolbar → components/toolbar}/MRT_ToolbarAlertBanner.tsx +2 -2
  61. package/src/{toolbar → components/toolbar}/MRT_ToolbarDropZone.tsx +2 -2
  62. package/src/{toolbar → components/toolbar}/MRT_ToolbarInternalButtons.tsx +2 -2
  63. package/src/{toolbar → components/toolbar}/MRT_TopToolbar.tsx +3 -3
  64. package/src/{filterFns.ts → fns/filterFns.ts} +1 -1
  65. package/src/{sortingFns.ts → fns/sortingFns.ts} +1 -1
  66. package/src/hooks/display-columns/getMRT_DisplayColumns.tsx +26 -0
  67. package/src/hooks/display-columns/getMRT_RowActionsColumnDef.tsx +34 -0
  68. package/src/hooks/display-columns/getMRT_RowDragColumnDef.tsx +35 -0
  69. package/src/hooks/display-columns/getMRT_RowExpandColumnDef.tsx +96 -0
  70. package/src/hooks/display-columns/getMRT_RowNumbersColumnDef.tsx +36 -0
  71. package/src/hooks/display-columns/getMRT_RowPinningColumnDef.tsx +30 -0
  72. package/src/hooks/display-columns/getMRT_RowSelectColumnDef.tsx +40 -0
  73. package/src/hooks/display-columns/getMRT_RowSpacerColumnDef.tsx +40 -0
  74. package/src/hooks/useMRT_ColumnVirtualizer.ts +2 -4
  75. package/src/hooks/useMRT_Effects.ts +1 -1
  76. package/src/hooks/useMRT_RowVirtualizer.ts +2 -4
  77. package/src/hooks/useMRT_Rows.ts +2 -2
  78. package/src/hooks/useMRT_TableInstance.ts +54 -39
  79. package/src/hooks/useMRT_TableOptions.ts +3 -3
  80. package/src/{useMaterialReactTable.ts → hooks/useMaterialReactTable.ts} +3 -3
  81. package/src/index.ts +79 -82
  82. package/src/types.ts +54 -26
  83. package/src/utils/column.utils.ts +173 -0
  84. package/src/utils/displayColumn.utils.ts +134 -0
  85. package/src/utils/row.utils.ts +26 -0
  86. package/src/{style.utils.ts → utils/style.utils.ts} +21 -15
  87. package/src/utils/tanstack.helpers.ts +64 -0
  88. package/src/utils/utils.ts +23 -0
  89. package/src/utils/virtualization.utils.ts +19 -0
  90. package/src/utils.ts +0 -0
  91. package/src/column.utils.ts +0 -361
  92. package/src/hooks/useMRT_DisplayColumns.tsx +0 -290
  93. /package/src/{aggregationFns.ts → fns/aggregationFns.ts} +0 -0
@@ -0,0 +1,96 @@
1
+ import { type ReactNode } from 'react';
2
+ import Stack from '@mui/material/Stack';
3
+ import Tooltip from '@mui/material/Tooltip';
4
+ import { MRT_ExpandAllButton } from '../../components/buttons/MRT_ExpandAllButton';
5
+ import { MRT_ExpandButton } from '../../components/buttons/MRT_ExpandButton';
6
+ import {
7
+ type MRT_ColumnDef,
8
+ type MRT_RowData,
9
+ type MRT_StatefulTableOptions,
10
+ } from '../../types';
11
+ import {
12
+ defaultDisplayColumnProps,
13
+ showRowExpandColumn,
14
+ } from '../../utils/displayColumn.utils';
15
+ import { getCommonTooltipProps } from '../../utils/style.utils';
16
+
17
+ export const getMRT_RowExpandColumnDef = <TData extends MRT_RowData>(
18
+ tableOptions: MRT_StatefulTableOptions<TData>,
19
+ ): MRT_ColumnDef<TData> | null => {
20
+ if (!showRowExpandColumn(tableOptions)) {
21
+ return null;
22
+ }
23
+
24
+ const {
25
+ defaultColumn,
26
+ enableExpandAll,
27
+ groupedColumnMode,
28
+ positionExpandColumn,
29
+ renderDetailPanel,
30
+ state: { grouping },
31
+ } = tableOptions;
32
+
33
+ const alignProps =
34
+ positionExpandColumn === 'last'
35
+ ? ({
36
+ align: 'right',
37
+ } as const)
38
+ : undefined;
39
+
40
+ return {
41
+ Cell: ({ cell, column, row, staticRowIndex, table }) => {
42
+ const expandButtonProps = { row, staticRowIndex, table };
43
+ const subRowsLength = row.subRows?.length;
44
+ if (groupedColumnMode === 'remove' && row.groupingColumnId) {
45
+ return (
46
+ <Stack alignItems="center" flexDirection="row" gap="0.25rem">
47
+ <MRT_ExpandButton {...expandButtonProps} />
48
+ <Tooltip
49
+ {...getCommonTooltipProps('right')}
50
+ title={table.getColumn(row.groupingColumnId).columnDef.header}
51
+ >
52
+ <span>{row.groupingValue as ReactNode}</span>
53
+ </Tooltip>
54
+ {!!subRowsLength && <span>({subRowsLength})</span>}
55
+ </Stack>
56
+ );
57
+ } else {
58
+ return (
59
+ <>
60
+ <MRT_ExpandButton {...expandButtonProps} />
61
+ {column.columnDef.GroupedCell?.({ cell, column, row, table })}
62
+ </>
63
+ );
64
+ }
65
+ },
66
+ Header: enableExpandAll
67
+ ? ({ table }) => {
68
+ return (
69
+ <>
70
+ <MRT_ExpandAllButton table={table} />
71
+ {groupedColumnMode === 'remove' &&
72
+ grouping
73
+ ?.map(
74
+ (groupedColumnId) =>
75
+ table.getColumn(groupedColumnId).columnDef.header,
76
+ )
77
+ ?.join(', ')}
78
+ </>
79
+ );
80
+ }
81
+ : undefined,
82
+ muiTableBodyCellProps: alignProps,
83
+ muiTableHeadCellProps: alignProps,
84
+ ...defaultDisplayColumnProps({
85
+ header: 'expand',
86
+ id: 'mrt-row-expand',
87
+ size:
88
+ groupedColumnMode === 'remove'
89
+ ? defaultColumn?.size
90
+ : renderDetailPanel
91
+ ? 60
92
+ : 100,
93
+ tableOptions,
94
+ }),
95
+ };
96
+ };
@@ -0,0 +1,36 @@
1
+ import {
2
+ type MRT_ColumnDef,
3
+ type MRT_RowData,
4
+ type MRT_StatefulTableOptions,
5
+ } from '../../types';
6
+ import {
7
+ defaultDisplayColumnProps,
8
+ showRowNumbersColumn,
9
+ } from '../../utils/displayColumn.utils';
10
+
11
+ export const getMRT_RowNumbersColumnDef = <TData extends MRT_RowData>(
12
+ tableOptions: MRT_StatefulTableOptions<TData>,
13
+ ): MRT_ColumnDef<TData> | null => {
14
+ if (!showRowNumbersColumn(tableOptions)) {
15
+ return null;
16
+ }
17
+
18
+ const { localization, rowNumberDisplayMode } = tableOptions;
19
+ const {
20
+ pagination: { pageIndex, pageSize },
21
+ } = tableOptions.state;
22
+
23
+ return {
24
+ Cell: ({ row, staticRowIndex }) =>
25
+ ((rowNumberDisplayMode === 'static'
26
+ ? (staticRowIndex || 0) + (pageSize || 0) * (pageIndex || 0)
27
+ : row.index) ?? 0) + 1,
28
+ Header: () => localization.rowNumber,
29
+ grow: false,
30
+ ...defaultDisplayColumnProps({
31
+ header: 'rowNumbers',
32
+ id: 'mrt-row-numbers',
33
+ tableOptions,
34
+ }),
35
+ };
36
+ };
@@ -0,0 +1,30 @@
1
+ import { MRT_TableBodyRowPinButton } from '../../components/body/MRT_TableBodyRowPinButton';
2
+ import {
3
+ type MRT_ColumnDef,
4
+ type MRT_RowData,
5
+ type MRT_StatefulTableOptions,
6
+ } from '../../types';
7
+ import {
8
+ defaultDisplayColumnProps,
9
+ showRowPinningColumn,
10
+ } from '../../utils/displayColumn.utils';
11
+
12
+ export const getMRT_RowPinningColumnDef = <TData extends MRT_RowData>(
13
+ tableOptions: MRT_StatefulTableOptions<TData>,
14
+ ): MRT_ColumnDef<TData> | null => {
15
+ if (!showRowPinningColumn(tableOptions)) {
16
+ return null;
17
+ }
18
+
19
+ return {
20
+ Cell: ({ row, table }) => (
21
+ <MRT_TableBodyRowPinButton row={row} table={table} />
22
+ ),
23
+ grow: false,
24
+ ...defaultDisplayColumnProps({
25
+ header: 'pin',
26
+ id: 'mrt-row-pin',
27
+ tableOptions,
28
+ }),
29
+ };
30
+ };
@@ -0,0 +1,40 @@
1
+ import { MRT_SelectCheckbox } from '../../components/inputs/MRT_SelectCheckbox';
2
+ import {
3
+ type MRT_ColumnDef,
4
+ type MRT_RowData,
5
+ type MRT_StatefulTableOptions,
6
+ } from '../../types';
7
+ import {
8
+ defaultDisplayColumnProps,
9
+ showRowSelectionColumn,
10
+ } from '../../utils/displayColumn.utils';
11
+
12
+ export const getMRT_RowSelectColumnDef = <TData extends MRT_RowData>(
13
+ tableOptions: MRT_StatefulTableOptions<TData>,
14
+ ): MRT_ColumnDef<TData> | null => {
15
+ if (!showRowSelectionColumn(tableOptions)) {
16
+ return null;
17
+ }
18
+
19
+ const { enableMultiRowSelection, enableSelectAll } = tableOptions;
20
+
21
+ return {
22
+ Cell: ({ row, staticRowIndex, table }) => (
23
+ <MRT_SelectCheckbox
24
+ row={row}
25
+ staticRowIndex={staticRowIndex}
26
+ table={table}
27
+ />
28
+ ),
29
+ Header:
30
+ enableSelectAll && enableMultiRowSelection
31
+ ? ({ table }) => <MRT_SelectCheckbox selectAll table={table} />
32
+ : undefined,
33
+ grow: false,
34
+ ...defaultDisplayColumnProps({
35
+ header: 'select',
36
+ id: 'mrt-row-select',
37
+ tableOptions,
38
+ }),
39
+ };
40
+ };
@@ -0,0 +1,40 @@
1
+ import { MRT_DefaultDisplayColumn } from '../useMRT_TableOptions';
2
+ import {
3
+ type MRT_ColumnDef,
4
+ type MRT_RowData,
5
+ type MRT_StatefulTableOptions,
6
+ } from '../../types';
7
+ import {
8
+ defaultDisplayColumnProps,
9
+ showRowSpacerColumn,
10
+ } from '../../utils/displayColumn.utils';
11
+
12
+ const blankColProps = {
13
+ children: null,
14
+ sx: {
15
+ minWidth: 0,
16
+ p: 0,
17
+ width: 0,
18
+ },
19
+ };
20
+
21
+ export const getMRT_RowSpacerColumnDef = <TData extends MRT_RowData>(
22
+ tableOptions: MRT_StatefulTableOptions<TData>,
23
+ ): MRT_ColumnDef<TData> | null => {
24
+ if (!showRowSpacerColumn(tableOptions)) {
25
+ return null;
26
+ }
27
+
28
+ return {
29
+ ...defaultDisplayColumnProps({
30
+ id: 'mrt-row-spacer',
31
+ size: 0,
32
+ tableOptions,
33
+ }),
34
+ grow: true,
35
+ ...MRT_DefaultDisplayColumn,
36
+ muiTableBodyCellProps: blankColProps,
37
+ muiTableFooterCellProps: blankColProps,
38
+ muiTableHeadCellProps: blankColProps,
39
+ };
40
+ };
@@ -1,14 +1,12 @@
1
1
  import { useCallback, useMemo } from 'react';
2
2
  import { type Range, useVirtualizer } from '@tanstack/react-virtual';
3
- import {
4
- extraIndexRangeExtractor,
5
- parseFromValuesOrFunc,
6
- } from '../column.utils';
7
3
  import {
8
4
  type MRT_ColumnVirtualizer,
9
5
  type MRT_RowData,
10
6
  type MRT_TableInstance,
11
7
  } from '../types';
8
+ import { parseFromValuesOrFunc } from '../utils/utils';
9
+ import { extraIndexRangeExtractor } from '../utils/virtualization.utils';
12
10
 
13
11
  export const useMRT_ColumnVirtualizer = <
14
12
  TData extends MRT_RowData,
@@ -1,10 +1,10 @@
1
1
  import { useEffect, useReducer, useRef } from 'react';
2
- import { getCanRankRows } from '../column.utils';
3
2
  import {
4
3
  type MRT_RowData,
5
4
  type MRT_SortingState,
6
5
  type MRT_TableInstance,
7
6
  } from '../types';
7
+ import { getCanRankRows } from '../utils/row.utils';
8
8
 
9
9
  export const useMRT_Effects = <TData extends MRT_RowData>(
10
10
  table: MRT_TableInstance<TData>,
@@ -1,15 +1,13 @@
1
1
  import { useCallback } from 'react';
2
2
  import { type Range, useVirtualizer } from '@tanstack/react-virtual';
3
- import {
4
- extraIndexRangeExtractor,
5
- parseFromValuesOrFunc,
6
- } from '../column.utils';
7
3
  import {
8
4
  type MRT_Row,
9
5
  type MRT_RowData,
10
6
  type MRT_RowVirtualizer,
11
7
  type MRT_TableInstance,
12
8
  } from '../types';
9
+ import { parseFromValuesOrFunc } from '../utils/utils';
10
+ import { extraIndexRangeExtractor } from '../utils/virtualization.utils';
13
11
 
14
12
  export const useMRT_RowVirtualizer = <
15
13
  TData extends MRT_RowData,
@@ -1,11 +1,11 @@
1
1
  import { useMemo } from 'react';
2
- import { getCanRankRows } from '../column.utils';
3
- import { rankGlobalFuzzy } from '../sortingFns';
2
+ import { rankGlobalFuzzy } from '../fns/sortingFns';
4
3
  import {
5
4
  type MRT_Row,
6
5
  type MRT_RowData,
7
6
  type MRT_TableInstance,
8
7
  } from '../types';
8
+ import { getCanRankRows } from '../utils/row.utils';
9
9
 
10
10
  export const useMRT_Rows = <TData extends MRT_RowData>(
11
11
  table: MRT_TableInstance<TData>,
@@ -11,20 +11,13 @@ import {
11
11
  getSortedRowModel,
12
12
  useReactTable,
13
13
  } from '@tanstack/react-table';
14
- import {
15
- createRow,
16
- getAllLeafColumnDefs,
17
- getColumnId,
18
- getDefaultColumnFilterFn,
19
- getDefaultColumnOrderIds,
20
- prepareColumns,
21
- } from '../column.utils';
22
14
  import {
23
15
  type MRT_Cell,
24
16
  type MRT_Column,
25
17
  type MRT_ColumnDef,
26
18
  type MRT_ColumnFilterFnsState,
27
19
  type MRT_ColumnOrderState,
20
+ type MRT_ColumnSizingInfoState,
28
21
  type MRT_DefinedTableOptions,
29
22
  type MRT_DensityState,
30
23
  type MRT_FilterOption,
@@ -32,18 +25,25 @@ import {
32
25
  type MRT_PaginationState,
33
26
  type MRT_Row,
34
27
  type MRT_RowData,
28
+ type MRT_StatefulTableOptions,
35
29
  type MRT_TableInstance,
36
30
  type MRT_TableState,
37
31
  type MRT_Updater,
38
32
  } from '../types';
39
- import { useMRT_DisplayColumns } from './useMRT_DisplayColumns';
33
+ import {
34
+ getAllLeafColumnDefs,
35
+ getColumnId,
36
+ getDefaultColumnFilterFn,
37
+ prepareColumns,
38
+ } from '../utils/column.utils';
39
+ import { getDefaultColumnOrderIds } from '../utils/displayColumn.utils';
40
+ import { createRow } from '../utils/tanstack.helpers';
41
+ import { getMRT_DisplayColumns } from './display-columns/getMRT_DisplayColumns';
40
42
  import { useMRT_Effects } from './useMRT_Effects';
41
43
 
42
- export const useMRT_TableInstance: <TData extends MRT_RowData>(
43
- tableOptions: MRT_DefinedTableOptions<TData>,
44
- ) => MRT_TableInstance<TData> = <TData extends MRT_RowData>(
45
- tableOptions: MRT_DefinedTableOptions<TData>,
46
- ) => {
44
+ export const useMRT_TableInstance = <TData extends MRT_RowData>(
45
+ _tableOptions: MRT_DefinedTableOptions<TData>,
46
+ ): MRT_TableInstance<TData> => {
47
47
  const bottomToolbarRef = useRef<HTMLDivElement>(null);
48
48
  const editInputRefs = useRef<Record<string, HTMLInputElement>>({});
49
49
  const filterInputRefs = useRef<Record<string, HTMLInputElement>>({});
@@ -56,14 +56,18 @@ export const useMRT_TableInstance: <TData extends MRT_RowData>(
56
56
  const tableFooterRef = useRef<HTMLTableSectionElement>(null);
57
57
 
58
58
  const initialState: Partial<MRT_TableState<TData>> = useMemo(() => {
59
- const initState = tableOptions.initialState ?? {};
59
+ const initState = _tableOptions.initialState ?? {};
60
60
  initState.columnOrder =
61
- initState.columnOrder ?? getDefaultColumnOrderIds(tableOptions);
62
- initState.globalFilterFn = tableOptions.globalFilterFn ?? 'fuzzy';
61
+ initState.columnOrder ??
62
+ getDefaultColumnOrderIds({
63
+ ..._tableOptions,
64
+ state: { ..._tableOptions.initialState, ..._tableOptions.state },
65
+ } as MRT_StatefulTableOptions<TData>);
66
+ initState.globalFilterFn = _tableOptions.globalFilterFn ?? 'fuzzy';
63
67
  return initState;
64
68
  }, []);
65
69
 
66
- tableOptions.initialState = initialState;
70
+ _tableOptions.initialState = initialState;
67
71
 
68
72
  const [creatingRow, _setCreatingRow] = useState<MRT_Row<TData> | null>(
69
73
  initialState.creatingRow ?? null,
@@ -73,7 +77,7 @@ export const useMRT_TableInstance: <TData extends MRT_RowData>(
73
77
  Object.assign(
74
78
  {},
75
79
  ...getAllLeafColumnDefs(
76
- tableOptions.columns as MRT_ColumnDef<TData>[],
80
+ _tableOptions.columns as MRT_ColumnDef<TData>[],
77
81
  ).map((col) => ({
78
82
  [getColumnId(col)]:
79
83
  col.filterFn instanceof Function
@@ -87,6 +91,10 @@ export const useMRT_TableInstance: <TData extends MRT_RowData>(
87
91
  const [columnOrder, onColumnOrderChange] = useState<MRT_ColumnOrderState>(
88
92
  initialState.columnOrder ?? [],
89
93
  );
94
+ const [columnSizingInfo, onColumnSizingInfoChange] =
95
+ useState<MRT_ColumnSizingInfoState>(
96
+ initialState.columnSizingInfo ?? ({} as MRT_ColumnSizingInfoState),
97
+ );
90
98
  const [density, setDensity] = useState<MRT_DensityState>(
91
99
  initialState?.density ?? 'comfortable',
92
100
  );
@@ -120,7 +128,7 @@ export const useMRT_TableInstance: <TData extends MRT_RowData>(
120
128
  initialState?.pagination ?? { pageIndex: 0, pageSize: 10 },
121
129
  );
122
130
  const [showAlertBanner, setShowAlertBanner] = useState<boolean>(
123
- tableOptions.initialState?.showAlertBanner ?? false,
131
+ initialState?.showAlertBanner ?? false,
124
132
  );
125
133
  const [showColumnFilters, setShowColumnFilters] = useState<boolean>(
126
134
  initialState?.showColumnFilters ?? false,
@@ -132,9 +140,10 @@ export const useMRT_TableInstance: <TData extends MRT_RowData>(
132
140
  initialState?.showToolbarDropZone ?? false,
133
141
  );
134
142
 
135
- tableOptions.state = {
143
+ _tableOptions.state = {
136
144
  columnFilterFns,
137
145
  columnOrder,
146
+ columnSizingInfo,
138
147
  creatingRow,
139
148
  density,
140
149
  draggingColumn,
@@ -151,30 +160,35 @@ export const useMRT_TableInstance: <TData extends MRT_RowData>(
151
160
  showColumnFilters,
152
161
  showGlobalFilter,
153
162
  showToolbarDropZone,
154
- ...tableOptions.state,
163
+ ..._tableOptions.state,
155
164
  };
156
165
 
157
- const displayColumns = useMRT_DisplayColumns(tableOptions);
166
+ const tableOptions = _tableOptions as MRT_StatefulTableOptions<TData>;
158
167
 
159
- tableOptions.columns = useMemo(
160
- () =>
161
- prepareColumns({
162
- columnDefs: [...displayColumns, ...tableOptions.columns],
163
- tableOptions,
164
- }),
165
- [displayColumns, tableOptions.columns],
166
- );
168
+ //don't recompute columnDefs while resizing column or dragging column/row
169
+ const columnDefsRef = useRef<MRT_ColumnDef<TData>[]>([]);
170
+ tableOptions.columns =
171
+ tableOptions.state.columnSizingInfo.isResizingColumn ||
172
+ tableOptions.state.draggingColumn ||
173
+ tableOptions.state.draggingRow
174
+ ? columnDefsRef.current
175
+ : prepareColumns({
176
+ columnDefs: [
177
+ ...getMRT_DisplayColumns(tableOptions),
178
+ ...tableOptions.columns,
179
+ ],
180
+ tableOptions,
181
+ });
182
+ columnDefsRef.current = tableOptions.columns;
167
183
 
168
184
  tableOptions.data = useMemo(
169
185
  () =>
170
- (tableOptions.state?.isLoading || tableOptions.state?.showSkeletons) &&
186
+ (tableOptions.state.isLoading || tableOptions.state.showSkeletons) &&
171
187
  !tableOptions.data.length
172
188
  ? [
173
- ...Array(
174
- tableOptions.state?.pagination?.pageSize ||
175
- initialState?.pagination?.pageSize ||
176
- 10,
177
- ).fill(null),
189
+ ...Array(Math.min(tableOptions.state.pagination.pageSize, 20)).fill(
190
+ null,
191
+ ),
178
192
  ].map(() =>
179
193
  Object.assign(
180
194
  {},
@@ -186,8 +200,8 @@ export const useMRT_TableInstance: <TData extends MRT_RowData>(
186
200
  : tableOptions.data,
187
201
  [
188
202
  tableOptions.data,
189
- tableOptions.state?.isLoading,
190
- tableOptions.state?.showSkeletons,
203
+ tableOptions.state.isLoading,
204
+ tableOptions.state.showSkeletons,
191
205
  ],
192
206
  );
193
207
 
@@ -224,6 +238,7 @@ export const useMRT_TableInstance: <TData extends MRT_RowData>(
224
238
  : undefined,
225
239
  getSubRows: (row) => row?.subRows,
226
240
  onColumnOrderChange,
241
+ onColumnSizingInfoChange,
227
242
  onGroupingChange,
228
243
  onPaginationChange,
229
244
  ...tableOptions,
@@ -1,10 +1,10 @@
1
1
  import { useMemo } from 'react';
2
2
  import { useTheme } from '@mui/material/styles';
3
- import { MRT_AggregationFns } from '../aggregationFns';
4
- import { MRT_FilterFns } from '../filterFns';
3
+ import { MRT_AggregationFns } from '../fns/aggregationFns';
4
+ import { MRT_FilterFns } from '../fns/filterFns';
5
+ import { MRT_SortingFns } from '../fns/sortingFns';
5
6
  import { MRT_Default_Icons } from '../icons';
6
7
  import { MRT_Localization_EN } from '../locales/en';
7
- import { MRT_SortingFns } from '../sortingFns';
8
8
  import {
9
9
  type MRT_DefinedTableOptions,
10
10
  type MRT_RowData,
@@ -1,10 +1,10 @@
1
- import { useMRT_TableInstance } from './hooks/useMRT_TableInstance';
2
- import { useMRT_TableOptions } from './hooks/useMRT_TableOptions';
3
1
  import {
4
2
  type MRT_RowData,
5
3
  type MRT_TableInstance,
6
4
  type MRT_TableOptions,
7
- } from './types';
5
+ } from '../types';
6
+ import { useMRT_TableInstance } from './useMRT_TableInstance';
7
+ import { useMRT_TableOptions } from './useMRT_TableOptions';
8
8
 
9
9
  export const useMaterialReactTable = <TData extends MRT_RowData>(
10
10
  tableOptions: MRT_TableOptions<TData>,