material-react-table 1.2.10 → 1.3.0-beta.1

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.
@@ -181,7 +181,7 @@ export declare const MRT_TableRoot: <TData extends Record<string, any> = {}>(pro
181
181
  values: Record<(string & Record<never, never>) | (string & import("@tanstack/table-core").DeepKeys<TData>), any>;
182
182
  }) => void | Promise<void>) | undefined;
183
183
  onEditingRowChange?: import("@tanstack/table-core").OnChangeFn<MRT_Row<TData> | null> | undefined;
184
- onFilterFnsChange?: import("@tanstack/table-core").OnChangeFn<{
184
+ onColumnFilterFnsChange?: import("@tanstack/table-core").OnChangeFn<{
185
185
  [key: string]: MRT_FilterOption;
186
186
  }> | undefined;
187
187
  onGlobalFilterFnChange?: import("@tanstack/table-core").OnChangeFn<MRT_FilterOption> | undefined;
@@ -18,8 +18,9 @@ import type { TableProps } from '@mui/material/Table';
18
18
  import type { TableRowProps } from '@mui/material/TableRow';
19
19
  import type { TextFieldProps } from '@mui/material/TextField';
20
20
  import type { ToolbarProps } from '@mui/material/Toolbar';
21
- import type { Cell, Column, ColumnDef, DeepKeys, FilterFn, Header, HeaderGroup, OnChangeFn, Row, SortingFn, Table, TableOptions, TableState } from '@tanstack/react-table';
21
+ import type { AggregationFn, Cell, Column, ColumnDef, DeepKeys, FilterFn, Header, HeaderGroup, OnChangeFn, Row, SortingFn, Table, TableOptions, TableState } from '@tanstack/react-table';
22
22
  import type { Options as VirtualizerOptions, VirtualItem } from 'react-virtual';
23
+ import { MRT_AggregationFns } from './aggregationFns';
23
24
  import { MRT_FilterFns } from './filterFns';
24
25
  import { MRT_Icons } from './icons';
25
26
  import { MRT_SortingFns } from './sortingFns';
@@ -196,7 +197,7 @@ export declare type MRT_TableState<TData extends Record<string, any> = {}> = Tab
196
197
  showProgressBars: boolean;
197
198
  showSkeletons: boolean;
198
199
  };
