material-react-table 2.3.0 → 2.4.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.
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2.3.0",
2
+ "version": "2.4.0",
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.",
@@ -66,8 +66,8 @@
66
66
  "@emotion/react": "^11.11.3",
67
67
  "@emotion/styled": "^11.11.0",
68
68
  "@faker-js/faker": "^8.3.1",
69
- "@mui/icons-material": "^5.15.2",
70
- "@mui/material": "^5.15.2",
69
+ "@mui/icons-material": "^5.15.3",
70
+ "@mui/material": "^5.15.3",
71
71
  "@mui/x-date-pickers": "^6.18.6",
72
72
  "@rollup/plugin-typescript": "^11.1.5",
73
73
  "@size-limit/preset-small-lib": "^11.0.1",
@@ -113,8 +113,8 @@
113
113
  "react-dom": ">=18.0"
114
114
  },
115
115
  "dependencies": {
116
- "@tanstack/match-sorter-utils": "8.8.4",
117
- "@tanstack/react-table": "8.11.2",
116
+ "@tanstack/match-sorter-utils": "8.11.3",
117
+ "@tanstack/react-table": "8.11.3",
118
118
  "@tanstack/react-virtual": "3.0.1",
119
119
  "highlight-words": "1.2.2"
120
120
  }
@@ -1,5 +1,5 @@
1
1
  import { memo, useMemo } from 'react';
2
- import { type VirtualItem, type Virtualizer } from '@tanstack/react-virtual';
2
+ import { type VirtualItem } from '@tanstack/react-virtual';
3
3
  import TableBody, { type TableBodyProps } from '@mui/material/TableBody';
4
4
  import Typography from '@mui/material/Typography';
5
5
  import { MRT_TableBodyRow, Memo_MRT_TableBodyRow } from './MRT_TableBodyRow';
@@ -7,25 +7,22 @@ import { parseFromValuesOrFunc } from '../column.utils';
7
7
  import { useMRT_RowVirtualizer } from '../hooks';
8
8
  import { useMRT_Rows } from '../hooks/useMRT_Rows';
9
9
  import {
10
+ type MRT_ColumnVirtualizer,
10
11
  type MRT_Row,
11
12
  type MRT_RowData,
12
13
  type MRT_TableInstance,
13
14
  } from '../types';
14
15
 
15
16
  interface Props<TData extends MRT_RowData> extends TableBodyProps {
16
- columnVirtualizer?: Virtualizer<HTMLDivElement, HTMLTableCellElement>;
17
+ columnVirtualizer?: MRT_ColumnVirtualizer;
17
18
  table: MRT_TableInstance<TData>;
18
19
  virtualColumns?: VirtualItem[];
19
- virtualPaddingLeft?: number;
20
- virtualPaddingRight?: number;
21
20
  }
22
21
 
