material-react-table 2.0.0-alpha.5 → 2.0.0-alpha.6

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.
@@ -1,5 +1,6 @@
1
1
  import { type ReactNode } from 'react';
2
2
  import { type Renderable, type Row } from '@tanstack/react-table';
3
+ import { type Range } from '@tanstack/react-virtual';
3
4
  import { type TableCellProps } from '@mui/material/TableCell';
4
5
  import { type Theme } from '@mui/material/styles';
5
6
  import { type MRT_AggregationFns } from './aggregationFns';
@@ -144,3 +145,4 @@ export declare const parseFromValuesOrFunc: <T, U>(fn: T | ((arg: U) => T) | und
144
145
  export declare const parseCSSVarId: (id: string) => string;
145
146
  export declare const flexRender: (Comp: Renderable<any>, props: any) => JSX.Element | ReactNode;
146
147
  export declare const createRow: <TData extends Record<string, any>>(table: MRT_TableInstance<TData>, originalRow?: TData | undefined) => MRT_Row<TData>;
148
+ export declare const extraIndexRangeExtractor: (range: Range, draggingIndex: number) => number[];
@@ -180,12 +180,8 @@ export type MRT_TableInstance<TData extends Record<string, any>> = Omit<Table<TD
180
180
  setEditingCell: Dispatch<SetStateAction<MRT_Cell<TData> | null>>;
181
181
  setEditingRow: Dispatch<SetStateAction<MRT_Row<TData> | null>>;
182
182
  setGlobalFilterFn: Dispatch<SetStateAction<MRT_FilterOption>>;
183
- setHoveredColumn: Dispatch<SetStateAction<{
184
- id: string;
185
- } | MRT_Column<TData> | null>>;
186
- setHoveredRow: Dispatch<SetStateAction<{
187
- id: string;
188
- } | MRT_Row<TData> | null>>;
183
+ setHoveredColumn: Dispatch<SetStateAction<Partial<MRT_Column<TData>> | null>>;
184
+ setHoveredRow: Dispatch<SetStateAction<Partial<MRT_Row<TData>> | null>>;
189
185
  setIsFullScreen: Dispatch<SetStateAction<boolean>>;
190
186
  setShowAlertBanner: Dispatch<SetStateAction<boolean>>;
191
187
  setShowColumnFilters: Dispatch<SetStateAction<boolean>>;
@@ -205,12 +201,8 @@ export type MRT_TableState<TData extends Record<string, any>> = TableState & {
205
201
  editingCell: MRT_Cell<TData> | null;
206
202
  editingRow: MRT_Row<TData> | null;
207
203
  globalFilterFn: MRT_FilterOption;
208
- hoveredColumn: {
209
- id: string;
210
- } | MRT_Column<TData> | null;
211
- hoveredRow: {
212
- id: string;
213
- } | MRT_Row<TData> | null;
204
+ hoveredColumn: Partial<MRT_Column<TData>> | null;
205
+ hoveredRow: Partial<MRT_Row<TData>> | null;
214
206
  isFullScreen: boolean;
215
207
  isLoading: boolean;
216
208
  isSaving: boolean;
@@ -727,12 +719,8 @@ export type MRT_TableOptions<TData extends Record<string, any>> = Omit<Partial<T
727
719
  values: Record<LiteralUnion<string & DeepKeys<TData>>, any>;
728
720
  }) => Promise<void> | void;
729
721
  onGlobalFilterFnChange?: OnChangeFn<MRT_FilterOption>;
730
- onHoveredColumnChange?: OnChangeFn<{
731
- id: string;
732
- } | MRT_Column<TData> | null>;
733
- onHoveredRowChange?: OnChangeFn<{
734
- id: string;
735
- } | MRT_Row<TData> | null>;
722
+ onHoveredColumnChange?: OnChangeFn<Partial<MRT_Column<TData>> | null>;
723
+ onHoveredRowChange?: OnChangeFn<Partial<MRT_Row<TData>> | null>;
736
724
  onIsFullScreenChange?: OnChangeFn<boolean>;
737
725
  onShowAlertBannerChange?: OnChangeFn<boolean>;
