material-react-table 0.38.2 → 0.39.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 (54) hide show
  1. package/dist/cjs/MaterialReactTable.d.ts +26 -4
  2. package/dist/cjs/body/MRT_EditRowModal.d.ts +1 -0
  3. package/dist/cjs/body/MRT_TableBodyRow.d.ts +1 -0
  4. package/dist/cjs/buttons/MRT_ColumnPinningButtons.d.ts +1 -0
  5. package/dist/cjs/buttons/MRT_EditActionButtons.d.ts +1 -0
  6. package/dist/cjs/buttons/MRT_FullScreenToggleButton.d.ts +1 -0
  7. package/dist/cjs/buttons/MRT_ShowHideColumnsButton.d.ts +1 -0
  8. package/dist/cjs/buttons/MRT_ToggleDensePaddingButton.d.ts +1 -0
  9. package/dist/cjs/buttons/MRT_ToggleFiltersButton.d.ts +1 -0
  10. package/dist/cjs/buttons/MRT_ToggleGlobalFilterButton.d.ts +1 -0
  11. package/dist/cjs/column.utils.d.ts +1 -0
  12. package/dist/cjs/index.js +79 -47
  13. package/dist/cjs/index.js.map +1 -1
  14. package/dist/cjs/inputs/MRT_EditCellTextField.d.ts +1 -0
  15. package/dist/cjs/inputs/MRT_GlobalFilterTextField.d.ts +1 -0
  16. package/dist/cjs/menus/MRT_FilterOptionMenu.d.ts +3 -7
  17. package/dist/cjs/menus/MRT_ShowHideColumnsMenu.d.ts +1 -0
  18. package/dist/cjs/table/MRT_TableRoot.d.ts +1 -0
  19. package/dist/esm/MaterialReactTable.d.ts +26 -4
  20. package/dist/esm/body/MRT_EditRowModal.d.ts +1 -0
  21. package/dist/esm/body/MRT_TableBodyRow.d.ts +1 -0
  22. package/dist/esm/buttons/MRT_ColumnPinningButtons.d.ts +1 -0
  23. package/dist/esm/buttons/MRT_EditActionButtons.d.ts +1 -0
  24. package/dist/esm/buttons/MRT_FullScreenToggleButton.d.ts +1 -0
  25. package/dist/esm/buttons/MRT_ShowHideColumnsButton.d.ts +1 -0
  26. package/dist/esm/buttons/MRT_ToggleDensePaddingButton.d.ts +1 -0
  27. package/dist/esm/buttons/MRT_ToggleFiltersButton.d.ts +1 -0
  28. package/dist/esm/buttons/MRT_ToggleGlobalFilterButton.d.ts +1 -0
  29. package/dist/esm/column.utils.d.ts +1 -0
  30. package/dist/esm/inputs/MRT_EditCellTextField.d.ts +1 -0
  31. package/dist/esm/inputs/MRT_GlobalFilterTextField.d.ts +1 -0
  32. package/dist/esm/material-react-table.esm.js +79 -47
  33. package/dist/esm/material-react-table.esm.js.map +1 -1
  34. package/dist/esm/menus/MRT_FilterOptionMenu.d.ts +3 -7
  35. package/dist/esm/menus/MRT_ShowHideColumnsMenu.d.ts +1 -0
  36. package/dist/esm/table/MRT_TableRoot.d.ts +1 -0
  37. package/dist/index.d.ts +28 -5
  38. package/package.json +2 -2
  39. package/src/MaterialReactTable.tsx +42 -7
  40. package/src/body/MRT_TableBody.tsx +1 -0
  41. package/src/body/MRT_TableBodyCellValue.tsx +10 -11
  42. package/src/body/MRT_TableBodyRow.tsx +14 -3
  43. package/src/buttons/MRT_ExpandAllButton.tsx +5 -3
  44. package/src/buttons/MRT_GrabHandleButton.tsx +5 -3
  45. package/src/column.utils.ts +1 -1
  46. package/src/footer/MRT_TableFooter.tsx +22 -2
  47. package/src/head/MRT_TableHeadCellFilterContainer.tsx +3 -2
  48. package/src/head/MRT_TableHeadRow.tsx +3 -1
  49. package/src/inputs/MRT_FilterTextField.tsx +5 -8
  50. package/src/inputs/MRT_GlobalFilterTextField.tsx +2 -2
  51. package/src/menus/MRT_ColumnActionMenu.tsx +3 -3
  52. package/src/menus/MRT_FilterOptionMenu.tsx +50 -33
  53. package/src/table/MRT_TablePaper.tsx +5 -3
  54. package/src/table/MRT_TableRoot.tsx +3 -4
