material-react-table 0.6.8 → 0.6.9

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.6.8",
2
+ "version": "0.6.9",
3
3
  "license": "MIT",
4
4
  "name": "material-react-table",
5
5
  "description": "A fully featured Material-UI implementation of react-table, inspired by material-table and the mui DataGrid, written from the ground up in TypeScript.",
@@ -1,6 +1,7 @@
1
1
  import React, { ChangeEvent, FC, MouseEvent, ReactNode } from 'react';
2
2
  import {
3
3
  AlertProps,
4
+ CheckboxProps,
4
5
  IconButtonProps,
5
6
  LinearProgressProps,
6
7
  SkeletonProps,
@@ -260,6 +261,13 @@ export type MaterialReactTableProps<D extends {} = {}> = UseTableOptions<D> &
260
261
  | LinearProgressProps
261
262
  | ((tableInstance: MRT_TableInstance) => LinearProgressProps);
262
263
  muiSearchTextFieldProps?: TextFieldProps;
264
+ muiSelectCheckboxProps?:
265
+ | CheckboxProps
266
+ | ((
267
+ isSelectAll?: boolean,
268
+ row?: MRT_Row<D>,
269
+ tableInstance?: MRT_TableInstance<D>,
270
+ ) => CheckboxProps);
263
271
  muiTableBodyCellEditTextFieldProps?:
264
272
  | TextFieldProps
265
273
  | ((cell?: MRT_Cell<D>) => TextFieldProps);
@@ -282,15 +290,15 @@ export type MaterialReactTableProps<D extends {} = {}> = UseTableOptions<D> &
282
290
  muiTableFooterCellProps?:
283
291
  | TableCellProps
284
292
  | ((column: Column<D>) => TableCellProps);
285
- muiTableHeadCellColumnActionsButtonProps?:
286
- | IconButtonProps
287
- | ((column: Column<D>) => IconButtonProps);
288
293
  muiTableFooterProps?:
289
294
  | TableFooterProps
290
295
  | ((tableInstance: MRT_TableInstance<D>) => TableFooterProps);
291
296
  muiTableFooterRowProps?:
292
297
  | TableRowProps
293
298
  | ((footerGroup: MRT_HeaderGroup<D>) => TableRowProps);
299
+ muiTableHeadCellColumnActionsButtonProps?:
300
+ | IconButtonProps
301
+ | ((column: Column<D>) => IconButtonProps);
294
302
  muiTableHeadCellFilterTextFieldProps?:
295
303
  | TextFieldProps
296
304
  | ((column: Column<D>) => TextFieldProps);
@@ -336,7 +344,7 @@ export type MaterialReactTableProps<D extends {} = {}> = UseTableOptions<D> &
336
344
  event: MouseEvent<HTMLButtonElement>,
337
345
  row: Row<D>,
338
346
  ) => void;