199
- export declare type MRT_ColumnDef<TData extends Record<string, any> = {}> = Omit<ColumnDef<TData, unknown>, 'aggregatedCell' | 'cell' | 'columns' | 'filterFn' | 'footer' | 'header' | 'id' | 'sortingFn'> & {
200
+ export declare type MRT_ColumnDef<TData extends Record<string, any> = {}> = Omit<ColumnDef<TData, unknown>, 'accessorKey' | 'aggregatedCell' | 'aggregationFn' | 'cell' | 'columns' | 'filterFn' | 'footer' | 'header' | 'id' | 'sortingFn'> & {
200
201
  AggregatedCell?: ({ cell, column, row, table, }: {
201
202
  cell: MRT_Cell<TData>;
202
203
  column: MRT_Column<TData>;
@@ -253,6 +254,7 @@ export declare type MRT_ColumnDef<TData extends Record<string, any> = {}> = Omit
253
254
  * @example accessorKey: 'name.firstName' //deep key dot notation
254
255
  */
255
256
  accessorKey?: DeepKeys<TData>;
257
+ aggregationFn?: MRT_AggregationFn<TData> | Array<MRT_AggregationFn<TData>>;
256
258
  /**
257
259
  * Specify what type of column this is. Either `data`, `display`, or `group`. Defaults to `data`.
258
260
  * Leave this blank if you are just creating a normal data column.
@@ -378,6 +380,8 @@ export declare type MRT_Cell<TData extends Record<string, any> = {}> = Omit<Cell
378
380
  column: MRT_Column<TData>;
379
381
  row: MRT_Row<TData>;
380
382
  };
383
+ export declare type MRT_AggregationOption = string & keyof typeof MRT_AggregationFns;
384
+ export declare type MRT_AggregationFn<TData extends Record<string, any> = {}> = AggregationFn<TData> | MRT_AggregationOption;
381
385
  export declare type MRT_SortingOption = LiteralUnion<string & keyof typeof MRT_SortingFns>;
382
386
  export declare type MRT_SortingFn<TData extends Record<string, any> = {}> = SortingFn<TData> | MRT_SortingOption;
383
387
  export declare type MRT_FilterOption = LiteralUnion<string & keyof typeof MRT_FilterFns>;
@@ -609,7 +613,7 @@ export declare type MaterialReactTableProps<TData extends Record<string, any> =
609
613
  values: Record<LiteralUnion<string & DeepKeys<TData>>, any>;
610
614
  }) => Promise<void> | void;
611
615
  onEditingRowChange?: OnChangeFn<MRT_Row<TData> | null>;
612
- onFilterFnsChange?: OnChangeFn<{
616
+ onColumnFilterFnsChange?: OnChangeFn<{
613
617
  [key: string]: MRT_FilterOption;
614
618
  }>;
615
619
  onGlobalFilterFnChange?: OnChangeFn<MRT_FilterOption>;
@@ -1,4 +1,5 @@
1
- import type { ColumnOrderState, GroupingState } from '@tanstack/react-table';
1
+ import type { ColumnOrderState, GroupingState, Row } from '@tanstack/react-table';
2
+ import { MRT_AggregationFns } from './aggregationFns';
2
3
  import { MRT_FilterFns } from './filterFns';
3
4
  import { MRT_SortingFns } from './sortingFns';
4
5
  import type { TableCellProps } from '@mui/material/TableCell';
@@ -6,7 +7,18 @@ import type { Theme } from '@mui/material/styles';
6
7
  import type { MaterialReactTableProps, MRT_Column, MRT_ColumnDef, MRT_DefinedColumnDef, MRT_DisplayColumnIds, MRT_FilterOption, MRT_Header, MRT_TableInstance } from '.';
7
8
  export declare const getColumnId: <TData extends Record<string, any> = {}>(columnDef: MRT_ColumnDef<TData>) => string;
8
9
  export declare const getAllLeafColumnDefs: <TData extends Record<string, any> = {}>(columns: MRT_ColumnDef<TData>[]) => MRT_ColumnDef<TData>[];
9
- export declare const prepareColumns: <TData extends Record<string, any> = {}>({ columnDefs, columnFilterFns, defaultDisplayColumn, filterFns, sortingFns, }: {
10
+ export declare const prepareColumns: <TData extends Record<string, any> = {}>({ aggregationFns, columnDefs, columnFilterFns, defaultDisplayColumn, filterFns, sortingFns, }: {
11
+ aggregationFns: {
12
+ sum: import("@tanstack/table-core").AggregationFn<any>;
13
+ min: import("@tanstack/table-core").AggregationFn<any>;
14
+ max: import("@tanstack/table-core").AggregationFn<any>;
15
+ extent: import("@tanstack/table-core").AggregationFn<any>;
16
+ mean: import("@tanstack/table-core").AggregationFn<any>;
17
+ median: import("@tanstack/table-core").AggregationFn<any>;
18
+ unique: import("@tanstack/table-core").AggregationFn<any>;
19
+ uniqueCount: import("@tanstack/table-core").AggregationFn<any>;
20
+ count: import("@tanstack/table-core").AggregationFn<any>;
21
+ } & Record<string, import("@tanstack/table-core").AggregationFn<any>>;
10
22
  columnDefs: MRT_ColumnDef<TData>[];
11
23
  columnFilterFns: {
12
24
  [key: string]: MRT_FilterOption;
@@ -14,59 +26,59 @@ export declare const prepareColumns: <TData extends Record<string, any> = {}>({
14
26
  defaultDisplayColumn: Partial<MRT_ColumnDef<TData>>;
15
27
  filterFns: {
16
28
  between: {
17
- <TData_1 extends Record<string, any> = {}>(row: import("@tanstack/table-core").Row<TData_1>, id: string, filterValues: [string | number, string | number]): boolean;
29
+ <TData_1 extends Record<string, any> = {}>(row: Row<TData_1>, id: string, filterValues: [string | number, string | number]): boolean;
18
30
  autoRemove(val: any): boolean;
19
31
  };
20
32
  betweenInclusive: {
21
- <TData_2 extends Record<string, any> = {}>(row: import("@tanstack/table-core").Row<TData_2>, id: string, filterValues: [string | number, string | number]): boolean;
33
+ <TData_2 extends Record<string, any> = {}>(row: Row<TData_2>, id: string, filterValues: [string | number, string | number]): boolean;
22
34
  autoRemove(val: any): boolean;
23
35
  };
24
36
  contains: {
25
- <TData_3 extends Record<string, any> = {}>(row: import("@tanstack/table-core").Row<TData_3>, id: string, filterValue: string | number): boolean;
37
+ <TData_3 extends Record<string, any> = {}>(row: Row<TData_3>, id: string, filterValue: string | number): boolean;
26
38
  autoRemove(val: any): boolean;
27
39
  };
28
40
  empty: {
29
- <TData_4 extends Record<string, any> = {}>(row: import("@tanstack/table-core").Row<TData_4>, id: string, _filterValue: string | number): boolean;
41
+ <TData_4 extends Record<string, any> = {}>(row: Row<TData_4>, id: string, _filterValue: string | number): boolean;
30
42
  autoRemove(val: any): boolean;
31
43
  };
32
44
  endsWith: {
33
- <TData_5 extends Record<string, any> = {}>(row: import("@tanstack/table-core").Row<TData_5>, id: string, filterValue: string | number): boolean;
45
+ <TData_5 extends Record<string, any> = {}>(row: Row<TData_5>, id: string, filterValue: string | number): boolean;
34
46
  autoRemove(val: any): boolean;
35
47
  };
36
48
  equals: {
37
- <TData_6 extends Record<string, any> = {}>(row: import("@tanstack/table-core").Row<TData_6>, id: string, filterValue: string | number): boolean;
49
+ <TData_6 extends Record<string, any> = {}>(row: Row<TData_6>, id: string, filterValue: string | number): boolean;
38
50
  autoRemove(val: any): boolean;
39
51
  };
40
52
  fuzzy: {
41
- <TData_7 extends Record<string, any> = {}>(row: import("@tanstack/table-core").Row<TData_7>, columnId: string, filterValue: string | number, addMeta: (item: import("@tanstack/match-sorter-utils").RankingInfo) => void): boolean;
53
+ <TData_7 extends Record<string, any> = {}>(row: Row<TData_7>, columnId: string, filterValue: string | number, addMeta: (item: import("@tanstack/match-sorter-utils").RankingInfo) => void): boolean;
42
54
  autoRemove(val: any): boolean;
43
55
  };
44
56
  greaterThan: {
45
- <TData_8 extends Record<string, any> = {}>(row: import("@tanstack/table-core").Row<TData_8>, id: string, filterValue: string | number): boolean;
57
+ <TData_8 extends Record<string, any> = {}>(row: Row<TData_8>, id: string, filterValue: string | number): boolean;
46
58
  autoRemove(val: any): boolean;
47
59
  };
48
60
  greaterThanOrEqualTo: {
49
- <TData_9 extends Record<string, any> = {}>(row: import("@tanstack/table-core").Row<TData_9>, id: string, filterValue: string | number): boolean;
61
+ <TData_9 extends Record<string, any> = {}>(row: Row<TData_9>, id: string, filterValue: string | number): boolean;
50
62
  autoRemove(val: any): boolean;
51
63
  };
52
64
  lessThan: {
53
- <TData_10 extends Record<string, any> = {}>(row: import("@tanstack/table-core").Row<TData_10>, id: string, filterValue: string | number): boolean;
65
+ <TData_10 extends Record<string, any> = {}>(row: Row<TData_10>, id: string, filterValue: string | number): boolean;
54
66
  autoRemove(val: any): boolean;
55
67
  };
56
68
  lessThanOrEqualTo: {
57
- <TData_11 extends Record<string, any> = {}>(row: import("@tanstack/table-core").Row<TData_11>, id: string, filterValue: string | number): boolean;
69
+ <TData_11 extends Record<string, any> = {}>(row: Row<TData_11>, id: string, filterValue: string | number): boolean;
58
70
  autoRemove(val: any): boolean;
59
71
  };
60
72
  notEmpty: {
61
- <TData_12 extends Record<string, any> = {}>(row: import("@tanstack/table-core").Row<TData_12>, id: string, _filterValue: string | number): boolean;
73
+ <TData_12 extends Record<string, any> = {}>(row: Row<TData_12>, id: string, _filterValue: string | number): boolean;
62
74
  autoRemove(val: any): boolean;
63
75
  };
64
76
  notEquals: {
65
- <TData_13 extends Record<string, any> = {}>(row: import("@tanstack/table-core").Row<TData_13>, id: string, filterValue: string | number): boolean;
77
+ <TData_13 extends Record<string, any> = {}>(row: Row<TData_13>, id: string, filterValue: string | number): boolean;
66
78
  autoRemove(val: any): boolean;
67
79
  };
68
80
  startsWith: {
69
- <TData_14 extends Record<string, any> = {}>(row: import("@tanstack/table-core").Row<TData_14>, id: string, filterValue: string | number): boolean;
81
+ <TData_14 extends Record<string, any> = {}>(row: Row<TData_14>, id: string, filterValue: string | number): boolean;
70
82
  autoRemove(val: any): boolean;
71
83
  };
72
84
  includesString: import("@tanstack/table-core").FilterFn<any>;
@@ -79,7 +91,7 @@ export declare const prepareColumns: <TData extends Record<string, any> = {}>({
79
91
  inNumberRange: import("@tanstack/table-core").FilterFn<any>;
80
92
  } & Record<string, import("@tanstack/table-core").FilterFn<any>>;
81
93
  sortingFns: {
82
- fuzzy: <TData_15 extends Record<string, any> = {}>(rowA: import("@tanstack/table-core").Row<TData_15>, rowB: import("@tanstack/table-core").Row<TData_15>, columnId: string) => number;
94
+ fuzzy: <TData_15 extends Record<string, any> = {}>(rowA: Row<TData_15>, rowB: Row<TData_15>, columnId: string) => number;
83
95
  alphanumeric: import("@tanstack/table-core").SortingFn<any>;
84
96
  alphanumericCaseSensitive: import("@tanstack/table-core").SortingFn<any>;
85
97
  text: import("@tanstack/table-core").SortingFn<any>;
@@ -121,18 +121,22 @@ const getAllLeafColumnDefs = (columns) => {
121
121
  getLeafColumns(columns);
122
122
  return allLeafColumnDefs;
123
123
  };
124
- const prepareColumns = ({ columnDefs, columnFilterFns, defaultDisplayColumn, filterFns, sortingFns, }) => columnDefs.map((columnDef) => {
124
+ const prepareColumns = ({ aggregationFns, columnDefs, columnFilterFns, defaultDisplayColumn, filterFns, sortingFns, }) => columnDefs.map((columnDef) => {
125
125
  var _a, _b;
126
+ //assign columnId
126
127
  if (!columnDef.id)
127
128
  columnDef.id = getColumnId(columnDef);
128
129
  if (process.env.NODE_ENV !== 'production' && !columnDef.id) {
129
130
  console.error('Column definitions must have a valid `accessorKey` or `id` property');
130
131
  }
132
+ //assign columnDefType
131
133
  if (!columnDef.columnDefType)
132
134
  columnDef.columnDefType = 'data';
133
135
  if ((_a = columnDef.columns) === null || _a === void 0 ? void 0 : _a.length) {
134
136
  columnDef.columnDefType = 'group';
137
+ //recursively prepare columns if this is a group column
135
138
  columnDef.columns = prepareColumns({
139
+ aggregationFns,
136
140
  columnDefs: columnDef.columns,
137
141
  columnFilterFns,
138
142
  defaultDisplayColumn,
@@ -141,12 +145,19 @@ const prepareColumns = ({ columnDefs, columnFilterFns, defaultDisplayColumn, fil
141
145
  });
142
146
  }
143
147
  else if (columnDef.columnDefType === 'data') {
148
+ //assign aggregationFns if multiple aggregationFns are provided
149
+ if (Array.isArray(columnDef.aggregationFn)) {
150
+ const aggFns = columnDef.aggregationFn;
151
+ columnDef.aggregationFn = (columnId, leafRows, childRows) => aggFns.map((fn) => { var _a; return (_a = aggregationFns[fn]) === null || _a === void 0 ? void 0 : _a.call(aggregationFns, columnId, leafRows, childRows); });
152
+ }
153
+ //assign filterFns
144
154
  if (Object.keys(filterFns).includes(columnFilterFns[columnDef.id])) {
145
155
  columnDef.filterFn =
146
156
  (_b = filterFns[columnFilterFns[columnDef.id]]) !== null && _b !== void 0 ? _b : filterFns.fuzzy;
147
157
  columnDef._filterFn =
148
158
  columnFilterFns[columnDef.id];
149
159
  }
160
+ //assign sortingFns
150
161
  if (Object.keys(sortingFns).includes(columnDef.sortingFn)) {
151
162
  // @ts-ignore
152
163
  columnDef.sortingFn = sortingFns[columnDef.sortingFn];
@@ -1428,7 +1439,7 @@ const MRT_TableHeadCellColumnActionsButton = ({ header, table, }) => {
1428
1439
  const iconButtonProps = Object.assign(Object.assign({}, mTableHeadCellColumnActionsButtonProps), mcTableHeadCellColumnActionsButtonProps);
1429
1440
  return (React.createElement(React.Fragment, null,
1430
1441
  React.createElement(Tooltip, { arrow: true, enterDelay: 1000, enterNextDelay: 1000, placement: "top", title: (_a = iconButtonProps === null || iconButtonProps === void 0 ? void 0 : iconButtonProps.title) !== null && _a !== void 0 ? _a : localization.columnActions },
1431
- React.createElement(IconButton, Object.assign({ "aria-label": localization.columnActions, onClick: handleClick, size: "small" }, iconButtonProps, { sx: (theme) => (Object.assign({ height: '2rem', m: '-6px -3px', opacity: 0.5, transform: 'scale(0.85)', transition: 'opacity 150ms', width: '2rem', '&:hover': {
1442
+ React.createElement(IconButton, Object.assign({ "aria-label": localization.columnActions, onClick: handleClick, size: "small" }, iconButtonProps, { sx: (theme) => (Object.assign({ height: '2rem', m: '-8px -4px', opacity: 0.5, transform: 'scale(0.85)', transition: 'opacity 150ms', width: '2rem', '&:hover': {
1432
1443
  opacity: 1,
1433
1444
  } }, ((iconButtonProps === null || iconButtonProps === void 0 ? void 0 : iconButtonProps.sx) instanceof Function
1434
1445
  ? iconButtonProps.sx(theme)
@@ -2146,7 +2157,8 @@ const MRT_TableBodyCell = ({ cell, enableHover, numRows, rowIndex, rowRef, table
2146
2157
  editingMode !== 'modal' &&
2147
2158
  (editingMode === 'table' ||
2148
2159
  (editingRow === null || editingRow === void 0 ? void 0 : editingRow.id) === row.id ||
2149
- (editingCell === null || editingCell === void 0 ? void 0 : editingCell.id) === cell.id);
2160
+ (editingCell === null || editingCell === void 0 ? void 0 : editingCell.id) === cell.id) &&
2161
+ !row.getIsGrouped();
2150
2162
  const handleDoubleClick = (event) => {
2151
2163
  var _a;
2152
2164
  (_a = tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.onDoubleClick) === null || _a === void 0 ? void 0 : _a.call(tableCellProps, event);
@@ -2632,6 +2644,7 @@ const MRT_TableRoot = (props) => {
2632
2644
  const columnDefs = useMemo(() => {
2633
2645
  var _a, _b, _c;
2634
2646
  return prepareColumns({
2647
+ aggregationFns: props.aggregationFns,
2635
2648
  columnDefs: [...displayColumns, ...props.columns],
2636
2649
  columnFilterFns: (_b = (_a = props.state) === null || _a === void 0 ? void 0 : _a.columnFilterFns) !== null && _b !== void 0 ? _b : columnFilterFns,
2637
2650
  defaultDisplayColumn: (_c = props.defaultDisplayColumn) !== null && _c !== void 0 ? _c : {},
@@ -2686,7 +2699,7 @@ const MRT_TableRoot = (props) => {
2686
2699
  tableHeadCellRefs,
2687
2700
  tablePaperRef,
2688
2701
  topToolbarRef,
2689
- }, setColumnFilterFns: (_x = props.onFilterFnsChange) !== null && _x !== void 0 ? _x : setColumnFilterFns, setDensity: (_y = props.onDensityChange) !== null && _y !== void 0 ? _y : setDensity, setDraggingColumn: (_z = props.onDraggingColumnChange) !== null && _z !== void 0 ? _z : setDraggingColumn, setDraggingRow: (_0 = props.onDraggingRowChange) !== null && _0 !== void 0 ? _0 : setDraggingRow, setEditingCell: (_1 = props.onEditingCellChange) !== null && _1 !== void 0 ? _1 : setEditingCell, setEditingRow: (_2 = props.onEditingRowChange) !== null && _2 !== void 0 ? _2 : setEditingRow, setGlobalFilterFn: (_3 = props.onGlobalFilterFnChange) !== null && _3 !== void 0 ? _3 : setGlobalFilterFn, setHoveredColumn: (_4 = props.onHoveredColumnChange) !== null && _4 !== void 0 ? _4 : setHoveredColumn, setHoveredRow: (_5 = props.onHoveredRowChange) !== null && _5 !== void 0 ? _5 : setHoveredRow, setIsFullScreen: (_6 = props.onIsFullScreenChange) !== null && _6 !== void 0 ? _6 : setIsFullScreen, setShowAlertBanner: (_7 = props.onShowAlertBannerChange) !== null && _7 !== void 0 ? _7 : setShowAlertBanner, setShowFilters: (_8 = props.onShowFiltersChange) !== null && _8 !== void 0 ? _8 : setShowFilters, setShowGlobalFilter: (_9 = props.onShowGlobalFilterChange) !== null && _9 !== void 0 ? _9 : setShowGlobalFilter });
2702
+ }, setColumnFilterFns: (_x = props.onColumnFilterFnsChange) !== null && _x !== void 0 ? _x : setColumnFilterFns, setDensity: (_y = props.onDensityChange) !== null && _y !== void 0 ? _y : setDensity, setDraggingColumn: (_z = props.onDraggingColumnChange) !== null && _z !== void 0 ? _z : setDraggingColumn, setDraggingRow: (_0 = props.onDraggingRowChange) !== null && _0 !== void 0 ? _0 : setDraggingRow, setEditingCell: (_1 = props.onEditingCellChange) !== null && _1 !== void 0 ? _1 : setEditingCell, setEditingRow: (_2 = props.onEditingRowChange) !== null && _2 !== void 0 ? _2 : setEditingRow, setGlobalFilterFn: (_3 = props.onGlobalFilterFnChange) !== null && _3 !== void 0 ? _3 : setGlobalFilterFn, setHoveredColumn: (_4 = props.onHoveredColumnChange) !== null && _4 !== void 0 ? _4 : setHoveredColumn, setHoveredRow: (_5 = props.onHoveredRowChange) !== null && _5 !== void 0 ? _5 : setHoveredRow, setIsFullScreen: (_6 = props.onIsFullScreenChange) !== null && _6 !== void 0 ? _6 : setIsFullScreen, setShowAlertBanner: (_7 = props.onShowAlertBannerChange) !== null && _7 !== void 0 ? _7 : setShowAlertBanner, setShowFilters: (_8 = props.onShowFiltersChange) !== null && _8 !== void 0 ? _8 : setShowFilters, setShowGlobalFilter: (_9 = props.onShowGlobalFilterChange) !== null && _9 !== void 0 ? _9 : setShowGlobalFilter });
2690
2703
  if (props.tableInstanceRef) {
2691
2704
  props.tableInstanceRef.current = table;
2692
2705
  }