material-react-table 0.16.2 → 0.18.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": "0.16.2",
2
+ "version": "0.18.0",
3
3
  "license": "MIT",
4
4
  "name": "material-react-table",
5
5
  "description": "A fully featured Material UI implementation of TanStack React Table, inspired by material-table and the MUI X DataGrid, written from the ground up in TypeScript.",
@@ -3,7 +3,6 @@ import React, {
3
3
  Dispatch,
4
4
  FC,
5
5
  FocusEvent,
6
- MouseEvent,
7
6
  ReactNode,
8
7
  SetStateAction,
9
8
  } from 'react';
@@ -30,8 +29,6 @@ import {
30
29
  Cell,
31
30
  Column,
32
31
  ColumnDef,
33
- ColumnOrderState,
34
- ColumnPinningState,
35
32
  FilterFn,
36
33
  FilterFnOption,
37
34
  Header,
@@ -46,7 +43,6 @@ import {
46
43
  TableInstance,
47
44
  TableState,
48
45
  UseTableInstanceOptions,
49
- VisibilityState,
50
46
  } from '@tanstack/react-table';
51
47
  import { Options as VirtualizerOptions } from 'react-virtual';
52
48
  import { MRT_Localization, MRT_DefaultLocalization_EN } from './localization';
@@ -128,6 +124,7 @@ export type MRT_TableInstance<D extends Record<string, any> = {}> = Omit<
128
124
  setCurrentGlobalFilterFn: Dispatch<SetStateAction<MRT_FilterFn>>;
129
125
  setDensity: Dispatch<SetStateAction<'comfortable' | 'compact' | 'spacious'>>;
130
126
  setIsFullScreen: Dispatch<SetStateAction<boolean>>;
127
+ setShowAlertBanner: Dispatch<SetStateAction<boolean>>;
131
128
  setShowFilters: Dispatch<SetStateAction<boolean>>;
132
129
  setShowGlobalFilter: Dispatch<SetStateAction<boolean>>;
133
130
  };
@@ -140,6 +137,7 @@ export type MRT_TableState<D extends Record<string, any> = {}> = TableState & {
140
137
  density: 'comfortable' | 'compact' | 'spacious';
141
138
  isLoading: boolean;
142
139
  isFullScreen: boolean;
140
+ showAlertBanner: boolean;
143
141
  showFilters: boolean;
144
142
  showGlobalFilter: boolean;
145
143
  showProgressBars: boolean;
@@ -288,7 +286,7 @@ export type MRT_ColumnDef<D extends Record<string, any> = {}> = Omit<
288
286
  cell: MRT_Cell<D>;
289
287
  instance: MRT_TableInstance<D>;
290
288
  }) => void;
