material-react-table 0.35.1 → 0.36.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.
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Dispatch, SetStateAction, ReactNode, FocusEvent, ChangeEvent, DragEvent } from 'react';
1
+ import { Dispatch, SetStateAction, ReactNode, DragEvent } from 'react';
2
2
  import { ButtonProps, TextFieldProps, TableCellProps, IconButtonProps, LinearProgressProps, CheckboxProps, SkeletonProps, TableBodyProps, TableRowProps, ToolbarProps, TableContainerProps, TableFooterProps, TableHeadProps, TablePaginationProps, PaperProps, TableProps, AlertProps } from '@mui/material';
3
3
  import { Row, Table, TableState, ColumnDef, DeepKeys, Column, Header, HeaderGroup, Cell, SortingFn, FilterFn, TableOptions, OnChangeFn } from '@tanstack/react-table';
4
4
  import { Options } from 'react-virtual';
@@ -356,15 +356,15 @@ declare type MRT_ColumnDef<TData extends Record<string, any> = {}> = Omit<Column
356
356
  * @default gets set to the same value as `accessorKey` by default
357
357
  */
358
358
  id?: LiteralUnion<string & keyof TData>;
359
- muiTableBodyCellCopyButtonProps?: ButtonProps | (({ table, cell, }: {
359
+ muiTableBodyCellCopyButtonProps?: ButtonProps | (({ cell, table, }: {
360
360
  table: MRT_TableInstance<TData>;
361
361
  cell: MRT_Cell<TData>;
362
362
  }) => ButtonProps);
363
- muiTableBodyCellEditTextFieldProps?: TextFieldProps | (({ table, cell, }: {
364
- table: MRT_TableInstance<TData>;
363
+ muiTableBodyCellEditTextFieldProps?: TextFieldProps | (({ cell, table, }: {
365
364
  cell: MRT_Cell<TData>;
365
+ table: MRT_TableInstance<TData>;
366
366
  }) => TextFieldProps);
367
- muiTableBodyCellProps?: TableCellProps | (({ table, cell, }: {
367
+ muiTableBodyCellProps?: TableCellProps | (({ cell, table, }: {
368
368
  table: MRT_TableInstance<TData>;
369
369
  cell: MRT_Cell<TData>;
370
370
  }) => TableCellProps);
@@ -389,18 +389,6 @@ declare type MRT_ColumnDef<TData extends Record<string, any> = {}> = Omit<Column
389
389
  table: MRT_TableInstance<TData>;
390
390
  column: MRT_Column<TData>;
391
391
  }) => TableCellProps);
392
- onCellEditBlur?: ({ cell, event, table, value, }: {
393
- event: FocusEvent<HTMLInputElement>;
394
- cell: MRT_Cell<TData>;
395
- table: MRT_TableInstance<TData>;
396
- value: string;
397
- }) => void;
398
- onCellEditChange?: ({ cell, event, table, value, }: {
399
- event: ChangeEvent<HTMLInputElement>;
400
- cell: MRT_Cell<TData>;
401
- table: MRT_TableInstance<TData>;
402
- value: string;
403
- }) => void;
404
392
  sortingFn?: MRT_SortingFn;
405
393
  };
406
394
  declare type MRT_DefinedColumnDef<TData extends Record<string, any> = {}> = Omit<MRT_ColumnDef<TData>, 'id'> & {
@@ -508,9 +496,9 @@ declare type MaterialReactTableProps<TData extends Record<string, any> = {}> = O
508
496
  table: MRT_TableInstance<TData>;
509
497
  cell: MRT_Cell<TData>;
510
498
  }) => ButtonProps);
511
- muiTableBodyCellEditTextFieldProps?: TextFieldProps | (({ table, cell, }: {
512
- table: MRT_TableInstance<TData>;
499
+ muiTableBodyCellEditTextFieldProps?: TextFieldProps | (({ cell, table, }: {
513
500
  cell: MRT_Cell<TData>;
501
+ table: MRT_TableInstance<TData>;
514
502
  }) => TextFieldProps);
515
503
  muiTableBodyCellProps?: TableCellProps | (({ table, cell, }: {
516
504
  table: MRT_TableInstance<TData>;
@@ -591,18 +579,6 @@ declare type MaterialReactTableProps<TData extends Record<string, any> = {}> = O
591
579
  muiTableTopToolbarProps?: ToolbarProps | (({ table }: {
592
580
  table: MRT_TableInstance<TData>;
593
581
  }) => ToolbarProps);
594
- onCellEditBlur?: ({ cell, event, table, value, }: {
595
- event: FocusEvent<HTMLInputElement>;
596
- cell: MRT_Cell<TData>;
597
- table: MRT_TableInstance<TData>;
598
- value: string;
599
- }) => void;
600
- onCellEditChange?: ({ cell, event, table, value, }: {
601
- event: ChangeEvent<HTMLInputElement>;
602
- cell: MRT_Cell<TData>;
603
- table: MRT_TableInstance<TData>;
604
- value: string;
605
- }) => void;
606
582
  onColumnDrop?: ({ event, draggedColumn, targetColumn, }: {
607
583
  event: DragEvent<HTMLButtonElement>;
608
584
  draggedColumn: MRT_Column<TData>;
@@ -613,7 +589,7 @@ declare type MaterialReactTableProps<TData extends Record<string, any> = {}> = O
613
589
  onDensityChange?: OnChangeFn<boolean>;
614
590
  onDraggingColumnChange?: OnChangeFn<MRT_Column<TData> | null>;
615
591
  onDraggingRowChange?: OnChangeFn<MRT_Row<TData> | null>;
616
- onEditRowSubmit?: ({ row, table, values, }: {
592
+ onEditingRowSave?: ({ row, table, values, }: {
617
593
  row: MRT_Row<TData>;
618
594
  table: MRT_TableInstance<TData>;
619
595
  values: Record<LiteralUnion<string & DeepKeys<TData>>, any>;
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.35.1",
2
+ "version": "0.36.1",
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.",
@@ -53,13 +53,13 @@
53
53
  "@babel/preset-react": "^7.18.6",
54
54
  "@emotion/react": "^11.10.0",
55
55
  "@emotion/styled": "^11.10.0",
56
- "@faker-js/faker": "^7.3.0",
56
+ "@faker-js/faker": "^7.4.0",
57
57
  "@mui/icons-material": "^5.8.4",
58
58
  "@mui/material": "^5.10.0",
59
59
  "@rollup/plugin-babel": "^5.3.1",
60
60
  "@rollup/plugin-node-resolve": "^13.3.0",
61
61
  "@rollup/plugin-typescript": "^8.3.4",
62
- "@size-limit/preset-small-lib": "^8.0.0",
62
+ "@size-limit/preset-small-lib": "^8.0.1",
63
63
  "@storybook/addon-a11y": "^6.5.10",
64
64
  "@storybook/addon-actions": "^6.5.10",
65
65
  "@storybook/addon-essentials": "^6.5.10",
@@ -78,10 +78,10 @@
78
78
  "react": "^18.2.0",
79
79
  "react-dom": "^18.2.0",
80
80
  "react-is": "^18.2.0",
81
- "rollup": "^2.77.2",
81
+ "rollup": "^2.77.3",
82
82
  "rollup-plugin-dts": "^4.2.2",
83
83
  "rollup-plugin-peer-deps-external": "^2.2.4",
84
- "size-limit": "^8.0.0",
84
+ "size-limit": "^8.0.1",
85
85
  "storybook-dark-mode": "^1.1.0",
86
86
  "tslib": "^2.4.0",
87
87
  "typescript": "^4.7.4"
@@ -1,11 +1,4 @@
1
- import React, {
2
- ChangeEvent,
3
- Dispatch,
4
- DragEvent,
5
- FocusEvent,
6
- ReactNode,
7
- SetStateAction,
8
- } from 'react';
1
+ import React, { Dispatch, DragEvent, ReactNode, SetStateAction } from 'react';
9
2
  import type {
10
3
  AlertProps,
11
4
  ButtonProps,
@@ -263,8 +256,8 @@ export type MRT_ColumnDef<TData extends Record<string, any> = {}> = Omit<
263
256
  muiTableBodyCellCopyButtonProps?:
264
257
  | ButtonProps
265
258
  | (({
266
- table,
267
259
  cell,
260
+ table,
268
261
  }: {
269
262
  table: MRT_TableInstance<TData>;
270
263
  cell: MRT_Cell<TData>;
@@ -272,17 +265,17 @@ export type MRT_ColumnDef<TData extends Record<string, any> = {}> = Omit<
272
265
  muiTableBodyCellEditTextFieldProps?:
273
266
  | TextFieldProps
274
267
  | (({
275
- table,
276
268
  cell,
269
+ table,
277
270
  }: {
278
- table: MRT_TableInstance<TData>;
279
271
  cell: MRT_Cell<TData>;
272
+ table: MRT_TableInstance<TData>;
280
273
  }) => TextFieldProps);
281
274
  muiTableBodyCellProps?:
282
275
  | TableCellProps
283
276
  | (({
284
- table,
285
277
  cell,
278
+ table,
286
279
  }: {
287
280
  table: MRT_TableInstance<TData>;
288
281
  cell: MRT_Cell<TData>;
@@ -334,28 +327,6 @@ export type MRT_ColumnDef<TData extends Record<string, any> = {}> = Omit<
334
327
  table: MRT_TableInstance<TData>;
335
328
  column: MRT_Column<TData>;
336
329
  }) => TableCellProps);
337
- onCellEditBlur?: ({
338
- cell,
339
- event,
340
- table,
341
- value,
342
- }: {
343
- event: FocusEvent<HTMLInputElement>;
344
- cell: MRT_Cell<TData>;
345
- table: MRT_TableInstance<TData>;
346
- value: string;
347
- }) => void;
348
- onCellEditChange?: ({
349
- cell,
350
- event,
351
- table,
352
- value,
353
- }: {
354
- event: ChangeEvent<HTMLInputElement>;
355
- cell: MRT_Cell<TData>;
356
- table: MRT_TableInstance<TData>;
357
- value: string;
358
- }) => void;
359
330
  sortingFn?: MRT_SortingFn;
360
331
  };
361
332
 
@@ -539,11 +510,11 @@ export type MaterialReactTableProps<TData extends Record<string, any> = {}> =
539
510
  muiTableBodyCellEditTextFieldProps?:
540
511
  | TextFieldProps
541
512
  | (({
542
- table,
543
513
  cell,
514
+ table,
544
515
  }: {
545
- table: MRT_TableInstance<TData>;
546
516
  cell: MRT_Cell<TData>;
517
+ table: MRT_TableInstance<TData>;
547
518
  }) => TextFieldProps);
548
519
  muiTableBodyCellProps?:
549
520
  | TableCellProps
@@ -693,28 +664,6 @@ export type MaterialReactTableProps<TData extends Record<string, any> = {}> =
693
664
  muiTableTopToolbarProps?:
694
665
  | ToolbarProps
695
666
  | (({ table }: { table: MRT_TableInstance<TData> }) => ToolbarProps);
696
- onCellEditBlur?: ({
697
- cell,
698
- event,
699
- table,
700
- value,
701
- }: {
702
- event: FocusEvent<HTMLInputElement>;
703
- cell: MRT_Cell<TData>;
704
- table: MRT_TableInstance<TData>;
705
- value: string;
706
- }) => void;
707
- onCellEditChange?: ({
708
- cell,
709
- event,
710
- table,
711
- value,
712
- }: {
713
- event: ChangeEvent<HTMLInputElement>;
714
- cell: MRT_Cell<TData>;
715
- table: MRT_TableInstance<TData>;
716
- value: string;
717
- }) => void;
718
667
  onColumnDrop?: ({
719
668
  event,
720
669
  draggedColumn,
@@ -727,7 +676,7 @@ export type MaterialReactTableProps<TData extends Record<string, any> = {}> =
727
676
  onDensityChange?: OnChangeFn<boolean>;
728
677
  onDraggingColumnChange?: OnChangeFn<MRT_Column<TData> | null>;
729
678
  onDraggingRowChange?: OnChangeFn<MRT_Row<TData> | null>;
730
- onEditRowSubmit?: ({
679
+ onEditingRowSave?: ({
731
680
  row,
732
681
  table,
733
682
  values,
@@ -238,7 +238,10 @@ export const MRT_TableBodyCell: FC<Props> = ({
238
238
  : undefined,
239
239
  '&:hover': {
240
240
  backgroundColor:
241
- enableHover && enableEditing && editingMode !== 'row'
241
+ enableHover &&
242
+ enableEditing &&
243
+ columnDef.enableEditing !== false &&
244
+ editingMode !== 'row'
242
245
  ? theme.palette.mode === 'dark'
243
246
  ? `${lighten(
244
247
  theme.palette.background.default,
@@ -274,7 +277,10 @@ export const MRT_TableBodyCell: FC<Props> = ({
274
277
  rowRef={rowRef}
275
278
  table={table}
276
279
  />
277
- ) : columnDefType === 'display' ? (
280
+ ) : columnDefType === 'display' &&
281
+ (column.id === 'mrt-row-select' ||
282
+ column.id === 'mrt-row-expand' ||
283
+ !row.getIsGrouped()) ? (
278
284
  columnDef.Cell?.({ cell, column, table })
279
285
  ) : isEditing ? (
280
286
  <MRT_EditCellTextField cell={cell} table={table} />
@@ -283,15 +289,20 @@ export const MRT_TableBodyCell: FC<Props> = ({
283
289
  <>
284
290
  <MRT_CopyButton cell={cell} table={table}>
285
291
  <>
286
- {columnDef?.Cell?.({ cell, column, table }) ??
287
- cell.renderValue()}
292
+ {row.getIsGrouped() && !cell.getIsGrouped()
293
+ ? null
294
+ : columnDef?.Cell?.({ cell, column, table }) ??
295
+ cell.renderValue()}
288
296
  </>
289
297
  </MRT_CopyButton>
290
298
  {cell.getIsGrouped() && <> ({row.subRows?.length})</>}
291
299
  </>
292
300
  ) : (
293
301
  <>
294
- {columnDef?.Cell?.({ cell, column, table }) ?? cell.renderValue()}
302
+ {row.getIsGrouped() && !cell.getIsGrouped()
303
+ ? null
304
+ : columnDef?.Cell?.({ cell, column, table }) ??
305
+ cell.renderValue()}
295
306
  {cell.getIsGrouped() && <> ({row.subRows?.length ?? ''})</>}
296
307
  </>
297
308
  )}
@@ -13,7 +13,7 @@ export const MRT_EditActionButtons: FC<Props> = ({ row, table }) => {
13
13
  options: {
14
14
  icons: { CancelIcon, SaveIcon },
15
15
  localization,
16
- onEditRowSubmit,
16
+ onEditingRowSave,
17
17
  },
18
18
  setEditingRow,
19
19
  } = table;
@@ -25,7 +25,7 @@ export const MRT_EditActionButtons: FC<Props> = ({ row, table }) => {
25
25
  };
26
26
 
27
27
  const handleSave = () => {
28
- onEditRowSubmit?.({
28
+ onEditingRowSave?.({
29
29
  row: editingRow ?? row,
30
30
  table,
31
31
  values: editingRow?._valuesCache ?? { ...row.original },
@@ -5,7 +5,7 @@ import React, {
5
5
  MouseEvent,
6
6
  useState,
7
7
  } from 'react';
8
- import { TextField } from '@mui/material';
8
+ import { TextField, TextFieldProps } from '@mui/material';
9
9
  import type { MRT_Cell, MRT_Row, MRT_TableInstance } from '..';
10
10
 
11
11
  interface Props {
@@ -16,12 +16,7 @@ interface Props {
16
16
  export const MRT_EditCellTextField: FC<Props> = ({ cell, table }) => {
17
17
  const {
18
18
  getState,
19
- options: {
20
- tableId,
21
- muiTableBodyCellEditTextFieldProps,
22
- onCellEditBlur,
23
- onCellEditChange,
24
- },
19
+ options: { tableId, muiTableBodyCellEditTextFieldProps },
25
20
  setEditingCell,
26
21
  setEditingRow,
27
22
  } = table;
@@ -31,23 +26,6 @@ export const MRT_EditCellTextField: FC<Props> = ({ cell, table }) => {
31
26
 
32
27
  const [value, setValue] = useState(() => cell.getValue<string>());
33
28
 
34
- const handleChange = (event: ChangeEvent<HTMLInputElement>) => {
35
- setValue(event.target.value);
36
- columnDef.onCellEditChange?.({ event, cell, table, value });
37
- onCellEditChange?.({ event, cell, table, value });
38
- };
39
-
40
- const handleBlur = (event: FocusEvent<HTMLInputElement>) => {
41
- if (editingRow) {
42
- if (!row._valuesCache) row._valuesCache = {};
43
- (row._valuesCache as Record<string, any>)[column.id] = value;
44
- setEditingRow({ ...editingRow } as MRT_Row);
45
- }
46
- setEditingCell(null);
47
- columnDef.onCellEditBlur?.({ event, cell, table, value });
48
- onCellEditBlur?.({ event, cell, table, value });
49
- };
50
-
51
29
  const mTableBodyCellEditTextFieldProps =
52
30
  muiTableBodyCellEditTextFieldProps instanceof Function
53
31
  ? muiTableBodyCellEditTextFieldProps({ cell, table })
@@ -61,11 +39,26 @@ export const MRT_EditCellTextField: FC<Props> = ({ cell, table }) => {
61
39
  })
62
40
  : columnDef.muiTableBodyCellEditTextFieldProps;
63
41
 
64
- const textFieldProps = {
42
+ const textFieldProps: TextFieldProps = {
65
43
  ...mTableBodyCellEditTextFieldProps,
66
44
  ...mcTableBodyCellEditTextFieldProps,
67
45
  };
68
46
 
47
+ const handleChange = (event: ChangeEvent<HTMLInputElement>) => {
48
+ textFieldProps.onChange?.(event);
49
+ setValue(event.target.value);
50
+ };
51
+
52
+ const handleBlur = (event: FocusEvent<HTMLInputElement>) => {
53
+ textFieldProps.onBlur?.(event);
54
+ if (editingRow) {
55
+ if (!row._valuesCache) row._valuesCache = {};
56
+ (row._valuesCache as Record<string, any>)[column.id] = value;
57
+ setEditingRow({ ...editingRow } as MRT_Row);
58
+ }
59
+ setEditingCell(null);
60
+ };
61
+
69
62
  if (columnDef.Edit) {
70
63
  return <>{columnDef.Edit?.({ cell, column, table })}</>;
71
64
  }
@@ -74,13 +67,13 @@ export const MRT_EditCellTextField: FC<Props> = ({ cell, table }) => {
74
67
  <TextField
75
68
  id={`mrt-${tableId}-edit-cell-text-field-${cell.id}`}
76
69
  margin="none"
77
- onBlur={handleBlur}
78
- onChange={handleChange}
79
70
  onClick={(e: MouseEvent<HTMLInputElement>) => e.stopPropagation()}
80
71
  placeholder={columnDef.header}
81
72
  value={value}
82
73
  variant="standard"
83
74
  {...textFieldProps}
75
+ onBlur={handleBlur}
76
+ onChange={handleChange}
84
77
  />
85
78
  );
86
79
  };