@@ -1,11 +1,7 @@
1
- import type { MRT_Header, MRT_TableInstance } from '..';
1
+ /// <reference types="react" />
2
+ import type { MRT_Header, MRT_InternalFilterOption, MRT_TableInstance } from '..';
2
3
  import { MRT_Localization } from '../localization';
3
- export declare const internalFilterOptions: (localization: MRT_Localization) => {
4
- option: string;
5
- symbol: string;
6
- label: string;
7
- divider: boolean;
8
- }[];
4
+ export declare const mrtFilterOptions: (localization: MRT_Localization) => MRT_InternalFilterOption[];
9
5
  interface Props<TData extends Record<string, any> = {}> {
10
6
  anchorEl: HTMLElement | null;
11
7
  header?: MRT_Header;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import type { MRT_TableInstance } from '..';
2
3
  interface Props<TData extends Record<string, any> = {}> {
3
4
  anchorEl: HTMLElement | null;
@@ -1,2 +1,3 @@
1
+ /// <reference types="react" />
1
2
  import type { MaterialReactTableProps } from '..';
2
3
  export declare const MRT_TableRoot: <TData extends Record<string, any> = {}>(props: MaterialReactTableProps<TData>) => JSX.Element;
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { MutableRefObject, Dispatch, SetStateAction, ReactNode, DragEvent } from 'react';
2
3
  import { ButtonProps, TextFieldProps, TableCellProps, IconButtonProps, ToolbarProps, LinearProgressProps, CheckboxProps, SkeletonProps, TableBodyProps, TableRowProps, TableContainerProps, TableFooterProps, TableHeadProps, TablePaginationProps, PaperProps, TableProps, ChipProps, AlertProps } from '@mui/material';
3
4
  import { Row, Table, TableState, ColumnDef, DeepKeys, Column, Header, HeaderGroup, Cell, SortingFn, FilterFn, TableOptions, OnChangeFn } from '@tanstack/react-table';
@@ -345,7 +346,7 @@ declare type MRT_ColumnDef<TData extends Record<string, any> = {}> = Omit<Column
345
346
  enableClickToCopy?: boolean;
346
347
  enableColumnActions?: boolean;
347
348
  enableColumnDragging?: boolean;
348
- enableColumnFilterChangeMode?: boolean;
349
+ enableColumnFilterModes?: boolean;
349
350
  enableColumnOrdering?: boolean;
350
351
  enableEditing?: boolean;
351
352
  filterFn?: MRT_FilterFn<TData>;
@@ -407,6 +408,10 @@ declare type MRT_ColumnDef<TData extends Record<string, any> = {}> = Omit<Column
407
408
  table: MRT_TableInstance<TData>;
408
409
  column: MRT_Column<TData>;
409
410
  }) => TableCellProps);
411
+ renderColumnFilterModeMenuItems?: ({ table, column, }: {
412
+ table: MRT_TableInstance<TData>;
413
+ column: MRT_Column<TData>;
414
+ }) => ReactNode[];
410
415
  sortingFn?: MRT_SortingFn;
411
416
  };