291
- onCellEditChanged?: ({
289
+ onCellEditChange?: ({
292
290
  cell,
293
291
  event,
294
292
  instance,
@@ -297,28 +295,6 @@ export type MRT_ColumnDef<D extends Record<string, any> = {}> = Omit<
297
295
  cell: MRT_Cell<D>;
298
296
  instance: MRT_TableInstance<D>;
299
297
  }) => void;
300
- onColumnFilterValueChanged?: ({
301
- column,
302
- event,
303
- filterValue,
304
- instance,
305
- }: {
306
- column: MRT_Column<D>;
307
- event: ChangeEvent<HTMLInputElement>;
308
- filterValue: any;
309
- instance: MRT_TableInstance<D>;
310
- }) => void;
311
- onColumnFilterValueChangedDebounced?: ({
312
- column,
313
- event,
314
- filterValue,
315
- instance,
316
- }: {
317
- column: MRT_Column<D>;
318
- event: ChangeEvent<HTMLInputElement>;
319
- filterValue: any;
320
- instance: MRT_TableInstance<D>;
321
- }) => void;
322
298
  sortingFn?: MRT_SortingFn;
323
299
  };
324
300
 
@@ -401,7 +377,6 @@ export type MaterialReactTableProps<D extends Record<string, any> = {}> =
401
377
  enableGlobalFilterChangeMode?: boolean;
402
378
  enableGlobalFilterRankedResults?: boolean;
403
379
  enablePagination?: boolean;
404
- enablePersistentState?: boolean;
405
380
  enableRowActions?: boolean;
406
381
  enableRowNumbers?: boolean;
407
382
  enableRowVirtualization?: boolean;
@@ -599,15 +574,6 @@ export type MaterialReactTableProps<D extends Record<string, any> = {}> =
599
574
  muiTableToolbarTopProps?:
600
575
  | ToolbarProps
601
576
  | (({ instance }: { instance: MRT_TableInstance<D> }) => ToolbarProps);
602
- onCellClick?: ({
603
- cell,
604
- event,
605
- instance,
606
- }: {
607
- cell: MRT_Cell<D>;
608
- instance: MRT_TableInstance<D>;
609
- event: MouseEvent<HTMLTableCellElement>;
610
- }) => void;
611
577
  onCellEditBlur?: ({
612
578
  cell,
613
579
  event,
@@ -617,7 +583,7 @@ export type MaterialReactTableProps<D extends Record<string, any> = {}> =
617
583
  cell: MRT_Cell<D>;
618
584
  instance: MRT_TableInstance<D>;
619
585
  }) => void;
620
- onCellEditChanged?: ({
586
+ onCellEditChange?: ({
621
587
  cell,
622
588
  event,
623
589
  instance,
@@ -626,64 +592,10 @@ export type MaterialReactTableProps<D extends Record<string, any> = {}> =
626
592
  cell: MRT_Cell<D>;
627
593
  instance: MRT_TableInstance<D>;
628
594
  }) => void;
629
- onColumnFilterValueChanged?: ({
630
- column,
631
- event,
632
- filterValue,
633
- instance,
634
- }: {
635
- column: MRT_Column<D>;
636
- event: ChangeEvent<HTMLInputElement>;
637
- filterValue: any;
638
- instance: MRT_TableInstance<D>;
639
- }) => void;
640
- onColumnFilterValueChangedDebounced?: ({
641
- column,
642
- event,
643
- filterValue,
644
- instance,
645
- }: {
646
- column: MRT_Column<D>;
647
- event: ChangeEvent<HTMLInputElement>;
648
- filterValue: any;
649
- instance: MRT_TableInstance<D>;
650
- }) => void;
651
- onColumnOrderChanged?: ({
652
- columnOrder,
653
- instance,
654
- }: {
655
- columnOrder: ColumnOrderState;
656
- instance: MRT_TableInstance<D>;
657
- }) => void;
658
- onColumnPinningChanged?: ({
659
- columnPinning,
660
- instance,
661
- }: {
662
- columnPinning: ColumnPinningState;
663
- instance: MRT_TableInstance<D>;
664
- }) => void;
665
- onColumnVisibilityChanged?: ({
666
- column,
667
- columnVisibility,
668
- instance,
669
- }: {
670
- column: MRT_Column<D>;
671
- columnVisibility: VisibilityState;
672
- instance: MRT_TableInstance<D>;
673
- }) => void;
674
595
  onCurrentEditingCellChange?: OnChangeFn<MRT_Cell>;
675
596
  onCurrentEditingRowChange?: OnChangeFn<MRT_Row>;
676
597
  onCurrentFilterFnsChange?: OnChangeFn<{ [key: string]: MRT_FilterFn }>;
677
598
  onCurrentGlobalFilterFnChange?: OnChangeFn<MRT_FilterFn>;
678
- onDetailPanelClick?: ({
679
- event,
680
- row,
681
- instance,
682
- }: {
683
- event: MouseEvent<HTMLTableCellElement>;
684
- row: MRT_Row<D>;
685
- instance: MRT_TableInstance<D>;
686
- }) => void;
687
599
  onEditRowSubmit?: ({
688
600
  row,
689
601
  instance,
@@ -691,98 +603,11 @@ export type MaterialReactTableProps<D extends Record<string, any> = {}> =
691
603
  row: MRT_Row<D>;
692
604
  instance: MRT_TableInstance<D>;
693
605
  }) => Promise<void> | void;
694
- onExpandChanged?: ({
695
- event,
696
- row,
697
- }: {
698
- event: MouseEvent<HTMLButtonElement>;
699
- row: MRT_Row<D>;
700
- instance: MRT_TableInstance<D>;
701
- }) => void;
702
- onGlobalFilterValueChanged?: ({
703
- event,
704
- instance,
705
- }: {
706
- event: ChangeEvent<HTMLInputElement>;
707
- instance: MRT_TableInstance<D>;
708
- }) => void;
709
- onGlobalFilterValueChangedDebounced?: ({
710
- event,
711
- instance,
712
- }: {
713
- event: ChangeEvent<HTMLInputElement>;
714
- instance: MRT_TableInstance<D>;
715
- }) => void;
716
606
  onDensityChange?: OnChangeFn<boolean>;
717
- onDensityChanged?: ({
718
- event,
719
- density,
720
- instance,
721
- }: {
722
- event: MouseEvent<HTMLButtonElement>;
723
- density: 'comfortable' | 'compact' | 'spacious';
724
- instance: MRT_TableInstance<D>;
725
- }) => void;
726
607
  onIsFullScreenChange?: OnChangeFn<boolean>;
727
- onIsFullScreenChanged?: ({
728
- event,
729
- isFullScreen,
730
- instance,
731
- }: {
732
- event: MouseEvent<HTMLButtonElement>;
733
- isFullScreen: boolean;
734
- instance: MRT_TableInstance<D>;
735
- }) => void;
736
- onRowClick?: ({
737
- event,
738
- row,
739
- instance,
740
- }: {
741
- event: MouseEvent<HTMLTableRowElement>;
742
- row: MRT_Row<D>;
743
- instance: MRT_TableInstance<D>;
744
- }) => void;
745
- onRowSelectAllChanged?: ({
746
- event,
747
- selectedRows,
748
- instance,
749
- }: {
750
- event: ChangeEvent;
751
- selectedRows: MRT_Row<D>[];
752
- instance: MRT_TableInstance<D>;
753
- }) => void;
754
- onRowSelectionChanged?: ({
755
- event,
756
- row,
757
- selectedRows,
758
- instance,
759
- }: {
760
- event: ChangeEvent;
761
- row: MRT_Row<D>;
762
- selectedRows: MRT_Row<D>[];
763
- instance: MRT_TableInstance<D>;
764
- }) => void;
608
+ onShowAlertBannerChange?: OnChangeFn<boolean>;
765
609
  onShowFiltersChange?: OnChangeFn<boolean>;
766
- onShowFiltersChanged?: ({
767
- event,
768
- instance,
769
- showFilters,
770
- }: {
771
- event: MouseEvent<HTMLButtonElement>;
772
- instance: MRT_TableInstance<D>;
773
- showFilters: boolean;
774
- }) => void;
775
610
  onShowGlobalFilterChange?: OnChangeFn<boolean>;
776
- onShowGlobalFilterChanged?: ({
777
- event,
778
- instance,
779
- showGlobalFilter,
780
- }: {
781
- event: MouseEvent<HTMLButtonElement>;
782
- instance: MRT_TableInstance<D>;
783
- showGlobalFilter: boolean;
784
- }) => void;
785
- persistentStateMode?: 'localStorage' | 'sessionStorage';
786
611
  positionActionsColumn?: 'first' | 'last';
787
612
  positionGlobalFilter?: 'left' | 'right';
788
613
  positionPagination?: 'bottom' | 'top' | 'both';
@@ -845,6 +670,7 @@ export type MaterialReactTableProps<D extends Record<string, any> = {}> =
845
670
  IconButtonProps & { instance: MRT_TableInstance<D> }
846
671
  >;
847
672
  }) => ReactNode;
673
+ rowCount?: number;
848
674
  rowNumberMode?: 'original' | 'static';
849
675
  selectAllMode?: 'all' | 'page';
850
676
  tableId?: string;
@@ -885,7 +711,6 @@ export default <D extends Record<string, any> = {}>({
885
711
  enableToolbarTop = true,
886
712
  icons,
887
713
  localization,
888
- persistentStateMode = 'sessionStorage',
889
714
  positionActionsColumn = 'first',
890
715
  positionGlobalFilter = 'right',
891
716
  positionPagination = 'bottom',
@@ -928,7 +753,6 @@ export default <D extends Record<string, any> = {}>({
928
753
  enableToolbarTop={enableToolbarTop}
929
754
  icons={{ ...MRT_Default_Icons, ...icons }}
930
755
  localization={{ ...MRT_DefaultLocalization_EN, ...localization }}
931
- persistentStateMode={persistentStateMode}
932
756
  positionActionsColumn={positionActionsColumn}
933
757
  positionGlobalFilter={positionGlobalFilter}
934
758
  positionPagination={positionPagination}
@@ -29,8 +29,6 @@ export const MRT_TableBodyCell: FC<Props> = ({
29
29
  enableRowNumbers,
30
30
  muiTableBodyCellProps,
31
31
  muiTableBodyCellSkeletonProps,
32
- onCellClick,
33
- onRowClick,
34
32
  rowNumberMode,
35
33
  tableId,
36
34
  },
@@ -132,9 +130,6 @@ export const MRT_TableBodyCell: FC<Props> = ({
132
130
 
133
131
  return (
134
132
  <TableCell
135
- onClick={(event: MouseEvent<HTMLTableCellElement>) =>
136
- onCellClick?.({ event, cell, instance })
137
- }
138
133
  onDoubleClick={handleDoubleClick}
139
134
  {...tableCellProps}
140
135
  ref={
@@ -149,10 +144,7 @@ export const MRT_TableBodyCell: FC<Props> = ({
149
144
  : getIsFirstRightPinnedColumn()
150
145
  ? `-4px 0 4px -2px ${alpha(theme.palette.common.black, 0.1)}`
151
146
  : undefined,
152
- cursor:
153
- (isEditable && editingMode === 'cell') || onRowClick || onCellClick
154
- ? 'pointer'
155
- : 'text',
147
+ cursor: isEditable && editingMode === 'cell' ? 'pointer' : 'text',
156
148
  left:
157
149
  column.getIsPinned() === 'left'
158
150
  ? `${column.getStart('left')}px`
@@ -1,4 +1,4 @@
1
- import React, { FC, MouseEvent } from 'react';
1
+ import React, { FC } from 'react';
2
2
  import { darken, lighten, TableRow } from '@mui/material';
3
3
  import { MRT_TableBodyCell } from './MRT_TableBodyCell';
4
4
  import { MRT_TableDetailPanel } from './MRT_TableDetailPanel';
@@ -13,7 +13,7 @@ interface Props {
13
13
  export const MRT_TableBodyRow: FC<Props> = ({ row, rowIndex, instance }) => {
14
14
  const {
15
15
  getIsSomeColumnsPinned,
16
- options: { muiTableBodyRowProps, onRowClick, renderDetailPanel },
16
+ options: { muiTableBodyRowProps, renderDetailPanel },
17
17
  } = instance;
18
18
 
19
19
  const tableRowProps =
@@ -25,9 +25,6 @@ export const MRT_TableBodyRow: FC<Props> = ({ row, rowIndex, instance }) => {
25
25
  <>
26
26
  <TableRow
27
27
  hover
28
- onClick={(event: MouseEvent<HTMLTableRowElement>) =>
29
- onRowClick?.({ event, row, instance })
30
- }
31
28
  selected={row.getIsSelected()}
32
29
  {...tableRowProps}
33
30
  sx={(theme) => ({
@@ -1,4 +1,4 @@
1
- import React, { FC, MouseEvent } from 'react';
1
+ import React, { FC } from 'react';
2
2
  import { Collapse, TableCell, TableRow } from '@mui/material';
3
3
  import type { MRT_Row, MRT_TableInstance } from '..';
4
4
 
@@ -13,7 +13,6 @@ export const MRT_TableDetailPanel: FC<Props> = ({ row, instance }) => {
13
13
  options: {
14
14
  muiTableBodyRowProps,
15
15
  muiTableDetailPanelProps,
16
- onDetailPanelClick,
17
16
  renderDetailPanel,
18
17
  },
19
18
  } = instance;
@@ -32,9 +31,6 @@ export const MRT_TableDetailPanel: FC<Props> = ({ row, instance }) => {
32
31
  <TableRow {...tableRowProps}>
33
32
  <TableCell
34
33
  colSpan={getVisibleLeafColumns().length}
35
- onClick={(event: MouseEvent<HTMLTableCellElement>) =>
36
- onDetailPanelClick?.({ event, row, instance })
37
- }
38
34
  {...tableCellProps}
39
35
  sx={{
40
36
  borderBottom: !row.getIsExpanded() ? 'none' : undefined,
@@ -1,4 +1,4 @@
1
- import React, { FC, MouseEvent } from 'react';
1
+ import React, { FC } from 'react';
2
2
  import { IconButton, Tooltip } from '@mui/material';
3
3
  import type { MRT_Row, MRT_TableInstance } from '..';
4
4
 
@@ -14,7 +14,6 @@ export const MRT_ExpandButton: FC<Props> = ({ row, instance }) => {
14
14
  icons: { ExpandMoreIcon },
15
15
  localization,
16
16
  muiExpandButtonProps,
17
- onExpandChanged,
18
17
  renderDetailPanel,
19
18
  },
20
19
  } = instance;
@@ -26,9 +25,8 @@ export const MRT_ExpandButton: FC<Props> = ({ row, instance }) => {
26
25
  ? muiExpandButtonProps({ instance, row })
27
26
  : muiExpandButtonProps;
28
27
 
29
- const handleToggleExpand = (event: MouseEvent<HTMLButtonElement>) => {
28
+ const handleToggleExpand = () => {
30
29
  row.toggleExpanded();
31
- onExpandChanged?.({ event, row, instance });
32
30
  };
33
31
 
34
32
  return (
@@ -1,4 +1,4 @@
1
- import React, { FC, MouseEvent } from 'react';
1
+ import React, { FC } from 'react';
2
2
  import { IconButton, IconButtonProps, Tooltip } from '@mui/material';
3
3
  import { MRT_TableInstance } from '..';
4
4
 
@@ -15,19 +15,13 @@ export const MRT_FullScreenToggleButton: FC<Props> = ({
15
15
  options: {
16
16
  icons: { FullscreenExitIcon, FullscreenIcon },
17
17
  localization,
18
- onIsFullScreenChanged,
19
18
  },
20
19
  setIsFullScreen,
21
20
  } = instance;
22
21
 
23
22
  const { isFullScreen } = getState();
24
23
 
25
- const handleToggleFullScreen = (event: MouseEvent<HTMLButtonElement>) => {
26
- onIsFullScreenChanged?.({
27
- event,
28
- isFullScreen: !isFullScreen,
29
- instance,
30
- });
24
+ const handleToggleFullScreen = () => {
31
25
  setIsFullScreen(!isFullScreen);
32
26
  };
33
27
 
@@ -1,4 +1,4 @@
1
- import React, { FC, MouseEvent } from 'react';
1
+ import React, { FC } from 'react';
2
2
  import { IconButton, IconButtonProps, Tooltip } from '@mui/material';
3
3
  import { MRT_TableInstance } from '..';
4
4
 
@@ -15,25 +15,19 @@ export const MRT_ToggleDensePaddingButton: FC<Props> = ({
15
15
  options: {
16
16
  icons: { DensityLargeIcon, DensityMediumIcon, DensitySmallIcon },
17
17
  localization,
18
- onDensityChanged,
19
18
  },
20
19
  setDensity,
21
20
  } = instance;
22
21
 
23
22
  const { density } = getState();
24
23
 
25
- const handleToggleDensePadding = (event: MouseEvent<HTMLButtonElement>) => {
24
+ const handleToggleDensePadding = () => {
26
25
  const nextDensity =
27
26
  density === 'comfortable'
28
27
  ? 'compact'
29
28
  : density === 'compact'
30
29
  ? 'spacious'
31
30
  : 'comfortable';
32
- onDensityChanged?.({
33
- event,
34
- density: nextDensity,
35
- instance,
36
- });
37
31
  setDensity(nextDensity);
38
32
  };
39
33
 
@@ -1,4 +1,4 @@
1
- import React, { FC, MouseEvent } from 'react';
1
+ import React, { FC } from 'react';
2
2
  import { IconButton, IconButtonProps, Tooltip } from '@mui/material';
3
3
  import { MRT_TableInstance } from '..';
4
4
 
@@ -12,19 +12,13 @@ export const MRT_ToggleFiltersButton: FC<Props> = ({ instance, ...rest }) => {
12
12
  options: {
13
13
  icons: { FilterListIcon, FilterListOffIcon },
14
14
  localization,
15
- onShowFiltersChanged,
16
15
  },
17
16
  setShowFilters,
18
17
  } = instance;
19
18
 
20
19
  const { showFilters } = getState();
21
20
 
22
- const handleToggleShowFilters = (event: MouseEvent<HTMLButtonElement>) => {
23
- onShowFiltersChanged?.({
24
- event,
25
- showFilters: !showFilters,
26
- instance,
27
- });
21
+ const handleToggleShowFilters = () => {
28
22
  setShowFilters(!showFilters);
29
23
  };
30
24
 
@@ -1,4 +1,4 @@
1
- import React, { FC, MouseEvent } from 'react';
1
+ import React, { FC } from 'react';
2
2
  import { IconButton, IconButtonProps, Tooltip } from '@mui/material';
3
3
  import { MRT_TableInstance } from '..';
4
4
 
@@ -17,7 +17,6 @@ export const MRT_ToggleGlobalFilterButton: FC<Props> = ({
17
17
  tableId,
18
18
  localization,
19
19
  muiSearchTextFieldProps,
20
- onShowGlobalFilterChanged,
21
20
  },
22
21
  setShowGlobalFilter,
23
22
  } = instance;
@@ -29,12 +28,7 @@ export const MRT_ToggleGlobalFilterButton: FC<Props> = ({
29
28
  ? muiSearchTextFieldProps({ instance })
30
29
  : muiSearchTextFieldProps;
31
30
 
32
- const handleToggleSearch = (event: MouseEvent<HTMLButtonElement>) => {
33
- onShowGlobalFilterChanged?.({
34
- event,
35
- showGlobalFilter: !showGlobalFilter,
36
- instance,
37
- });
31
+ const handleToggleSearch = () => {
38
32
  setShowGlobalFilter(!showGlobalFilter);
39
33
  setTimeout(
40
34
  () =>
@@ -13,7 +13,7 @@ export const MRT_TableHeadCellResizeHandle: FC<Props> = ({
13
13
  }) => {
14
14
  const { getState } = instance;
15
15
 
16
- const { showFilters } = getState();
16
+ const { density, showFilters } = getState();
17
17
 
18
18
  const { column } = header;
19
19
 
@@ -29,13 +29,14 @@ export const MRT_TableHeadCellResizeHandle: FC<Props> = ({
29
29
  borderRightWidth: '2px',
30
30
  cursor: 'col-resize',
31
31
  height: showFilters && columnDefType === 'data' ? '4rem' : '2rem',
32
+ mr: density === 'compact' ? '-0.5rem' : '-1rem',
32
33
  opacity: 0.8,
33
34
  position: 'absolute',
34
- mr: '-1rem',
35
35
  right: '1px',
36
36
  touchAction: 'none',
37
37
  transition: column.getIsResizing() ? undefined : 'all 0.2s ease-in-out',
38
38
  userSelect: 'none',
39
+ zIndex: 4,
39
40
  '&:active': {
40
41
  backgroundColor: theme.palette.info.main,
41
42
  opacity: 1,
@@ -21,7 +21,7 @@ export const MRT_EditCellTextField: FC<Props> = ({ cell, instance }) => {
21
21
  enableEditing,
22
22
  muiTableBodyCellEditTextFieldProps,
23
23
  onCellEditBlur,
24
- onCellEditChanged,
24
+ onCellEditChange,
25
25
  },
26
26
  setCurrentEditingCell,
27
27
  setCurrentEditingRow,
@@ -35,8 +35,8 @@ export const MRT_EditCellTextField: FC<Props> = ({ cell, instance }) => {
35
35
 
36
36
  const handleChange = (event: ChangeEvent<HTMLInputElement>) => {
37
37
  setValue(event.target.value);
38
- columnDef.onCellEditChanged?.({ event, cell, instance });
39
- onCellEditChanged?.({ event, cell, instance });
38
+ columnDef.onCellEditChange?.({ event, cell, instance });
39
+ onCellEditChange?.({ event, cell, instance });
40
40
  };
41
41
 
42
42
  const handleBlur = (event: FocusEvent<HTMLInputElement>) => {