339
- onRowSelectChange?: (
347
+ onSelectChange?: (
340
348
  event: ChangeEvent,
341
349
  row: Row<D>,
342
350
  selectedRows: Row<D>[],
@@ -1,6 +1,7 @@
1
1
  import React, { FC, MouseEvent } from 'react';
2
2
  import { TableCell, TableRow } from '@mui/material';
3
3
  import {
4
+ commonTableBodyButtonCellStyles,
4
5
  commonTableBodyCellStyles,
5
6
  MRT_TableBodyCell,
6
7
  } from './MRT_TableBodyCell';
@@ -26,6 +27,7 @@ export const MRT_TableBodyRow: FC<Props> = ({ row }) => {
26
27
  onRowClick,
27
28
  positionActionsColumn,
28
29
  renderDetailPanel,
30
+ tableInstance,
29
31
  tableInstance: {
30
32
  state: { densePadding },
31
33
  },
@@ -67,7 +69,19 @@ export const MRT_TableBodyRow: FC<Props> = ({ row }) => {
67
69
  {(anyRowsCanExpand || renderDetailPanel) && (
68
70
  <MRT_ExpandButton row={row} />
69
71
  )}
70
- {enableSelection && <MRT_SelectCheckbox row={row} />}
72
+ {enableSelection && (
73
+ <TableCell
74
+ sx={{
75
+ ...commonTableBodyButtonCellStyles(
76
+ tableInstance.state.densePadding,
77
+ ),
78
+ maxWidth: '3rem',
79
+ width: '3rem',
80
+ }}
81
+ >
82
+ <MRT_SelectCheckbox row={row} />
83
+ </TableCell>
84
+ )}
71
85
  {row.cells.map((cell: MRT_Cell) => (
72
86
  <MRT_TableBodyCell key={cell.getCellProps().key} cell={cell} />
73
87
  ))}
@@ -4,6 +4,7 @@ import {
4
4
  commonTableHeadCellStyles,
5
5
  MRT_TableHeadCell,
6
6
  } from './MRT_TableHeadCell';
7
+ import { commonTableBodyButtonCellStyles } from '../body/MRT_TableBodyCell';
7
8
  import { useMRT } from '../useMRT';
8
9
  import { MRT_SelectCheckbox } from '../inputs/MRT_SelectCheckbox';
9
10
  import { MRT_ExpandAllButton } from '../buttons/MRT_ExpandAllButton';
@@ -83,7 +84,17 @@ export const MRT_TableHeadRow: FC<Props> = ({ headerGroup }) => {
83
84
  ) : null}
84
85
  {enableSelection ? (
85
86
  !isParentHeader && !disableSelectAll ? (
86
- <MRT_SelectCheckbox selectAll />
87
+ <TableCell
88
+ sx={{
89
+ ...commonTableBodyButtonCellStyles(
90
+ tableInstance.state.densePadding,
91
+ ),
92
+ maxWidth: '3rem',
93
+ width: '3rem',
94
+ }}
95
+ >
96
+ <MRT_SelectCheckbox selectAll />
97
+ </TableCell>
87
98
  ) : (
88
99
  <MRT_TableSpacerCell width="1rem" />
89
100
  )
@@ -1,8 +1,7 @@
1
1
  import React, { ChangeEvent, FC } from 'react';
2
- import { Checkbox, TableCell, Tooltip } from '@mui/material';
2
+ import { Checkbox, Tooltip } from '@mui/material';
3
3
  import { useMRT } from '../useMRT';
4
4
  import type { MRT_Row } from '..';
5
- import { commonTableBodyButtonCellStyles } from '../body/MRT_TableBodyCell';
6
5
 
7
6
  interface Props {
8
7
  row?: MRT_Row;
@@ -10,52 +9,76 @@ interface Props {
10
9
  }
11
10
 
12
11
  export const MRT_SelectCheckbox: FC<Props> = ({ row, selectAll }) => {
13
- const { localization, onRowSelectChange, onSelectAllChange, tableInstance } =
14
- useMRT();
12
+ const {
13
+ localization,
14
+ muiSelectCheckboxProps,
15
+ onSelectChange,
16
+ onSelectAllChange,
17
+ tableInstance,
18
+ tableInstance: {
19
+ state: { densePadding },
20
+ },
21
+ } = useMRT();
15
22
 
16
- const onSelectChange = (event: ChangeEvent<HTMLInputElement>) => {
23
+ const handleSelectChange = (event: ChangeEvent<HTMLInputElement>) => {
17
24
  if (selectAll) {
18
25
  tableInstance?.getToggleAllRowsSelectedProps?.()?.onChange?.(event);
19
- onSelectAllChange?.(event, tableInstance.selectedFlatRows);
26
+ onSelectAllChange?.(
27
+ event,
28
+ event.target.checked ? tableInstance.rows : [],
29
+ );
20
30
  } else if (row) {
21
31
  row?.getToggleRowSelectedProps()?.onChange?.(event);
22
- onRowSelectChange?.(event, row, tableInstance.selectedFlatRows);
32
+ onSelectChange?.(
33
+ event,
34
+ row,
35
+ event.target.checked
36
+ ? [...tableInstance.selectedFlatRows, row]
37
+ : tableInstance.selectedFlatRows.filter(
38
+ (selectedRow) => selectedRow.id !== row.id,
39
+ ),
40
+ );
23
41
  }
24
42
  };
25
43
 
26
- const checkboxProps = selectAll
44
+ const mTableBodyRowSelectCheckboxProps =
45
+ muiSelectCheckboxProps instanceof Function
46
+ ? muiSelectCheckboxProps(selectAll, row, tableInstance)
47
+ : muiSelectCheckboxProps;
48
+
49
+ const rtSelectCheckboxProps = selectAll
27
50
  ? tableInstance.getToggleAllRowsSelectedProps()
28
51
  : row?.getToggleRowSelectedProps();
29
52
 
53
+ const checkboxProps = {
54
+ ...mTableBodyRowSelectCheckboxProps,
55
+ ...rtSelectCheckboxProps,
56
+ style: {
57
+ ...rtSelectCheckboxProps?.style,
58
+ ...mTableBodyRowSelectCheckboxProps?.style,
59
+ },
60
+ };
61
+
30
62
  return (
31
- <TableCell
32
- sx={{
33
- ...commonTableBodyButtonCellStyles(tableInstance.state.densePadding),
34
- maxWidth: '2rem',
35
- width: '2rem',
36
- }}
63
+ <Tooltip
64
+ arrow
65
+ enterDelay={1000}
66
+ enterNextDelay={1000}
67
+ title={
68
+ selectAll ? localization.toggleSelectAll : localization.toggleSelectRow
69
+ }
37
70
  >
38
- <Tooltip
39
- arrow
40
- enterDelay={1000}
41
- enterNextDelay={1000}
42
- title={
43
- selectAll
71
+ <Checkbox
72
+ inputProps={{
73
+ 'aria-label': selectAll
44
74
  ? localization.toggleSelectAll
45
- : localization.toggleSelectRow
46
- }
47
- >
48
- <Checkbox
49
- inputProps={{
50
- 'aria-label': selectAll
51
- ? localization.toggleSelectAll
52
- : localization.toggleSelectRow,
53
- }}
54
- onChange={onSelectChange}
55
- {...checkboxProps}
56
- title={undefined}
57
- />
58
- </Tooltip>
59
- </TableCell>
75
+ : localization.toggleSelectRow,
76
+ }}
77
+ size={densePadding ? 'small' : 'medium'}
78
+ {...checkboxProps}
79
+ onChange={handleSelectChange}
80
+ title={undefined}
81
+ />
82
+ </Tooltip>
60
83
  );
61
84
  };