412
417
  declare type MRT_DefinedColumnDef<TData extends Record<string, any> = {}> = Omit<MRT_ColumnDef<TData>, 'id'> & {
@@ -440,6 +445,12 @@ declare type MRT_SortingOption = LiteralUnion<string & keyof typeof MRT_SortingF
440
445
  declare type MRT_SortingFn<TData extends Record<string, any> = {}> = SortingFn<TData> | MRT_SortingOption;
441
446
  declare type MRT_FilterOption = LiteralUnion<string & keyof typeof MRT_FilterFns>;
442
447
  declare type MRT_FilterFn<TData extends Record<string, any> = {}> = FilterFn<TData> | MRT_FilterOption;
448
+ declare type MRT_InternalFilterOption = {
449
+ option: string;
450
+ symbol: string;
451
+ label: string;
452
+ divider: boolean;
453
+ };
443
454
  declare type MRT_DisplayColumnIds = 'mrt-row-actions' | 'mrt-row-drag' | 'mrt-row-expand' | 'mrt-row-numbers' | 'mrt-row-select';
444
455
  /**
445
456
  * `columns` and `data` props are the only required props, but there are over 150 other optional props.
@@ -463,13 +474,13 @@ declare type MaterialReactTableProps<TData extends Record<string, any> = {}> = O
463
474
  enableClickToCopy?: boolean;
464
475
  enableColumnActions?: boolean;
465
476
  enableColumnDragging?: boolean;
466
- enableColumnFilterChangeMode?: boolean;
477
+ enableColumnFilterModes?: boolean;
467
478
  enableColumnOrdering?: boolean;
468
479
  enableDensityToggle?: boolean;
469
480
  enableEditing?: boolean;
470
481
  enableExpandAll?: boolean;
471
482
  enableFullScreenToggle?: boolean;
472
- enableGlobalFilterChangeMode?: boolean;
483
+ enableGlobalFilterModes?: boolean;
473
484
  enableGlobalFilterRankedResults?: boolean;
474
485
  enablePagination?: boolean;
475
486
  enableRowActions?: boolean;
@@ -479,6 +490,7 @@ declare type MaterialReactTableProps<TData extends Record<string, any> = {}> = O
479
490
  enableRowSelection?: boolean | ((row: MRT_Row<TData>) => boolean);
480
491
  enableRowVirtualization?: boolean;
481
492
  enableSelectAll?: boolean;
493
+ enableStickyFooter?: boolean;
482
494
  enableStickyHeader?: boolean;
483
495
  enableTableFooter?: boolean;
484
496
  enableTableHead?: boolean;
@@ -650,10 +662,21 @@ declare type MaterialReactTableProps<TData extends Record<string, any> = {}> = O
650
662
  renderBottomToolbarCustomActions?: ({ table, }: {
651
663
  table: MRT_TableInstance<TData>;
652
664
  }) => ReactNode;
665
+ renderColumnFilterModeMenuItems?: ({ column, internalFilterOptions, onSelectFilterMode, table, }: {
666
+ column: MRT_Column<TData>;
667
+ internalFilterOptions: MRT_InternalFilterOption[];
668
+ onSelectFilterMode: (filterMode: MRT_FilterOption) => void;
669
+ table: MRT_TableInstance<TData>;
670
+ }) => ReactNode;
653
671
  renderDetailPanel?: ({ row, table, }: {
654
672
  row: MRT_Row<TData>;
655
673
  table: MRT_TableInstance<TData>;
656
674
  }) => ReactNode;
675
+ renderGlobalFilterModeMenuItems?: ({ internalFilterOptions, onSelectFilterMode, table, }: {
676
+ internalFilterOptions: MRT_InternalFilterOption[];
677
+ onSelectFilterMode: (filterMode: MRT_FilterOption) => void;
678
+ table: MRT_TableInstance<TData>;
679
+ }) => ReactNode[];
657
680
  renderRowActionMenuItems?: ({ closeMenu, row, table, }: {
658
681
  closeMenu: () => void;
659
682
  row: MRT_Row<TData>;
@@ -678,7 +701,7 @@ declare type MaterialReactTableProps<TData extends Record<string, any> = {}> = O
678
701
  table: MRT_TableInstance<TData>;
679
702
  }) => Partial<Options<HTMLDivElement>>);
680
703
  };
681
- declare const _default: <TData extends Record<string, any> = {}>({ aggregationFns, autoResetExpanded, columnResizeMode, defaultColumn, editingMode, enableBottomToolbar, enableColumnActions, enableColumnFilterChangeMode, enableColumnFilters, enableColumnOrdering, enableColumnResizing, enableDensityToggle, enableExpandAll, enableFilters, enableFullScreenToggle, enableGlobalFilter, enableGlobalFilterChangeMode, enableGlobalFilterRankedResults, enableGrouping, enableHiding, enableMultiRowSelection, enableMultiSort, enablePagination, enablePinning, enableRowSelection, enableSelectAll, enableSorting, enableStickyHeader, enableTableFooter, enableTableHead, enableToolbarInternalActions, enableTopToolbar, filterFns, icons, localization, positionActionsColumn, positionExpandColumn, positionGlobalFilter, positionPagination, positionToolbarAlertBanner, positionToolbarDropZone, rowNumberMode, selectAllMode, sortingFns, ...rest }: MaterialReactTableProps<TData>) => JSX.Element;
704
+ declare const _default: <TData extends Record<string, any> = {}>({ aggregationFns, autoResetExpanded, columnResizeMode, defaultColumn, editingMode, enableBottomToolbar, enableColumnActions, enableColumnFilterModes, enableColumnFilters, enableColumnOrdering, enableColumnResizing, enableDensityToggle, enableExpandAll, enableFilters, enableFullScreenToggle, enableGlobalFilter, enableGlobalFilterModes, enableGlobalFilterRankedResults, enableGrouping, enableHiding, enableMultiRowSelection, enableMultiSort, enablePagination, enablePinning, enableRowSelection, enableSelectAll, enableSorting, enableStickyHeader, enableTableFooter, enableTableHead, enableToolbarInternalActions, enableTopToolbar, filterFns, icons, localization, positionActionsColumn, positionExpandColumn, positionGlobalFilter, positionPagination, positionToolbarAlertBanner, positionToolbarDropZone, rowNumberMode, selectAllMode, sortingFns, ...rest }: MaterialReactTableProps<TData>) => JSX.Element;
682
705
 
683
706
  interface Props$6<TData extends Record<string, any> = {}> {
684
707
  cell: MRT_Cell<TData>;
@@ -717,4 +740,4 @@ interface Props<TData extends Record<string, any> = {}> extends IconButtonProps
717
740
  }
718
741
  declare const MRT_ToggleGlobalFilterButton: <TData extends Record<string, any> = {}>({ table, ...rest }: Props<TData>) => JSX.Element;
719
742
 
720
- export { MRT_Cell, MRT_Column, MRT_ColumnDef, MRT_CopyButton, MRT_DefinedColumnDef, MRT_DisplayColumnIds, MRT_FilterFn, MRT_FilterOption, MRT_FullScreenToggleButton, MRT_GlobalFilterTextField, MRT_Header, MRT_HeaderGroup, MRT_Icons, MRT_Localization, MRT_Row, MRT_RowModel, MRT_ShowHideColumnsButton, MRT_SortingFn, MRT_SortingOption, MRT_TableInstance, MRT_TableState, MRT_ToggleDensePaddingButton, MRT_ToggleFiltersButton, MRT_ToggleGlobalFilterButton, MaterialReactTableProps, _default as default };
743
+ export { MRT_Cell, MRT_Column, MRT_ColumnDef, MRT_CopyButton, MRT_DefinedColumnDef, MRT_DisplayColumnIds, MRT_FilterFn, MRT_FilterOption, MRT_FullScreenToggleButton, MRT_GlobalFilterTextField, MRT_Header, MRT_HeaderGroup, MRT_Icons, MRT_InternalFilterOption, MRT_Localization, MRT_Row, MRT_RowModel, MRT_ShowHideColumnsButton, MRT_SortingFn, MRT_SortingOption, MRT_TableInstance, MRT_TableState, MRT_ToggleDensePaddingButton, MRT_ToggleFiltersButton, MRT_ToggleGlobalFilterButton, MaterialReactTableProps, _default as default };
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.38.2",
2
+ "version": "0.39.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.",
@@ -78,7 +78,7 @@
78
78
  "react": "^18.2.0",
79
79
  "react-dom": "^18.2.0",
80
80
  "react-is": "^18.2.0",
81
- "rollup": "^2.78.0",
81
+ "rollup": "^2.78.1",
82
82
  "rollup-plugin-dts": "^4.2.2",
83
83
  "rollup-plugin-peer-deps-external": "^2.2.4",
84
84
  "size-limit": "^8.0.1",
@@ -260,7 +260,7 @@ export type MRT_ColumnDef<TData extends Record<string, any> = {}> = Omit<
260
260
  enableClickToCopy?: boolean;
261
261
  enableColumnActions?: boolean;
262
262
  enableColumnDragging?: boolean;
263
- enableColumnFilterChangeMode?: boolean;
263
+ enableColumnFilterModes?: boolean;
264
264
  enableColumnOrdering?: boolean;
265
265
  enableEditing?: boolean;
266
266
  filterFn?: MRT_FilterFn<TData>;
@@ -362,6 +362,13 @@ export type MRT_ColumnDef<TData extends Record<string, any> = {}> = Omit<
362
362
  table: MRT_TableInstance<TData>;
363
363
  column: MRT_Column<TData>;
364
364
  }) => TableCellProps);
365
+ renderColumnFilterModeMenuItems?: ({
366
+ table,
367
+ column,
368
+ }: {
369
+ table: MRT_TableInstance<TData>;
370
+ column: MRT_Column<TData>;
371
+ }) => ReactNode[];
365
372
  sortingFn?: MRT_SortingFn;
366
373
  };
367
374
 
@@ -432,6 +439,13 @@ export type MRT_FilterFn<TData extends Record<string, any> = {}> =
432
439
  | FilterFn<TData>
433
440
  | MRT_FilterOption;
434
441
 
442
+ export type MRT_InternalFilterOption = {
443
+ option: string;
444
+ symbol: string;
445
+ label: string;
446
+ divider: boolean;
447
+ };
448
+
435
449
  export type MRT_DisplayColumnIds =
436
450
  | 'mrt-row-actions'
437
451
  | 'mrt-row-drag'
@@ -472,13 +486,13 @@ export type MaterialReactTableProps<TData extends Record<string, any> = {}> =
472
486
  enableClickToCopy?: boolean;
473
487
  enableColumnActions?: boolean;
474
488
  enableColumnDragging?: boolean;
475
- enableColumnFilterChangeMode?: boolean;
489
+ enableColumnFilterModes?: boolean;
476
490
  enableColumnOrdering?: boolean;
477
491
  enableDensityToggle?: boolean;
478
492
  enableEditing?: boolean;
479
493
  enableExpandAll?: boolean;
480
494
  enableFullScreenToggle?: boolean;
481
- enableGlobalFilterChangeMode?: boolean;
495
+ enableGlobalFilterModes?: boolean;
482
496
  enableGlobalFilterRankedResults?: boolean;
483
497
  enablePagination?: boolean;
484
498
  enableRowActions?: boolean;
@@ -488,6 +502,7 @@ export type MaterialReactTableProps<TData extends Record<string, any> = {}> =
488
502
  enableRowSelection?: boolean | ((row: MRT_Row<TData>) => boolean);
489
503
  enableRowVirtualization?: boolean;
490
504
  enableSelectAll?: boolean;
505
+ enableStickyFooter?: boolean;
491
506
  enableStickyHeader?: boolean;
492
507
  enableTableFooter?: boolean;
493
508
  enableTableHead?: boolean;
@@ -767,6 +782,17 @@ export type MaterialReactTableProps<TData extends Record<string, any> = {}> =
767
782
  }: {
768
783
  table: MRT_TableInstance<TData>;
769
784
  }) => ReactNode;
785
+ renderColumnFilterModeMenuItems?: ({
786
+ column,
787
+ internalFilterOptions,
788
+ onSelectFilterMode,
789
+ table,
790
+ }: {
791
+ column: MRT_Column<TData>;
792
+ internalFilterOptions: MRT_InternalFilterOption[];
793
+ onSelectFilterMode: (filterMode: MRT_FilterOption) => void;
794
+ table: MRT_TableInstance<TData>;
795
+ }) => ReactNode;
770
796
  renderDetailPanel?: ({
771
797
  row,
772
798
  table,
@@ -774,6 +800,15 @@ export type MaterialReactTableProps<TData extends Record<string, any> = {}> =
774
800
  row: MRT_Row<TData>;
775
801
  table: MRT_TableInstance<TData>;
776
802
  }) => ReactNode;
803
+ renderGlobalFilterModeMenuItems?: ({
804
+ internalFilterOptions,
805
+ onSelectFilterMode,
806
+ table,
807
+ }: {
808
+ internalFilterOptions: MRT_InternalFilterOption[];
809
+ onSelectFilterMode: (filterMode: MRT_FilterOption) => void;
810
+ table: MRT_TableInstance<TData>;
811
+ }) => ReactNode[];
777
812
  renderRowActionMenuItems?: ({
778
813
  closeMenu,
779
814
  row,
@@ -830,7 +865,7 @@ export default <TData extends Record<string, any> = {}>({
830
865
  editingMode = 'modal',
831
866
  enableBottomToolbar = true,
832
867
  enableColumnActions = true,
833
- enableColumnFilterChangeMode = false,
868
+ enableColumnFilterModes = false,
834
869
  enableColumnFilters = true,
835
870
  enableColumnOrdering = false,
836
871
  enableColumnResizing = false,
@@ -839,7 +874,7 @@ export default <TData extends Record<string, any> = {}>({
839
874
  enableFilters = true,
840
875
  enableFullScreenToggle = true,
841
876
  enableGlobalFilter = true,
842
- enableGlobalFilterChangeMode = false,
877
+ enableGlobalFilterModes = false,
843
878
  enableGlobalFilterRankedResults = true,
844
879
  enableGrouping = false,
845
880
  enableHiding = true,
@@ -877,7 +912,7 @@ export default <TData extends Record<string, any> = {}>({
877
912
  editingMode={editingMode}
878
913
  enableBottomToolbar={enableBottomToolbar}
879
914
  enableColumnActions={enableColumnActions}
880
- enableColumnFilterChangeMode={enableColumnFilterChangeMode}
915
+ enableColumnFilterModes={enableColumnFilterModes}
881
916
  enableColumnFilters={enableColumnFilters}
882
917
  enableColumnOrdering={enableColumnOrdering}
883
918
  enableColumnResizing={enableColumnResizing}
@@ -886,7 +921,7 @@ export default <TData extends Record<string, any> = {}>({
886
921
  enableFilters={enableFilters}
887
922
  enableFullScreenToggle={enableFullScreenToggle}
888
923
  enableGlobalFilter={enableGlobalFilter}
889
- enableGlobalFilterChangeMode={enableGlobalFilterChangeMode}
924
+ enableGlobalFilterModes={enableGlobalFilterModes}
890
925
  enableGlobalFilterRankedResults={enableGlobalFilterRankedResults}
891
926
  enableGrouping={enableGrouping}
892
927
  enableHiding={enableHiding}
@@ -124,6 +124,7 @@ export const MRT_TableBody: FC<Props> = ({ table, tableContainerRef }) => {
124
124
  enableRowVirtualization ? rowOrVirtualRow.index : rowIndex
125
125
  }
126
126
  table={table}
127
+ virtualRow={enableRowVirtualization ? rowOrVirtualRow : null}
127
128
  />
128
129
  );
129
130
  },
@@ -12,8 +12,8 @@ export const MRT_TableBodyCellValue: FC<Props> = ({ cell, table }) => {
12
12
 
13
13
  return (
14
14
  <>
15
- {cell.getIsAggregated() && column.columnDef.aggregationFn
16
- ? columnDef.AggregatedCell?.({
15
+ {cell.getIsAggregated() && columnDef.AggregatedCell
16
+ ? columnDef.AggregatedCell({
17
17
  cell,
18
18
  column,
19
19
  row,
@@ -21,15 +21,14 @@ export const MRT_TableBodyCellValue: FC<Props> = ({ cell, table }) => {
21
21
  })
22
22
  : row.getIsGrouped() && !cell.getIsGrouped()
23
23
  ? null
24
- : (cell.getIsGrouped() &&
25
- columnDef.GroupedCell?.({
26
- cell,
27
- column,
28
- row,
29
- table,
30
- })) ||
31
- (columnDef?.Cell?.({ cell, column, row, table }) ??
32
- cell.renderValue())}
24
+ : cell.getIsGrouped() && columnDef.GroupedCell
25
+ ? columnDef.GroupedCell({
26
+ cell,
27
+ column,
28
+ row,
29
+ table,
30
+ })
31
+ : columnDef?.Cell?.({ cell, column, row, table }) ?? cell.renderValue()}
33
32
  </>
34
33
  );
35
34
  };
@@ -8,9 +8,15 @@ interface Props {
8
8
  row: MRT_Row;
9
9
  rowIndex: number;
10
10
  table: MRT_TableInstance;
11
+ virtualRow?: any;
11
12
  }
12
13
 
13
- export const MRT_TableBodyRow: FC<Props> = ({ row, rowIndex, table }) => {
14
+ export const MRT_TableBodyRow: FC<Props> = ({
15
+ row,
16
+ rowIndex,
17
+ table,
18
+ virtualRow,
19
+ }) => {
14
20
  const theme = useTheme();
15
21
  const {
16
22
  getIsSomeColumnsPinned,
@@ -31,7 +37,7 @@ export const MRT_TableBodyRow: FC<Props> = ({ row, rowIndex, table }) => {
31
37
  }
32
38
  };
33
39
 
34
- const rowRef = useRef<HTMLTableRowElement>(null);
40
+ const rowRef = useRef<HTMLTableRowElement | null>(null);
35
41
 
36
42
  const draggingBorder =
37
43
  draggingRow?.id === row.id
@@ -52,7 +58,12 @@ export const MRT_TableBodyRow: FC<Props> = ({ row, rowIndex, table }) => {
52
58
  onDragEnter={handleDragEnter}
53
59
  hover
54
60
  selected={row.getIsSelected()}
55
- ref={rowRef}
61
+ ref={(node) => {
62
+ rowRef.current = node;
63
+ if (virtualRow?.measureRef) {
64
+ virtualRow.measureRef = node;
65
+ }
66
+ }}
56
67
  {...tableRowProps}
57
68
  sx={(theme) => ({
58
69
  backgroundColor: lighten(theme.palette.background.default, 0.06),
@@ -40,12 +40,14 @@ export const MRT_ExpandAllButton: FC<Props> = ({ table }) => {
40
40
  disabled={!getCanSomeRowsExpand() && !renderDetailPanel}
41
41
  onClick={() => toggleAllRowsExpanded(!getIsAllRowsExpanded())}
42
42
  {...iconButtonProps}
43
- sx={{
43
+ sx={(theme) => ({
44
44
  height: density === 'compact' ? '1.75rem' : '2.25rem',
45
45
  width: density === 'compact' ? '1.75rem' : '2.25rem',
46
46
  mt: density !== 'compact' ? '-0.25rem' : undefined,
47
- ...iconButtonProps?.sx,
48
- }}
47
+ ...(iconButtonProps?.sx instanceof Function
48
+ ? iconButtonProps?.sx(theme)
49
+ : (iconButtonProps?.sx as any)),
50
+ })}
49
51
  >
50
52
  <KeyboardDoubleArrowDownIcon
51
53
  style={{
@@ -37,7 +37,7 @@ export const MRT_GrabHandleButton = <TData extends Record<string, any> = {}>({
37
37
  onDragEnd={onDragEnd}
38
38
  size="small"
39
39
  {...iconButtonProps}
40
- sx={{
40
+ sx={(theme) => ({
41
41
  cursor: 'grab',
42
42
  m: 0,
43
43
  opacity: 0.5,
@@ -50,8 +50,10 @@ export const MRT_GrabHandleButton = <TData extends Record<string, any> = {}>({
50
50
  '&:active': {
51
51
  cursor: 'grabbing',
52
52
  },
53
- ...iconButtonProps?.sx,
54
- }}
53
+ ...(iconButtonProps?.sx instanceof Function
54
+ ? iconButtonProps?.sx(theme)
55
+ : (iconButtonProps?.sx as any)),
56
+ })}
55
57
  >
56
58
  <DragHandleIcon />
57
59
  </IconButton>
@@ -25,7 +25,7 @@ export const defaultDisplayColumnDefOptions = {
25
25
  enableSorting: false,
26
26
  } as Partial<MRT_ColumnDef>;
27
27
 
28
- const getColumnId = <TData extends Record<string, any> = {}>(
28
+ export const getColumnId = <TData extends Record<string, any> = {}>(
29
29
  columnDef: MRT_ColumnDef<TData>,
30
30
  ): string =>
31
31
  columnDef.id ?? columnDef.accessorKey?.toString?.() ?? columnDef.header;
@@ -10,16 +10,36 @@ interface Props {
10
10
  export const MRT_TableFooter: FC<Props> = ({ table }) => {
11
11
  const {
12
12
  getFooterGroups,
13
- options: { muiTableFooterProps },
13
+ getState,
14
+ options: { enableStickyFooter, muiTableFooterProps },
14
15
  } = table;
16
+ const { isFullScreen } = getState();
15
17
 
16
18
  const tableFooterProps =
17
19
  muiTableFooterProps instanceof Function
18
20
  ? muiTableFooterProps({ table })
19
21
  : muiTableFooterProps;
20
22
 
23
+ const stickFooter =
24
+ (isFullScreen || enableStickyFooter) && enableStickyFooter !== false;
25
+
21
26
  return (
22
- <TableFooter {...tableFooterProps}>
27
+ <TableFooter
28
+ {...tableFooterProps}
29
+ sx={(theme) => ({
30
+ position: stickFooter ? 'sticky' : undefined,
31
+ bottom: stickFooter ? 0 : undefined,
32
+ opacity: stickFooter ? 0.95 : undefined,
33
+ outline: stickFooter
34
+ ? theme.palette.mode === 'light'
35
+ ? `1px solid ${theme.palette.grey[300]}`
36
+ : `1px solid ${theme.palette.grey[700]}`
37
+ : undefined,
38
+ ...(tableFooterProps?.sx instanceof Function
39
+ ? tableFooterProps?.sx(theme)
40
+ : (tableFooterProps?.sx as any)),
41
+ })}
42
+ >
23
43
  {getFooterGroups().map((footerGroup) => (
24
44
  <MRT_TableFooterRow
25
45
  footerGroup={footerGroup as any}
@@ -14,13 +14,14 @@ export const MRT_TableHeadCellFilterContainer: FC<Props> = ({
14
14
  table,
15
15
  }) => {
16
16
  const { getState } = table;
17
- const { columnFilterFns, showColumnFilters } = getState();
17
+ const { showColumnFilters } = getState();
18
18
  const { column } = header;
19
+ const { columnDef } = column;
19
20
 
20
21
  return (
21
22
  <Collapse in={showColumnFilters} mountOnEnter unmountOnExit>
22
23
  {['between', 'betweenInclusive', 'inNumberRange'].includes(
23
- columnFilterFns[column.id],
24
+ columnDef._filterFn,
24
25
  ) ? (
25
26
  <MRT_FilterRangeFields header={header} table={table} />
26
27
  ) : (
@@ -24,7 +24,9 @@ export const MRT_TableHeadRow: FC<Props> = ({ headerGroup, table }) => {
24
24
  sx={(theme) => ({
25
25
  boxShadow: `4px 0 8px ${alpha(theme.palette.common.black, 0.1)}`,
26
26
  backgroundColor: lighten(theme.palette.background.default, 0.04),
27
- ...(tableRowProps?.sx as any),
27
+ ...(tableRowProps?.sx instanceof Function
28
+ ? tableRowProps?.sx(theme)
29
+ : (tableRowProps?.sx as any)),
28
30
  })}
29
31
  >
30
32
  {headerGroup.headers.map((header: MRT_Header, index) => (
@@ -33,9 +33,8 @@ export const MRT_FilterTextField: FC<Props> = ({
33
33
  table,
34
34
  }) => {
35
35
  const {
36
- getState,
37
36
  options: {
38
- enableColumnFilterChangeMode,
37
+ enableColumnFilterModes,
39
38
  columnFilterModeOptions,
40
39
  icons: { FilterListIcon, CloseIcon },
41
40
  localization,
@@ -46,7 +45,6 @@ export const MRT_FilterTextField: FC<Props> = ({
46
45
  } = table;
47
46
  const { column } = header;
48
47
  const { columnDef } = column;
49
- const { columnFilterFns } = getState();
50
48
 
51
49
  const mTableHeadCellFilterTextFieldProps =
52
50
  muiTableHeadCellFilterTextFieldProps instanceof Function
@@ -78,8 +76,7 @@ export const MRT_FilterTextField: FC<Props> = ({
78
76
  const isTextboxFilter =
79
77
  columnDef.filterVariant === 'text' ||
80
78
  (!isSelectFilter && !isMultiSelectFilter);
81
-
82
- const currentFilterOption = columnFilterFns?.[header.id];
79
+ const currentFilterOption = columnDef._filterFn;
83
80
  const filterChipLabel = ['empty', 'notEmpty'].includes(currentFilterOption)
84
81
  ? //@ts-ignore
85
82
  localization[
@@ -99,8 +96,8 @@ export const MRT_FilterTextField: FC<Props> = ({
99
96
  const allowedColumnFilterOptions =
100
97
  columnDef?.columnFilterModeOptions ?? columnFilterModeOptions;
101
98
  const showChangeModeButton =
102
- enableColumnFilterChangeMode &&
103
- columnDef.enableColumnFilterChangeMode !== false &&
99
+ enableColumnFilterModes &&
100
+ columnDef.enableColumnFilterModes !== false &&
104
101
  !rangeFilterIndex &&
105
102
  (allowedColumnFilterOptions === undefined ||
106
103
  !!allowedColumnFilterOptions?.length);
@@ -299,7 +296,7 @@ export const MRT_FilterTextField: FC<Props> = ({
299
296
  }}
300
297
  sx={(theme) => ({
301
298
  p: 0,
302
- minWidth: !filterChipLabel ? '150px' : 'auto',
299
+ minWidth: !filterChipLabel ? '120px' : 'auto',
303
300
  width: '100%',
304
301
  '& .MuiSelect-icon': {
305
302
  mr: '1.5rem',
@@ -23,7 +23,7 @@ export const MRT_GlobalFilterTextField = <
23
23
  getState,
24
24
  setGlobalFilter,
25
25
  options: {
26
- enableGlobalFilterChangeMode,
26
+ enableGlobalFilterModes,
27
27
  icons: { SearchIcon, CloseIcon },
28
28
  localization,
29
29
  muiSearchTextFieldProps,
@@ -69,7 +69,7 @@ export const MRT_GlobalFilterTextField = <
69
69
  value={searchValue ?? ''}
70
70
  variant="standard"
71
71
  InputProps={{
72
- startAdornment: enableGlobalFilterChangeMode ? (
72
+ startAdornment: enableGlobalFilterModes ? (
73
73
  <InputAdornment position="start">
74
74
  <Tooltip arrow title={localization.changeSearchMode}>
75
75
  <IconButton
@@ -34,7 +34,7 @@ export const MRT_ColumnActionMenu: FC<Props> = ({
34
34
  toggleAllColumnsVisible,
35
35
  setColumnOrder,
36
36
  options: {
37
- enableColumnFilterChangeMode,
37
+ enableColumnFilterModes,
38
38
  enableColumnFilters,
39
39
  enableColumnResizing,
40
40
  enableGrouping,
@@ -138,8 +138,8 @@ export const MRT_ColumnActionMenu: FC<Props> = ({
138
138
  columnDef?.columnFilterModeOptions ?? columnFilterModeOptions;
139
139
 
140
140
  const showFilterModeSubMenu =
141
- enableColumnFilterChangeMode &&
142
- columnDef.enableColumnFilterChangeMode !== false &&
141
+ enableColumnFilterModes &&
142
+ columnDef.enableColumnFilterModes !== false &&
143
143
  !isSelectFilter &&
144
144
  (allowedColumnFilterOptions === undefined ||
145
145
  !!allowedColumnFilterOptions?.length);