738
726
  onShowColumnFiltersChange?: OnChangeFn<boolean>;
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ import { MutableRefObject, Dispatch, SetStateAction, ReactNode, RefObject, DragE
3
3
  import * as _tanstack_react_table from '@tanstack/react-table';
4
4
  import { Row, Table, TableState, ColumnDef, DeepKeys, Column, Header, HeaderGroup, Cell, AggregationFn, SortingFn, FilterFn, TableOptions, OnChangeFn, RowPinningPosition, ColumnOrderState, GroupingState, Renderable } from '@tanstack/react-table';
5
5
  export { ColumnFiltersState as MRT_ColumnFiltersState, ColumnOrderState as MRT_ColumnOrderState, ColumnPinningState as MRT_ColumnPinningState, ColumnSizingInfoState as MRT_ColumnSizingInfoState, ColumnSizingState as MRT_ColumnSizingState, ExpandedState as MRT_ExpandedState, GroupingState as MRT_GroupingState, PaginationState as MRT_PaginationState, RowSelectionState as MRT_RowSelectionState, SortingState as MRT_SortingState, Updater as MRT_Updater, VisibilityState as MRT_VisibilityState } from '@tanstack/react-table';
6
- import { Virtualizer, VirtualizerOptions, VirtualItem } from '@tanstack/react-virtual';
6
+ import { Virtualizer, VirtualizerOptions, VirtualItem, Range } from '@tanstack/react-virtual';
7
7
  export { VirtualItem as MRT_VirtualItem, Virtualizer as MRT_Virtualizer, VirtualizerOptions as MRT_VirtualizerOptions } from '@tanstack/react-virtual';
8
8
  import { AlertProps } from '@mui/material/Alert';
9
9
  import { AutocompleteProps } from '@mui/material/Autocomplete';
@@ -308,12 +308,8 @@ type MRT_TableInstance<TData extends Record<string, any>> = Omit<Table<TData>, '
308
308
  setEditingCell: Dispatch<SetStateAction<MRT_Cell<TData> | null>>;
309
309
  setEditingRow: Dispatch<SetStateAction<MRT_Row<TData> | null>>;
310
310
  setGlobalFilterFn: Dispatch<SetStateAction<MRT_FilterOption>>;
311
- setHoveredColumn: Dispatch<SetStateAction<{
312
- id: string;
313
- } | MRT_Column<TData> | null>>;
314
- setHoveredRow: Dispatch<SetStateAction<{
315
- id: string;
316
- } | MRT_Row<TData> | null>>;
311
+ setHoveredColumn: Dispatch<SetStateAction<Partial<MRT_Column<TData>> | null>>;
312
+ setHoveredRow: Dispatch<SetStateAction<Partial<MRT_Row<TData>> | null>>;
317
313
  setIsFullScreen: Dispatch<SetStateAction<boolean>>;
318
314
  setShowAlertBanner: Dispatch<SetStateAction<boolean>>;
319
315
  setShowColumnFilters: Dispatch<SetStateAction<boolean>>;
@@ -333,12 +329,8 @@ type MRT_TableState<TData extends Record<string, any>> = TableState & {
333
329
  editingCell: MRT_Cell<TData> | null;
334
330
  editingRow: MRT_Row<TData> | null;
335
331
  globalFilterFn: MRT_FilterOption;
336
- hoveredColumn: {
337
- id: string;
338
- } | MRT_Column<TData> | null;
339
- hoveredRow: {
340
- id: string;
341
- } | MRT_Row<TData> | null;
332
+ hoveredColumn: Partial<MRT_Column<TData>> | null;
333
+ hoveredRow: Partial<MRT_Row<TData>> | null;
342
334
  isFullScreen: boolean;
343
335
  isLoading: boolean;
344
336
  isSaving: boolean;
@@ -855,12 +847,8 @@ type MRT_TableOptions<TData extends Record<string, any>> = Omit<Partial<TableOpt
855
847
  values: Record<LiteralUnion<string & DeepKeys<TData>>, any>;
856
848
  }) => Promise<void> | void;
857
849
  onGlobalFilterFnChange?: OnChangeFn<MRT_FilterOption>;
858
- onHoveredColumnChange?: OnChangeFn<{
859
- id: string;
860
- } | MRT_Column<TData> | null>;
861
- onHoveredRowChange?: OnChangeFn<{
862
- id: string;
863
- } | MRT_Row<TData> | null>;
850
+ onHoveredColumnChange?: OnChangeFn<Partial<MRT_Column<TData>> | null>;
851
+ onHoveredRowChange?: OnChangeFn<Partial<MRT_Row<TData>> | null>;
864
852
  onIsFullScreenChange?: OnChangeFn<boolean>;