23
22
  export const MRT_TableBody = <TData extends MRT_RowData>({
24
23
  columnVirtualizer,
25
24
  table,
26
25
  virtualColumns,
27
- virtualPaddingLeft,
28
- virtualPaddingRight,
29
26
  ...rest
30
27
  }: Props<TData>) => {
31
28
  const {
@@ -62,17 +59,16 @@ export const MRT_TableBody = <TData extends MRT_RowData>({
62
59
  const tableFooterHeight =
63
60
  (enableStickyFooter && tableFooterRef.current?.clientHeight) || 0;
64
61
 
65
- const pinnedRowIds = useMemo(
66
- () =>
67
- getRowModel()
68
- .rows.filter((row) => row.getIsPinned())
69
- .map((r) => r.id),
70
- [rowPinning, table.getRowModel().rows],
71
- );
62
+ const pinnedRowIds = useMemo(() => {
63
+ if (!rowPinning.bottom?.length && !rowPinning.top?.length) return [];
64
+ return getRowModel()
65
+ .rows.filter((row) => row.getIsPinned())
66
+ .map((r) => r.id);
67
+ }, [rowPinning, getRowModel().rows]);
72
68
 
73
- const rows = useMRT_Rows(table);
69
+ const rows = useMRT_Rows(table, pinnedRowIds);
74
70
 
75
- const rowVirtualizer = useMRT_RowVirtualizer(table);
71
+ const rowVirtualizer = useMRT_RowVirtualizer(table, rows);
76
72
 
77
73
  const virtualRows = rowVirtualizer
78
74
  ? rowVirtualizer.getVirtualItems()
@@ -83,8 +79,6 @@ export const MRT_TableBody = <TData extends MRT_RowData>({
83
79
  numRows: rows.length,
84
80
  table,
85
81
  virtualColumns,
86
- virtualPaddingLeft,
87
- virtualPaddingRight,
88
82
  };
89
83
 
90
84
  const CreatingRow = creatingRow && createDisplayMode === 'row' && (
@@ -1,5 +1,5 @@
1
1
  import { type DragEvent, memo, useMemo, useRef } from 'react';
2
- import { type VirtualItem, type Virtualizer } from '@tanstack/react-virtual';
2
+ import { type VirtualItem } from '@tanstack/react-virtual';
3
3
  import TableRow from '@mui/material/TableRow';
4
4
  import {
5
5
  type Theme,
@@ -14,13 +14,14 @@ import { parseFromValuesOrFunc } from '../column.utils';
14
14
  import { getMRTTheme } from '../style.utils';
15
15
  import {
16
16
  type MRT_Cell,
17
+ type MRT_ColumnVirtualizer,
17
18
  type MRT_Row,
18
19
  type MRT_RowData,
19
20
  type MRT_TableInstance,
20
21
  } from '../types';
21
22
 
22
23
  interface Props<TData extends MRT_RowData> {
23
- columnVirtualizer?: Virtualizer<HTMLDivElement, HTMLTableCellElement>;
24
+ columnVirtualizer?: MRT_ColumnVirtualizer;
24
25
  measureElement?: (element: HTMLTableRowElement) => void;
25
26
  numRows?: number;
26
27
  pinnedRowIds?: string[];
@@ -28,8 +29,6 @@ interface Props<TData extends MRT_RowData> {
28
29
  rowIndex: number;
29
30
  table: MRT_TableInstance<TData>;
30
31
  virtualColumns?: VirtualItem[];
31
- virtualPaddingLeft?: number;
32
- virtualPaddingRight?: number;
33
32
  virtualRow?: VirtualItem;
34
33
  }
35
34
 
@@ -42,8 +41,6 @@ export const MRT_TableBodyRow = <TData extends MRT_RowData>({
42
41
  rowIndex,
43
42
  table,
44
43
  virtualColumns,
45
- virtualPaddingLeft,
46
- virtualPaddingRight,
47
44
  virtualRow,
48
45
  }: Props<TData>) => {
49
46
  const theme = useTheme();
@@ -75,6 +72,8 @@ export const MRT_TableBodyRow = <TData extends MRT_RowData>({
75
72
  rowPinning,
76
73
  } = getState();
77
74
 
75
+ const { virtualPaddingLeft, virtualPaddingRight } = columnVirtualizer ?? {};
76
+
78
77
  const isPinned = enableRowPinning && row.getIsPinned();
79
78
 
80
79
  const tableRowProps = parseFromValuesOrFunc(muiTableBodyRowProps, {
@@ -219,7 +218,7 @@ export const MRT_TableBodyRow = <TData extends MRT_RowData>({
219
218
  rowIndex,
220
219
  rowRef,
221
220
  table,
222
- virtualIndex: columnVirtualizer
221
+ virtualColumnIndex: columnVirtualizer
223
222
  ? (cellOrVirtualCell as VirtualItem).index
224
223
  : undefined,
225
224
  };
@@ -98,15 +98,18 @@ export const MRT_EditActionButtons = <TData extends MRT_RowData>({
98
98
  <CancelIcon />
99
99
  </IconButton>
100
100
  </Tooltip>
101
- <Tooltip title={localization.save}>
102
- <IconButton
103
- aria-label={localization.save}
104
- color="info"
105
- onClick={handleSubmitRow}
106
- >
107
- {isSaving ? <CircularProgress size={18} /> : <SaveIcon />}
108
- </IconButton>
109
- </Tooltip>
101
+ {((isCreating && onCreatingRowSave) ||
102
+ (isEditing && onEditingRowSave)) && (
103
+ <Tooltip title={localization.save}>
104
+ <IconButton
105
+ aria-label={localization.save}
106
+ color="info"
107
+ onClick={handleSubmitRow}
108
+ >
109
+ {isSaving ? <CircularProgress size={18} /> : <SaveIcon />}
110
+ </IconButton>
111
+ </Tooltip>
112
+ )}
110
113
  </>
111
114
  ) : (
112
115
  <>
@@ -2,20 +2,22 @@ import { type VirtualItem } from '@tanstack/react-virtual';
2
2
  import TableFooter, { type TableFooterProps } from '@mui/material/TableFooter';
3
3
  import { MRT_TableFooterRow } from './MRT_TableFooterRow';
4
4
  import { parseFromValuesOrFunc } from '../column.utils';
5
- import { type MRT_RowData, type MRT_TableInstance } from '../types';
5
+ import {
6
+ type MRT_ColumnVirtualizer,
7
+ type MRT_RowData,
8
+ type MRT_TableInstance,
9
+ } from '../types';
6
10
 
7
11
  interface Props<TData extends MRT_RowData> extends TableFooterProps {
12
+ columnVirtualizer?: MRT_ColumnVirtualizer;
8
13
  table: MRT_TableInstance<TData>;
9
14
  virtualColumns?: VirtualItem[];
10
- virtualPaddingLeft?: number;
11
- virtualPaddingRight?: number;
12
15
  }
13
16
 
14
17
  export const MRT_TableFooter = <TData extends MRT_RowData>({
18
+ columnVirtualizer,
15
19
  table,
16
20
  virtualColumns,
17
- virtualPaddingLeft,
18
- virtualPaddingRight,
19
21
  ...rest
20
22
  }: Props<TData>) => {
21
23
  const {
@@ -62,12 +64,11 @@ export const MRT_TableFooter = <TData extends MRT_RowData>({
62
64
  >
63
65
  {getFooterGroups().map((footerGroup) => (
64
66
  <MRT_TableFooterRow
67
+ columnVirtualizer={columnVirtualizer}
65
68
  footerGroup={footerGroup as any}
66
69
  key={footerGroup.id}
67
70
  table={table}
68
71
  virtualColumns={virtualColumns}
69
- virtualPaddingLeft={virtualPaddingLeft}
70
- virtualPaddingRight={virtualPaddingRight}
71
72
  />
72
73
  ))}
73
74
  </TableFooter>
@@ -4,6 +4,7 @@ import { MRT_TableFooterCell } from './MRT_TableFooterCell';
4
4
  import { parseFromValuesOrFunc } from '../column.utils';
5
5
  import { getMRTTheme } from '../style.utils';
6
6
  import {
7
+ type MRT_ColumnVirtualizer,
7
8
  type MRT_Header,
8
9
  type MRT_HeaderGroup,
9
10
  type MRT_RowData,
@@ -11,25 +12,25 @@ import {
11
12
  } from '../types';
12
13
 
13
14
  interface Props<TData extends MRT_RowData> extends TableRowProps {
15
+ columnVirtualizer?: MRT_ColumnVirtualizer;
14
16
  footerGroup: MRT_HeaderGroup<TData>;
15
17
  table: MRT_TableInstance<TData>;
16
18
  virtualColumns?: VirtualItem[];
17
- virtualPaddingLeft?: number;
18
- virtualPaddingRight?: number;
19
19
  }
20
20
 
21
21
  export const MRT_TableFooterRow = <TData extends MRT_RowData>({
22
+ columnVirtualizer,
22
23
  footerGroup,
23
24
  table,
24
25
  virtualColumns,
25
- virtualPaddingLeft,
26
- virtualPaddingRight,
27
26
  ...rest
28
27
  }: Props<TData>) => {
29
28
  const {
30
29
  options: { layoutMode, muiTableFooterRowProps },
31
30
  } = table;
32
31
 
32
+ const { virtualPaddingLeft, virtualPaddingRight } = columnVirtualizer ?? {};
33
+
33
34
  // if no content in row, skip row
34
35
  if (
35
36
  !footerGroup.headers?.some(
@@ -3,20 +3,22 @@ import TableHead, { type TableHeadProps } from '@mui/material/TableHead';
3
3
  import { MRT_TableHeadRow } from './MRT_TableHeadRow';
4
4
  import { parseFromValuesOrFunc } from '../column.utils';
5
5
  import { MRT_ToolbarAlertBanner } from '../toolbar';
6
- import { type MRT_RowData, type MRT_TableInstance } from '../types';
6
+ import {
7
+ type MRT_ColumnVirtualizer,
8
+ type MRT_RowData,
9
+ type MRT_TableInstance,
10
+ } from '../types';
7
11
 
8
12
  interface Props<TData extends MRT_RowData> extends TableHeadProps {
13
+ columnVirtualizer?: MRT_ColumnVirtualizer;
9
14
  table: MRT_TableInstance<TData>;
10
15
  virtualColumns?: VirtualItem[];
11
- virtualPaddingLeft?: number;
12
- virtualPaddingRight?: number;
13
16
  }
14
17
 
15
18
  export const MRT_TableHead = <TData extends MRT_RowData>({
19
+ columnVirtualizer,
16
20
  table,
17
21
  virtualColumns,
18
- virtualPaddingLeft,
19
- virtualPaddingRight,
20
22
  ...rest
21
23
  }: Props<TData>) => {
22
24
  const {
@@ -79,12 +81,11 @@ export const MRT_TableHead = <TData extends MRT_RowData>({
79
81
  ) : (
80
82
  getHeaderGroups().map((headerGroup) => (
81
83
  <MRT_TableHeadRow
84
+ columnVirtualizer={columnVirtualizer}
82
85
  headerGroup={headerGroup as any}
83
86
  key={headerGroup.id}
84
87
  table={table}
85
88
  virtualColumns={virtualColumns}
86
- virtualPaddingLeft={virtualPaddingLeft}
87
- virtualPaddingRight={virtualPaddingRight}
88
89
  />
89
90
  ))
90
91
  )}
@@ -77,7 +77,9 @@ export const MRT_TableHeadCellColumnActionsButton = <
77
77
  })}
78
78
  title={undefined}
79
79
  >
80
- <MoreVertIcon style={{ transform: 'scale(0.9)' }} />
80
+ {iconButtonProps?.children ?? (
81
+ <MoreVertIcon style={{ transform: 'scale(0.9)' }} />
82
+ )}
81
83
  </IconButton>
82
84
  </Tooltip>
83
85
  {anchorEl && (
@@ -5,6 +5,7 @@ import { MRT_TableHeadCell } from './MRT_TableHeadCell';
5
5
  import { parseFromValuesOrFunc } from '../column.utils';
6
6
  import { getMRTTheme } from '../style.utils';
7
7
  import {
8
+ type MRT_ColumnVirtualizer,
8
9
  type MRT_Header,
9
10
  type MRT_HeaderGroup,
10
11
  type MRT_RowData,
@@ -12,25 +13,25 @@ import {
12
13
  } from '../types';
13
14
 
14
15
  interface Props<TData extends MRT_RowData> extends TableRowProps {
16
+ columnVirtualizer?: MRT_ColumnVirtualizer;
15
17
  headerGroup: MRT_HeaderGroup<TData>;
16
18
  table: MRT_TableInstance<TData>;
17
19
  virtualColumns?: VirtualItem[];
18
- virtualPaddingLeft?: number;
19
- virtualPaddingRight?: number;
20
20
  }
21
21
 
22
22
  export const MRT_TableHeadRow = <TData extends MRT_RowData>({
23
+ columnVirtualizer,
23
24
  headerGroup,
24
25
  table,
25
26
  virtualColumns,
26
- virtualPaddingLeft,
27
- virtualPaddingRight,
28
27
  ...rest
29
28
  }: Props<TData>) => {
30
29
  const {
31
30
  options: { layoutMode, muiTableHeadRowProps },
32
31
  } = table;
33
32
 
33
+ const { virtualPaddingLeft, virtualPaddingRight } = columnVirtualizer ?? {};
34
+
34
35
  const tableRowProps = {
35
36
  ...parseFromValuesOrFunc(muiTableHeadRowProps, {
36
37
  headerGroup,
@@ -1,14 +1,17 @@
1
1
  import { useCallback, useMemo } from 'react';
2
2
  import {
3
3
  type Range,
4
- type Virtualizer,
5
4
  useVirtualizer,
6
5
  } from '@tanstack/react-virtual';
7
6
  import {
8
7
  extraIndexRangeExtractor,
9
8
  parseFromValuesOrFunc,
10
9
  } from '../column.utils';
11
- import { type MRT_RowData, type MRT_TableInstance } from '../types';
10
+ import {
11
+ type MRT_ColumnVirtualizer,
12
+ type MRT_RowData,
13
+ type MRT_TableInstance,
14
+ } from '../types';
12
15
 
13
16
  export const useMRT_ColumnVirtualizer = <
14
17
  TData extends MRT_RowData,
@@ -16,12 +19,7 @@ export const useMRT_ColumnVirtualizer = <
16
19
  TItemElement extends Element = HTMLTableCellElement,
17
20
  >(
18
21
  table: MRT_TableInstance<TData>,
19
- ):
20
- | (Virtualizer<TScrollElement, TItemElement> & {
21
- virtualPaddingLeft?: number;
22
- virtualPaddingRight?: number;
23
- })
24
- | undefined => {
22
+ ): MRT_ColumnVirtualizer | undefined => {
25
23
  const {
26
24
  getState,
27
25
  options: {
@@ -59,8 +57,9 @@ export const useMRT_ColumnVirtualizer = <
59
57
 
60
58
  //get first 16 column widths and average them if calc is needed
61
59
  const averageColumnWidth = useMemo(() => {
62
- if (!enableColumnVirtualization || columnVirtualizerProps?.estimateSize)
60
+ if (!enableColumnVirtualization || columnVirtualizerProps?.estimateSize) {
63
61
  return 0;
62
+ }
64
63
  const columnsWidths =
65
64
  table
66
65
  .getRowModel()
@@ -98,7 +97,7 @@ export const useMRT_ColumnVirtualizer = <
98
97
  [leftPinnedIndexes, rightPinnedIndexes, draggingColumnIndex],
99
98
  ),
100
99
  ...columnVirtualizerProps,
101
- }) as unknown as Virtualizer<TScrollElement, TItemElement>)
100
+ }) as unknown as MRT_ColumnVirtualizer<TScrollElement, TItemElement>)
102
101
  : undefined;
103
102
 
104
103
  if (columnVirtualizerInstanceRef && columnVirtualizer) {
@@ -1,14 +1,15 @@
1
1
  import { useCallback } from 'react';
2
- import {
3
- type Range,
4
- type Virtualizer,
5
- useVirtualizer,
6
- } from '@tanstack/react-virtual';
2
+ import { type Range, useVirtualizer } from '@tanstack/react-virtual';
7
3
  import {
8
4
  extraIndexRangeExtractor,
9
5
  parseFromValuesOrFunc,
10
6
  } from '../column.utils';
11
- import { type MRT_RowData, type MRT_TableInstance } from '../types';
7
+ import {
8
+ type MRT_Row,
9
+ type MRT_RowData,
10
+ type MRT_RowVirtualizer,
11
+ type MRT_TableInstance,
12
+ } from '../types';
12
13
 
13
14
  export const useMRT_RowVirtualizer = <
14
15
  TData extends MRT_RowData,
@@ -16,7 +17,8 @@ export const useMRT_RowVirtualizer = <
16
17
  TItemElement extends Element = HTMLTableRowElement,
17
18
  >(
18
19
  table: MRT_TableInstance<TData>,
19
- ): Virtualizer<TScrollElement, TItemElement> | undefined => {
20
+ rows?: MRT_Row<TData>[],
21
+ ): MRT_RowVirtualizer<TScrollElement, TItemElement> | undefined => {
20
22
  const {
21
23
  getRowModel,
22
24
  getState,
@@ -35,7 +37,7 @@ export const useMRT_RowVirtualizer = <
35
37
 
36
38
  const rowVirtualizer = enableRowVirtualization
37
39
  ? (useVirtualizer({
38
- count: getRowModel().rows.length,
40
+ count: rows?.length ?? getRowModel().rows.length,
39
41
  estimateSize: () =>
40
42
  density === 'compact' ? 37 : density === 'comfortable' ? 58 : 73,
41
43
  getScrollElement: () => tableContainerRef.current,
@@ -52,7 +54,7 @@ export const useMRT_RowVirtualizer = <
52
54
  [draggingRow],
53
55
  ),
54
56
  ...rowVirtualizerProps,
55
- }) as unknown as Virtualizer<TScrollElement, TItemElement>)
57
+ }) as unknown as MRT_RowVirtualizer<TScrollElement, TItemElement>)
56
58
  : undefined;
57
59
 
58
60
  if (rowVirtualizerInstanceRef && rowVirtualizer) {
@@ -9,6 +9,7 @@ import {
9
9
 
10
10
  export const useMRT_Rows = <TData extends MRT_RowData>(
11
11
  table: MRT_TableInstance<TData>,
12
+ pinnedRowIds: string[] = [],
12
13
  ): MRT_Row<TData>[] => {
13
14
  const {
14
15
  getBottomRows,
@@ -49,14 +50,6 @@ export const useMRT_Rows = <TData extends MRT_RowData>(
49
50
  ],
50
51
  );
51
52
 
52
- const pinnedRowIds = useMemo(
53
- () =>
54
- getRowModel()
55
- .rows.filter((row) => row.getIsPinned())
56
- .map((r) => r.id),
57
- [rowPinning, table.getRowModel().rows],
58
- );
59
-
60
53
  const rows = useMemo(() => {
61
54
  let rows: MRT_Row<TData>[] = [];
62
55
  if (!shouldRankRows) {
@@ -21,6 +21,14 @@ import {
21
21
  DatePicker,
22
22
  type DatePickerProps,
23
23
  } from '@mui/x-date-pickers/DatePicker';
24
+ import {
25
+ DateTimePicker,
26
+ type DateTimePickerProps,
27
+ } from '@mui/x-date-pickers/DateTimePicker';
28
+ import {
29
+ TimePicker,
30
+ type TimePickerProps,
31
+ } from '@mui/x-date-pickers/TimePicker';
24
32
  import { getValueAndLabel, parseFromValuesOrFunc } from '../column.utils';
25
33
  import { MRT_FilterOptionMenu } from '../menus/MRT_FilterOptionMenu';
26
34
  import {
@@ -50,7 +58,9 @@ export const MRT_FilterTextField = <TData extends MRT_RowData>({
50
58
  manualFiltering,
51
59
  muiFilterAutocompleteProps,
52
60
  muiFilterDatePickerProps,
61
+ muiFilterDateTimePickerProps,
53
62
  muiFilterTextFieldProps,
63
+ muiFilterTimePickerProps,
54
64
  },
55
65
  refs: { filterInputRefs },
56
66
  setColumnFilterFns,
@@ -84,7 +94,24 @@ export const MRT_FilterTextField = <TData extends MRT_RowData>({
84
94
  }),
85
95
  };
86
96
 
87
- const isDateFilter = filterVariant?.startsWith('date');
97
+ const dateTimePickerProps: DateTimePickerProps<any> = {
98
+ ...parseFromValuesOrFunc(muiFilterDateTimePickerProps, { column, table }),
99
+ ...parseFromValuesOrFunc(columnDef.muiFilterDateTimePickerProps, {
100
+ column,
101
+ table,
102
+ }),
103
+ };
104
+
105
+ const timePickerProps: TimePickerProps<any> = {
106
+ ...parseFromValuesOrFunc(muiFilterTimePickerProps, { column, table }),
107
+ ...parseFromValuesOrFunc(columnDef.muiFilterTimePickerProps, {
108
+ column,
109
+ table,
110
+ }),
111
+ };
112
+
113
+ const isDateFilter =
114
+ filterVariant?.startsWith('date') || filterVariant?.startsWith('time');
88
115
  const isAutocompleteFilter = filterVariant === 'autocomplete';
89
116
  const isRangeFilter =
90
117
  filterVariant?.includes('range') || rangeFilterIndex !== undefined;
@@ -350,14 +377,50 @@ export const MRT_FilterTextField = <TData extends MRT_RowData>({
350
377
  }),
351
378
  };
352
379
 
380
+ const commonDatePickerProps = {
381
+ onChange: (newDate: any) => {
382
+ handleChange(newDate);
383
+ },
384
+ value: filterValue || null,
385
+ };
386
+
353
387
  return (
354
388
  <>
355
- {isDateFilter ? (
356
- <DatePicker
357
- onChange={(newDate) => {
358
- handleChange(newDate);
389
+ {filterVariant?.startsWith('time') ? (
390
+ <TimePicker
391
+ {...commonDatePickerProps}
392
+ {...timePickerProps}
393
+ slotProps={{
394
+ field: {
395
+ clearable: true,
396
+ onClear: () => handleClear(),
397
+ ...timePickerProps?.slotProps?.field,
398
+ },
399
+ textField: {
400
+ ...commonTextFieldProps,
401
+ ...timePickerProps?.slotProps?.textField,
402
+ },
403
+ }}
404
+ />
405
+ ) : filterVariant?.startsWith('datetime') ? (
406
+ <DateTimePicker
407
+ {...commonDatePickerProps}
408
+ {...dateTimePickerProps}
409
+ slotProps={{
410
+ field: {
411
+ clearable: true,
412
+ onClear: () => handleClear(),
413
+ ...dateTimePickerProps?.slotProps?.field,
414
+ },
415
+ textField: {
416
+ ...commonTextFieldProps,
417
+ ...dateTimePickerProps?.slotProps?.textField,
418
+ },
359
419
  }}
360
- value={filterValue || null}
420
+ />
421
+ ) : filterVariant?.startsWith('date') ? (
422
+ <DatePicker
423
+ {...commonDatePickerProps}
361
424
  {...datePickerProps}
362
425
  slotProps={{
363
426
  field: {
@@ -51,7 +51,8 @@ export const MRT_SelectCheckbox = <TData extends MRT_RowData>({
51
51
 
52
52
  const commonProps = {
53
53
  checked: selectAll ? allRowsSelected : row?.getIsSelected(),
54
- disabled: isLoading || (row && !row.getCanSelect()),
54
+ disabled:
55
+ isLoading || (row && !row.getCanSelect()) || row?.id === 'mrt-row-create',
55
56
  inputProps: {
56
57
  'aria-label': selectAll
57
58
  ? localization.toggleSelectAll
@@ -103,7 +103,7 @@ export const mrtFilterOptions = (
103
103
  const rangeModes = ['between', 'betweenInclusive', 'inNumberRange'];
104
104
  const emptyModes = ['empty', 'notEmpty'];
105
105
  const arrModes = ['arrIncludesSome', 'arrIncludesAll', 'arrIncludes'];
106
- const rangeVariants = ['range-slider', 'date-range', 'range'];
106
+ const rangeVariants = ['range-slider', 'date-range', 'datetime-range', 'range'];
107
107
 
108
108
  interface Props<TData extends MRT_RowData> extends Partial<MenuProps> {
109
109
  anchorEl: HTMLElement | null;
@@ -53,22 +53,14 @@ export const MRT_Table = <TData extends MRT_RowData>({
53
53
 
54
54
  const columnVirtualizer = useMRT_ColumnVirtualizer(table);
55
55
 
56
- const { virtualPaddingLeft, virtualPaddingRight } = columnVirtualizer ?? {};
57
-
58
56
  const virtualColumns = columnVirtualizer
59
57
  ? columnVirtualizer.getVirtualItems()
60
58
  : undefined;
61
59
 
62
60
  const commonTableGroupProps = {
61
+ columnVirtualizer,
63
62
  table,
64
63
  virtualColumns,
65
- virtualPaddingLeft,
66
- virtualPaddingRight,
67
- };
68
-
69
- const commonTableBodyProps = {
70
- ...commonTableGroupProps,
71
- columnVirtualizer,
72
64
  };
73
65
 
74
66
  return (
@@ -84,9 +76,9 @@ export const MRT_Table = <TData extends MRT_RowData>({
84
76
  >
85
77
  {enableTableHead && <MRT_TableHead {...commonTableGroupProps} />}
86
78
  {memoMode === 'table-body' || columnSizingInfo.isResizingColumn ? (
87
- <Memo_MRT_TableBody {...commonTableBodyProps} />
79
+ <Memo_MRT_TableBody {...commonTableGroupProps} />
88
80
  ) : (
89
- <MRT_TableBody {...commonTableBodyProps} />
81
+ <MRT_TableBody {...commonTableGroupProps} />
90
82
  )}
91
83
  {enableTableFooter && <MRT_TableFooter {...commonTableGroupProps} />}
92
84
  </Table>