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.
- package/dist/cjs/index.js +49 -25
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/column.utils.d.ts +2 -0
- package/dist/cjs/types/types.d.ts +6 -18
- package/dist/esm/material-react-table.esm.js +50 -27
- package/dist/esm/material-react-table.esm.js.map +1 -1
- package/dist/esm/types/column.utils.d.ts +2 -0
- package/dist/esm/types/types.d.ts +6 -18
- package/dist/index.d.ts +9 -20
- package/package.json +1 -1
- package/src/body/MRT_TableBody.tsx +20 -4
- package/src/column.utils.ts +19 -0
- package/src/filterFns.ts +3 -3
- package/src/head/MRT_TableHeadCellFilterLabel.tsx +2 -0
- package/src/hooks/useMRT_TableInstance.ts +6 -6
- package/src/inputs/MRT_FilterTextField.tsx +4 -3
- package/src/table/MRT_Table.tsx +20 -10
- package/src/toolbar/MRT_TablePagination.tsx +3 -4
- package/src/types.ts +6 -10
@@ -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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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,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 {
|
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={{
|
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')
|
235
|
+
display: layoutMode?.startsWith('grid')
|
236
|
+
? 'grid'
|
237
|
+
: 'table-cell',
|
222
238
|
}}
|
223
239
|
>
|
224
240
|
{renderEmptyRowsFallback?.({ table }) ?? (
|
package/src/column.utils.ts
CHANGED
@@ -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
|
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
|
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
|
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
|
-
|
108
|
-
>(initialState.hoveredColumn ?? null);
|
109
|
-
const [hoveredRow, setHoveredRow] = useState<
|
110
|
-
|
111
|
-
|
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
|
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 ?? []}
|
package/src/table/MRT_Table.tsx
CHANGED
@@ -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
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
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,
|
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
|
-
|
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:
|
292
|
-
hoveredRow:
|
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<
|
976
|
-
onHoveredRowChange?: OnChangeFn<
|
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>;
|