865
853
  onShowAlertBannerChange?: OnChangeFn<boolean>;
866
854
  onShowColumnFiltersChange?: OnChangeFn<boolean>;
@@ -1240,6 +1228,7 @@ declare const parseFromValuesOrFunc: <T, U>(fn: T | ((arg: U) => T) | undefined,
1240
1228
  declare const parseCSSVarId: (id: string) => string;
1241
1229
  declare const flexRender: (Comp: Renderable<any>, props: any) => JSX.Element | ReactNode;
1242
1230
  declare const createRow: <TData extends Record<string, any>>(table: MRT_TableInstance<TData>, originalRow?: TData | undefined) => MRT_Row<TData>;
1231
+ declare const extraIndexRangeExtractor: (range: Range, draggingIndex: number) => number[];
1243
1232
 
1244
1233
  interface Props$y<TData extends Record<string, any>> {
1245
1234
  table: MRT_TableInstance<TData>;
@@ -1498,4 +1487,4 @@ declare const MRT_TopToolbar: <TData extends Record<string, any>>({ table, }: Pr
1498
1487
 
1499
1488
  declare const useMaterialReactTable: <TData extends Record<string, any>>(tableOptions: MRT_TableOptions<TData>) => MRT_TableInstance<TData>;
1500
1489
 
1501
- export { type LiteralUnion, type MRT_AggregationFn, MRT_AggregationFns, type MRT_AggregationOption, MRT_BottomToolbar, type MRT_Cell, type MRT_Column, MRT_ColumnActionMenu, type MRT_ColumnDef, type MRT_ColumnFilterFnsState, MRT_ColumnPinningButtons, MRT_CopyButton, MRT_DefaultColumn, MRT_DefaultDisplayColumn, type MRT_DefinedColumnDef, type MRT_DefinedTableOptions, type MRT_DensityState, type MRT_DisplayColumnIds, MRT_EditActionButtons, MRT_EditCellTextField, MRT_EditRowModal, MRT_ExpandAllButton, MRT_ExpandButton, MRT_FilterCheckbox, type MRT_FilterFn, MRT_FilterFns, type MRT_FilterOption, MRT_FilterOptionMenu, MRT_FilterRangeFields, MRT_FilterRangeSlider, MRT_FilterTextField, MRT_GlobalFilterTextField, MRT_GrabHandleButton, type MRT_Header, type MRT_HeaderGroup, type MRT_Icons, type MRT_InternalFilterOption, MRT_LinearProgressBar, type MRT_Localization, type MRT_Row, MRT_RowActionMenu, type MRT_RowModel, MRT_RowPinButton, MRT_SelectCheckbox, MRT_ShowHideColumnsButton, MRT_ShowHideColumnsMenu, MRT_ShowHideColumnsMenuItems, type MRT_SortingFn, MRT_SortingFns, type MRT_SortingOption, MRT_Table, MRT_TableBody, MRT_TableBodyCell, MRT_TableBodyCellValue, MRT_TableBodyRow, MRT_TableBodyRowGrabHandle, MRT_TableBodyRowPinButton, MRT_TableContainer, MRT_TableDetailPanel, MRT_TableFooter, MRT_TableFooterCell, MRT_TableFooterRow, MRT_TableHead, MRT_TableHeadCell, MRT_TableHeadCellColumnActionsButton, MRT_TableHeadCellFilterContainer, MRT_TableHeadCellFilterLabel, MRT_TableHeadCellGrabHandle, MRT_TableHeadCellResizeHandle, MRT_TableHeadCellSortLabel, MRT_TableHeadRow, type MRT_TableInstance, type MRT_TableOptions, MRT_TablePagination, MRT_TablePaper, type MRT_TableState, MRT_ToggleDensePaddingButton, MRT_ToggleFiltersButton, MRT_ToggleFullScreenButton, MRT_ToggleGlobalFilterButton, MRT_ToggleRowActionMenuButton, MRT_ToolbarAlertBanner, MRT_ToolbarDropZone, MRT_ToolbarInternalButtons, MRT_TopToolbar, MaterialReactTable, Memo_MRT_TableBody, Memo_MRT_TableBodyCell, Memo_MRT_TableBodyRow, type Prettify, type Xor, commonListItemStyles, commonMenuItemStyles, commonToolbarStyles, createRow, flexRender, getAllLeafColumnDefs, getCanRankRows, getColumnId, getCommonCellStyles, getDefaultColumnFilterFn, getDefaultColumnOrderIds, getIsFirstColumn, getIsFirstRightPinnedColumn, getIsLastColumn, getIsLastLeftPinnedColumn, getLeadingDisplayColumnIds, getTotalRight, getTrailingDisplayColumnIds, mrtFilterOptions, parseCSSVarId, parseFromValuesOrFunc, prepareColumns, rankGlobalFuzzy, reorderColumn, showExpandColumn, useMaterialReactTable };
1490
+ export { type LiteralUnion, type MRT_AggregationFn, MRT_AggregationFns, type MRT_AggregationOption, MRT_BottomToolbar, type MRT_Cell, type MRT_Column, MRT_ColumnActionMenu, type MRT_ColumnDef, type MRT_ColumnFilterFnsState, MRT_ColumnPinningButtons, MRT_CopyButton, MRT_DefaultColumn, MRT_DefaultDisplayColumn, type MRT_DefinedColumnDef, type MRT_DefinedTableOptions, type MRT_DensityState, type MRT_DisplayColumnIds, MRT_EditActionButtons, MRT_EditCellTextField, MRT_EditRowModal, MRT_ExpandAllButton, MRT_ExpandButton, MRT_FilterCheckbox, type MRT_FilterFn, MRT_FilterFns, type MRT_FilterOption, MRT_FilterOptionMenu, MRT_FilterRangeFields, MRT_FilterRangeSlider, MRT_FilterTextField, MRT_GlobalFilterTextField, MRT_GrabHandleButton, type MRT_Header, type MRT_HeaderGroup, type MRT_Icons, type MRT_InternalFilterOption, MRT_LinearProgressBar, type MRT_Localization, type MRT_Row, MRT_RowActionMenu, type MRT_RowModel, MRT_RowPinButton, MRT_SelectCheckbox, MRT_ShowHideColumnsButton, MRT_ShowHideColumnsMenu, MRT_ShowHideColumnsMenuItems, type MRT_SortingFn, MRT_SortingFns, type MRT_SortingOption, MRT_Table, MRT_TableBody, MRT_TableBodyCell, MRT_TableBodyCellValue, MRT_TableBodyRow, MRT_TableBodyRowGrabHandle, MRT_TableBodyRowPinButton, MRT_TableContainer, MRT_TableDetailPanel, MRT_TableFooter, MRT_TableFooterCell, MRT_TableFooterRow, MRT_TableHead, MRT_TableHeadCell, MRT_TableHeadCellColumnActionsButton, MRT_TableHeadCellFilterContainer, MRT_TableHeadCellFilterLabel, MRT_TableHeadCellGrabHandle, MRT_TableHeadCellResizeHandle, MRT_TableHeadCellSortLabel, MRT_TableHeadRow, type MRT_TableInstance, type MRT_TableOptions, MRT_TablePagination, MRT_TablePaper, type MRT_TableState, MRT_ToggleDensePaddingButton, MRT_ToggleFiltersButton, MRT_ToggleFullScreenButton, MRT_ToggleGlobalFilterButton, MRT_ToggleRowActionMenuButton, MRT_ToolbarAlertBanner, MRT_ToolbarDropZone, MRT_ToolbarInternalButtons, MRT_TopToolbar, MaterialReactTable, Memo_MRT_TableBody, Memo_MRT_TableBodyCell, Memo_MRT_TableBodyRow, type Prettify, type Xor, commonListItemStyles, commonMenuItemStyles, commonToolbarStyles, createRow, extraIndexRangeExtractor, flexRender, getAllLeafColumnDefs, getCanRankRows, getColumnId, getCommonCellStyles, getDefaultColumnFilterFn, getDefaultColumnOrderIds, getIsFirstColumn, getIsFirstRightPinnedColumn, getIsLastColumn, getIsLastLeftPinnedColumn, getLeadingDisplayColumnIds, getTotalRight, getTrailingDisplayColumnIds, mrtFilterOptions, parseCSSVarId, parseFromValuesOrFunc, prepareColumns, rankGlobalFuzzy, reorderColumn, showExpandColumn, useMaterialReactTable };
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2.0.0-alpha.5",
2
+ "version": "2.0.0-alpha.6",
3
3
  "license": "MIT",
4
4
  "name": "material-react-table",
5
5
  "description": "A fully featured Material UI V5 implementation of TanStack React Table V8, written from the ground up in TypeScript.",
@@ -1,5 +1,6 @@
1
- import { memo, useMemo } from 'react';
1
+ import { memo, useCallback, useMemo } from 'react';
2
2
  import {
3
+ type Range,
3
4
  type VirtualItem,
4
5
  type Virtualizer,
5
6
  useVirtualizer,
@@ -7,7 +8,11 @@ import {
7
8
  import TableBody from '@mui/material/TableBody';
8
9
  import Typography from '@mui/material/Typography';
9
10
  import { MRT_TableBodyRow, Memo_MRT_TableBodyRow } from './MRT_TableBodyRow';
10
- import { getCanRankRows, parseFromValuesOrFunc } from '../column.utils';
11
+ import {
12
+ extraIndexRangeExtractor,
13
+ getCanRankRows,
14
+ parseFromValuesOrFunc,
15
+ } from '../column.utils';
11
16
  import { rankGlobalFuzzy } from '../sortingFns';
12
17
  import { type MRT_Row, type MRT_TableInstance } from '../types';
13
18
 
@@ -60,6 +65,7 @@ export const MRT_TableBody = <TData extends Record<string, any>>({
60
65
  const {
61
66
  columnFilters,
62
67
  density,
68
+ draggingRow,
63
69
  expanded,
64
70
  globalFilter,
65
71
  isFullScreen,
@@ -152,6 +158,12 @@ export const MRT_TableBody = <TData extends Record<string, any>>({
152
158
  ? (element) => element?.getBoundingClientRect().height
153
159
  : undefined,
154
160
  overscan: 4,
161
+ rangeExtractor: useCallback(
162
+ (range: Range) => {
163
+ return extraIndexRangeExtractor(range, draggingRow?.index ?? 0);
164
+ },
165
+ [draggingRow],
166
+ ),
155
167
  ...rowVirtualizerProps,
156
168
  })
157
169
  : undefined;
@@ -213,12 +225,16 @@ export const MRT_TableBody = <TData extends Record<string, any>>({
213
225
  {tableBodyProps?.children ??
214
226
  (!rows.length ? (
215
227
  <tr
216
- style={{ display: layoutMode?.startsWith('grid') ? 'grid' : undefined }}
228
+ style={{
229
+ display: layoutMode?.startsWith('grid') ? 'grid' : undefined,
230
+ }}
217
231
  >
218
232
  <td
219
233
  colSpan={table.getVisibleLeafColumns().length}
220
234
  style={{
221
- display: layoutMode?.startsWith('grid') ? 'grid' : 'table-cell',
235
+ display: layoutMode?.startsWith('grid')
236
+ ? 'grid'
237
+ : 'table-cell',
222
238
  }}
223
239
  >
224
240
  {renderEmptyRowsFallback?.({ table }) ?? (
@@ -5,6 +5,7 @@ import {
5
5
  type Renderable,
6
6
  type Row,
7
7
  } from '@tanstack/react-table';
8
+ import { type Range, defaultRangeExtractor } from '@tanstack/react-virtual';
8
9
  import { type TableCellProps } from '@mui/material/TableCell';
9
10
  import { alpha, lighten } from '@mui/material/styles';
10
11
  import { type Theme } from '@mui/material/styles';
@@ -423,3 +424,21 @@ export const createRow = <TData extends Record<string, any>>(
423
424
  -1,
424
425
  0,
425
426
  ) as MRT_Row<TData>;
427
+
428
+ export const extraIndexRangeExtractor = (
429
+ range: Range,
430
+ draggingIndex: number,
431
+ ) => {
432
+ const newIndexs = defaultRangeExtractor(range);
433
+ if (
434
+ draggingIndex >= 0 &&
435
+ draggingIndex < Math.max(range.startIndex - range.overscan, 0)
436
+ ) {
437
+ newIndexs.unshift(draggingIndex);
438
+ }
439
+ if (draggingIndex >= 0 && draggingIndex > range.endIndex + range.overscan) {
440
+ newIndexs.push(draggingIndex);
441
+ }
442
+ return newIndexs;
443
+ };
444
+
package/src/filterFns.ts CHANGED
@@ -68,7 +68,7 @@ const equals = <TData extends Record<string, any>>(
68
68
  filterValue: number | string,
69
69
  ) =>
70
70
  row.getValue<number | string>(id).toString().toLowerCase().trim() ===
71
- filterValue.toString().toLowerCase().trim();
71
+ filterValue?.toString().toLowerCase().trim();
72
72
 
73
73
  equals.autoRemove = (val: any) => !val;
74
74
 
@@ -90,7 +90,7 @@ const greaterThan = <TData extends Record<string, any>>(
90
90
  !isNaN(+filterValue) && !isNaN(+row.getValue<number | string>(id))
91
91
  ? +row.getValue<number | string>(id) > +filterValue
92
92
  : row.getValue<number | string>(id).toString().toLowerCase().trim() >
93
- filterValue.toString().toLowerCase().trim();
93
+ filterValue?.toString().toLowerCase().trim();
94
94
 
95
95
  greaterThan.autoRemove = (val: any) => !val;
96
96
 
@@ -110,7 +110,7 @@ const lessThan = <TData extends Record<string, any>>(
110
110
  !isNaN(+filterValue) && !isNaN(+row.getValue<number | string>(id))
111
111
  ? +row.getValue<number | string>(id) < +filterValue
112
112
  : row.getValue<number | string>(id).toString().toLowerCase().trim() <
113
- filterValue.toString().toLowerCase().trim();
113
+ filterValue?.toString().toLowerCase().trim();
114
114
 
115
115
  lessThan.autoRemove = (val: any) => !val;
116
116
 
@@ -122,11 +122,13 @@ export const MRT_TableHeadCellFilterLabel = <
122
122
  horizontal: 'center',
123
123
  vertical: 'top',
124
124
  }}
125
+ onClick={(event) => event.stopPropagation()}
125
126
  onClose={(event) => {
126
127
  //@ts-ignore
127
128
  event.stopPropagation();
128
129
  setAnchorEl(null);
129
130
  }}
131
+ onKeyDown={(event) => event.key === 'Enter' && setAnchorEl(null)}
130
132
  open={!!anchorEl}
131
133
  transformOrigin={{
132
134
  horizontal: 'center',
@@ -103,12 +103,12 @@ export const useMRT_TableInstance: <TData extends Record<string, any>>(
103
103
  const [grouping, setGrouping] = useState<MRT_GroupingState>(
104
104
  initialState.grouping ?? [],
105
105
  );
106
- const [hoveredColumn, setHoveredColumn] = useState<
107
- { id: string } | MRT_Column<TData> | null
108
- >(initialState.hoveredColumn ?? null);
109
- const [hoveredRow, setHoveredRow] = useState<
110
- { id: string } | MRT_Row<TData> | null
111
- >(initialState.hoveredRow ?? null);
106
+ const [hoveredColumn, setHoveredColumn] = useState<Partial<
107
+ MRT_Column<TData>
108
+ > | null>(initialState.hoveredColumn ?? null);
109
+ const [hoveredRow, setHoveredRow] = useState<Partial<MRT_Row<TData>> | null>(
110
+ initialState.hoveredRow ?? null,
111
+ );
112
112
  const [isFullScreen, setIsFullScreen] = useState<boolean>(
113
113
  initialState?.isFullScreen ?? false,
114
114
  );
@@ -133,7 +133,7 @@ export const MRT_FilterTextField = <TData extends Record<string, any>>({
133
133
  if (isRangeFilter) {
134
134
  column.setFilterValue((old: Array<Date | null | number | string>) => {
135
135
  const newFilterValues = old ?? ['', ''];
136
- newFilterValues[rangeFilterIndex as number] = newValue;
136
+ newFilterValues[rangeFilterIndex as number] = newValue ?? undefined;
137
137
  return newFilterValues;
138
138
  });
139
139
  } else {
@@ -146,7 +146,7 @@ export const MRT_FilterTextField = <TData extends Record<string, any>>({
146
146
  );
147
147
 
148
148
  const handleChange = (newValue: any) => {
149
- setFilterValue(newValue?.toString() ?? '');
149
+ setFilterValue(newValue ?? '');
150
150
  handleChangeDebounced(newValue);
151
151
  };
152
152
 
@@ -246,7 +246,7 @@ export const MRT_FilterTextField = <TData extends Record<string, any>>({
246
246
  sx={{
247
247
  height: '2rem',
248
248
  transform: 'scale(0.9)',
249
- width: '2rem'
249
+ width: '2rem',
250
250
  }}
251
251
  >
252
252
  <CloseIcon />
@@ -364,6 +364,7 @@ export const MRT_FilterTextField = <TData extends Record<string, any>>({
364
364
  />
365
365
  ) : isAutocompleteFilter ? (
366
366
  <Autocomplete
367
+ freeSolo
367
368
  getOptionLabel={(option) => option}
368
369
  onChange={(_e, newValue) => handleChange(newValue)}
369
370
  options={dropdownOptions ?? []}
@@ -2,12 +2,11 @@ import { useCallback, useMemo } from 'react';
2
2
  import {
3
3
  type Range,
4
4
  type Virtualizer,
5
- defaultRangeExtractor,
6
5
  useVirtualizer,
7
6
  } from '@tanstack/react-virtual';
8
7
  import Table from '@mui/material/Table';
9
8
  import { MRT_TableBody, Memo_MRT_TableBody } from '../body/MRT_TableBody';
10
- import { parseCSSVarId, parseFromValuesOrFunc } from '../column.utils';
9
+ import { extraIndexRangeExtractor, parseCSSVarId, parseFromValuesOrFunc } from '../column.utils';
11
10
  import { MRT_TableFooter } from '../footer/MRT_TableFooter';
12
11
  import { MRT_TableHead } from '../head/MRT_TableHead';
13
12
  import { type MRT_TableInstance } from '../types';
@@ -43,6 +42,7 @@ export const MRT_Table = <TData extends Record<string, any>>({
43
42
  columnSizing,
44
43
  columnSizingInfo,
45
44
  columnVisibility,
45
+ draggingColumn,
46
46
  isFullScreen,
47
47
  } = getState();
48
48
 
@@ -93,6 +93,10 @@ export const MRT_Table = <TData extends Record<string, any>>({
93
93
  [columnPinning, enableColumnVirtualization, enableColumnPinning],
94
94
  );
95
95
 
96
+ const draggingColumnIndex = table
97
+ .getVisibleLeafColumns()
98
+ .findIndex((c) => c.id === draggingColumn?.id);
99
+
96
100
  const columnVirtualizer:
97
101
  | Virtualizer<HTMLDivElement, HTMLTableCellElement>
98
102
  | undefined = enableColumnVirtualization
@@ -103,14 +107,20 @@ export const MRT_Table = <TData extends Record<string, any>>({
103
107
  horizontal: true,
104
108
  overscan: 3,
105
109
  rangeExtractor: useCallback(
106
- (range: Range) => [
107
- ...new Set([
108
- ...leftPinnedIndexes,
109
- ...defaultRangeExtractor(range),
110
- ...rightPinnedIndexes,
111
- ]),
112
- ],
113
- [leftPinnedIndexes, rightPinnedIndexes],
110
+ (range: Range) => {
111
+ const newIndexs = extraIndexRangeExtractor(
112
+ range,
113
+ draggingColumnIndex,
114
+ );
115
+ return [
116
+ ...new Set([
117
+ ...leftPinnedIndexes,
118
+ ...newIndexs,
119
+ ...rightPinnedIndexes,
120
+ ]),
121
+ ];
122
+ },
123
+ [leftPinnedIndexes, rightPinnedIndexes, draggingColumnIndex],
114
124
  ),
115
125
  ...columnVirtualizerProps,
116
126
  })
@@ -50,11 +50,10 @@ export const MRT_TablePagination = <TData extends Record<string, any> = {}>({
50
50
  const lastRowIndex = Math.min(pageIndex * pageSize + pageSize, totalRowCount);
51
51
 
52
52
  const {
53
- showRowsPerPage = true,
54
53
  rowsPerPageOptions = defaultRowsPerPage,
55
54
  showFirstButton = showFirstLastPageButtons,
56
55
  showLastButton = showFirstLastPageButtons,
57
-
56
+ showRowsPerPage = true,
58
57
  ...rest
59
58
  } = paginationProps ?? {};
60
59
 
@@ -84,8 +83,8 @@ export const MRT_TablePagination = <TData extends Record<string, any> = {}>({
84
83
  {localization.rowsPerPage}
85
84
  </InputLabel>
86
85
  <Select
87
- inputProps={{ 'aria-label': localization.rowsPerPage }}
88
86
  id="mrt-rows-per-page"
87
+ inputProps={{ 'aria-label': localization.rowsPerPage }}
89
88
  label={localization.rowsPerPage}
90
89
  onChange={(event) => setPageSize(+event.target.value)}
91
90
  sx={{ '&::before': { border: 'none' }, mb: 0 }}
@@ -123,7 +122,7 @@ export const MRT_TablePagination = <TData extends Record<string, any> = {}>({
123
122
  ) : paginationDisplayMode === 'default' ? (
124
123
  <>
125
124
  <Typography
126
- sx={{ mb: 0, mx: '4px', minWidth: '10ch' }}
125
+ sx={{ mb: 0, minWidth: '10ch', mx: '4px' }}
127
126
  variant="body2"
128
127
  >{`${
129
128
  lastRowIndex === 0 ? 0 : (firstRowIndex + 1).toLocaleString()
package/src/types.ts CHANGED
@@ -260,12 +260,8 @@ export type MRT_TableInstance<TData extends Record<string, any>> = Omit<
260
260
  setEditingCell: Dispatch<SetStateAction<MRT_Cell<TData> | null>>;
261
261
  setEditingRow: Dispatch<SetStateAction<MRT_Row<TData> | null>>;
262
262
  setGlobalFilterFn: Dispatch<SetStateAction<MRT_FilterOption>>;
263
- setHoveredColumn: Dispatch<
264
- SetStateAction<{ id: string } | MRT_Column<TData> | null>
265
- >;
266
- setHoveredRow: Dispatch<
267
- SetStateAction<{ id: string } | MRT_Row<TData> | null>
268
- >;
263
+ setHoveredColumn: Dispatch<SetStateAction<Partial<MRT_Column<TData>> | null>>;
264
+ setHoveredRow: Dispatch<SetStateAction<Partial<MRT_Row<TData>> | null>>;
269
265
  setIsFullScreen: Dispatch<SetStateAction<boolean>>;
270
266
  setShowAlertBanner: Dispatch<SetStateAction<boolean>>;
271
267
  setShowColumnFilters: Dispatch<SetStateAction<boolean>>;
@@ -288,8 +284,8 @@ export type MRT_TableState<TData extends Record<string, any>> = TableState & {
288
284
  editingCell: MRT_Cell<TData> | null;
289
285
  editingRow: MRT_Row<TData> | null;
290
286
  globalFilterFn: MRT_FilterOption;
291
- hoveredColumn: { id: string } | MRT_Column<TData> | null;
292
- hoveredRow: { id: string } | MRT_Row<TData> | null;
287
+ hoveredColumn: Partial<MRT_Column<TData>> | null;
288
+ hoveredRow: Partial<MRT_Row<TData>> | null;
293
289
  isFullScreen: boolean;
294
290
  isLoading: boolean;
295
291
  isSaving: boolean;
@@ -972,8 +968,8 @@ export type MRT_TableOptions<TData extends Record<string, any>> = Omit<
972
968
  values: Record<LiteralUnion<string & DeepKeys<TData>>, any>;
973
969
  }) => Promise<void> | void;
974
970
  onGlobalFilterFnChange?: OnChangeFn<MRT_FilterOption>;
975
- onHoveredColumnChange?: OnChangeFn<{ id: string } | MRT_Column<TData> | null>;
976
- onHoveredRowChange?: OnChangeFn<{ id: string } | MRT_Row<TData> | null>;
971
+ onHoveredColumnChange?: OnChangeFn<Partial<MRT_Column<TData>> | null>;
972
+ onHoveredRowChange?: OnChangeFn<Partial<MRT_Row<TData>> | null>;
977
973
  onIsFullScreenChange?: OnChangeFn<boolean>;
978
974
  onShowAlertBannerChange?: OnChangeFn<boolean>;
979
975
  onShowColumnFiltersChange?: OnChangeFn<boolean>;