material-react-table 0.6.9 → 0.7.0-alpha.10

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 (108) hide show
  1. package/README.md +29 -19
  2. package/dist/MaterialReactTable.d.ts +314 -108
  3. package/dist/body/MRT_TableBody.d.ts +3 -0
  4. package/dist/body/MRT_TableBodyCell.d.ts +2 -11
  5. package/dist/body/MRT_TableBodyRow.d.ts +3 -1
  6. package/dist/body/MRT_TableDetailPanel.d.ts +2 -1
  7. package/dist/buttons/MRT_CopyButton.d.ts +2 -1
  8. package/dist/buttons/MRT_EditActionButtons.d.ts +2 -1
  9. package/dist/buttons/MRT_ExpandAllButton.d.ts +2 -0
  10. package/dist/buttons/MRT_ExpandButton.d.ts +2 -1
  11. package/dist/buttons/MRT_FullScreenToggleButton.d.ts +2 -0
  12. package/dist/buttons/MRT_ShowHideColumnsButton.d.ts +2 -0
  13. package/dist/buttons/MRT_ToggleColumnActionMenuButton.d.ts +3 -2
  14. package/dist/buttons/MRT_ToggleDensePaddingButton.d.ts +2 -0
  15. package/dist/buttons/MRT_ToggleFiltersButton.d.ts +2 -0
  16. package/dist/buttons/MRT_ToggleRowActionMenuButton.d.ts +2 -1
  17. package/dist/buttons/MRT_ToggleSearchButton.d.ts +2 -0
  18. package/dist/enums.d.ts +2 -1
  19. package/dist/filtersFNs.d.ts +13 -5
  20. package/dist/footer/MRT_TableFooter.d.ts +3 -0
  21. package/dist/footer/MRT_TableFooterCell.d.ts +3 -2
  22. package/dist/footer/MRT_TableFooterRow.d.ts +2 -1
  23. package/dist/head/MRT_TableHead.d.ts +3 -0
  24. package/dist/head/MRT_TableHeadCell.d.ts +4 -18
  25. package/dist/head/MRT_TableHeadRow.d.ts +2 -1
  26. package/dist/icons.d.ts +1 -1
  27. package/dist/inputs/MRT_EditCellTextField.d.ts +2 -1
  28. package/dist/inputs/MRT_FilterTextField.d.ts +3 -2
  29. package/dist/inputs/MRT_SearchTextField.d.ts +2 -0
  30. package/dist/inputs/MRT_SelectCheckbox.d.ts +2 -1
  31. package/dist/localization.d.ts +10 -2
  32. package/dist/material-react-table.cjs.development.js +2286 -2459
  33. package/dist/material-react-table.cjs.development.js.map +1 -1
  34. package/dist/material-react-table.cjs.production.min.js +1 -1
  35. package/dist/material-react-table.cjs.production.min.js.map +1 -1
  36. package/dist/material-react-table.esm.js +2288 -2461
  37. package/dist/material-react-table.esm.js.map +1 -1
  38. package/dist/menus/MRT_ColumnActionMenu.d.ts +3 -2
  39. package/dist/menus/MRT_FilterTypeMenu.d.ts +4 -3
  40. package/dist/menus/MRT_RowActionMenu.d.ts +3 -2
  41. package/dist/menus/MRT_ShowHideColumnsMenu.d.ts +2 -0
  42. package/dist/menus/MRT_ShowHideColumnsMenuItems.d.ts +2 -1
  43. package/dist/table/MRT_Table.d.ts +3 -0
  44. package/dist/table/MRT_TableContainer.d.ts +2 -0
  45. package/dist/table/MRT_TablePaper.d.ts +7 -0
  46. package/dist/table/MRT_TableRoot.d.ts +3 -0
  47. package/dist/toolbar/MRT_LinearProgressBar.d.ts +2 -0
  48. package/dist/toolbar/MRT_TablePagination.d.ts +2 -0
  49. package/dist/toolbar/MRT_ToolbarAlertBanner.d.ts +2 -0
  50. package/dist/toolbar/MRT_ToolbarBottom.d.ts +2 -0
  51. package/dist/toolbar/MRT_ToolbarInternalButtons.d.ts +2 -0
  52. package/dist/toolbar/MRT_ToolbarTop.d.ts +4 -2
  53. package/dist/utils.d.ts +12 -2
  54. package/package.json +29 -30
  55. package/src/MaterialReactTable.tsx +614 -297
  56. package/src/body/MRT_TableBody.tsx +26 -22
  57. package/src/body/MRT_TableBodyCell.tsx +79 -55
  58. package/src/body/MRT_TableBodyRow.tsx +37 -67
  59. package/src/body/MRT_TableDetailPanel.tsx +21 -17
  60. package/src/buttons/MRT_CopyButton.tsx +34 -10
  61. package/src/buttons/MRT_EditActionButtons.tsx +16 -13
  62. package/src/buttons/MRT_ExpandAllButton.tsx +36 -28
  63. package/src/buttons/MRT_ExpandButton.tsx +35 -41
  64. package/src/buttons/MRT_FullScreenToggleButton.tsx +18 -11
  65. package/src/buttons/MRT_ShowHideColumnsButton.tsx +18 -7
  66. package/src/buttons/MRT_ToggleColumnActionMenuButton.tsx +22 -11
  67. package/src/buttons/MRT_ToggleDensePaddingButton.tsx +18 -11
  68. package/src/buttons/MRT_ToggleFiltersButton.tsx +16 -9
  69. package/src/buttons/MRT_ToggleRowActionMenuButton.tsx +31 -26
  70. package/src/buttons/MRT_ToggleSearchButton.tsx +24 -12
  71. package/src/enums.ts +2 -1
  72. package/src/filtersFNs.ts +17 -3
  73. package/src/footer/MRT_TableFooter.tsx +24 -8
  74. package/src/footer/MRT_TableFooterCell.tsx +34 -26
  75. package/src/footer/MRT_TableFooterRow.tsx +21 -39
  76. package/src/head/MRT_TableHead.tsx +24 -8
  77. package/src/head/MRT_TableHeadCell.tsx +185 -142
  78. package/src/head/MRT_TableHeadRow.tsx +16 -93
  79. package/src/icons.ts +3 -3
  80. package/src/inputs/MRT_EditCellTextField.tsx +39 -24
  81. package/src/inputs/MRT_FilterTextField.tsx +53 -39
  82. package/src/inputs/MRT_SearchTextField.tsx +71 -25
  83. package/src/inputs/MRT_SelectCheckbox.tsx +42 -30
  84. package/src/localization.ts +20 -4
  85. package/src/menus/MRT_ColumnActionMenu.tsx +129 -69
  86. package/src/menus/MRT_FilterTypeMenu.tsx +55 -23
  87. package/src/menus/MRT_RowActionMenu.tsx +22 -15
  88. package/src/menus/MRT_ShowHideColumnsMenu.tsx +52 -20
  89. package/src/menus/MRT_ShowHideColumnsMenuItems.tsx +27 -17
  90. package/src/table/MRT_Table.tsx +25 -15
  91. package/src/table/MRT_TableContainer.tsx +106 -45
  92. package/src/table/MRT_TablePaper.tsx +65 -0
  93. package/src/table/MRT_TableRoot.tsx +239 -0
  94. package/src/toolbar/MRT_LinearProgressBar.tsx +10 -7
  95. package/src/toolbar/MRT_TablePagination.tsx +33 -19
  96. package/src/toolbar/MRT_ToolbarAlertBanner.tsx +33 -20
  97. package/src/toolbar/MRT_ToolbarBottom.tsx +32 -21
  98. package/src/toolbar/MRT_ToolbarInternalButtons.tsx +34 -20
  99. package/src/toolbar/MRT_ToolbarTop.tsx +36 -29
  100. package/src/utils.ts +37 -8
  101. package/dist/head/MRT_TableHeadCellActions.d.ts +0 -5
  102. package/dist/table/MRT_TableSpacerCell.d.ts +0 -6
  103. package/dist/useMRT.d.ts +0 -27
  104. package/src/@types/faker.d.ts +0 -4
  105. package/src/@types/react-table-config.d.ts +0 -53
  106. package/src/head/MRT_TableHeadCellActions.tsx +0 -29
  107. package/src/table/MRT_TableSpacerCell.tsx +0 -20
  108. package/src/useMRT.tsx +0 -215
@@ -1,41 +1,45 @@
1
1
  import React, { FC } from 'react';
2
2
  import { TableBody } from '@mui/material';
3
3
  import { MRT_TableBodyRow } from './MRT_TableBodyRow';
4
- import { useMRT } from '../useMRT';
5
- import type { MRT_Row } from '..';
4
+ import { MRT_TableInstance } from '..';
6
5
 
7
- interface Props {}
6
+ interface Props {
7
+ pinned: 'left' | 'center' | 'right' | 'none';
8
+ tableInstance: MRT_TableInstance;
9
+ }
8
10
 
9
- export const MRT_TableBody: FC<Props> = () => {
10
- const { tableInstance, muiTableBodyProps, manualPagination } = useMRT();
11
+ export const MRT_TableBody: FC<Props> = ({ pinned, tableInstance }) => {
12
+ const {
13
+ getPaginationRowModel,
14
+ getPrePaginationRowModel,
15
+ getTableBodyProps,
16
+ options: { enablePagination, muiTableBodyProps },
17
+ } = tableInstance;
11
18
 
12
- const rows = manualPagination ? tableInstance.rows : tableInstance.page;
19
+ const rows = enablePagination
20
+ ? getPaginationRowModel().rows
21
+ : getPrePaginationRowModel().rows;
13
22
 
14
23
  const mTableBodyProps =
15
24
  muiTableBodyProps instanceof Function
16
- ? muiTableBodyProps(tableInstance)
25
+ ? muiTableBodyProps({ tableInstance })
17
26
  : muiTableBodyProps;
18
27
 
19
28
  const tableBodyProps = {
29
+ ...getTableBodyProps(),
20
30
  ...mTableBodyProps,
21
- ...tableInstance.getTableBodyProps(),
22
- style: {
23
- ...tableInstance.getTableBodyProps().style,
24
- ...mTableBodyProps?.style,
25
- },
26
31
  };
27
32
 
28
33
  return (
29
- <TableBody
30
- {...tableBodyProps}
31
- sx={{
32
- ...tableBodyProps?.sx,
33
- }}
34
- >
35
- {rows.map((row: MRT_Row) => {
36
- tableInstance.prepareRow(row);
37
- return <MRT_TableBodyRow key={row.getRowProps().key} row={row} />;
38
- })}
34
+ <TableBody {...tableBodyProps}>
35
+ {rows.map((row) => (
36
+ <MRT_TableBodyRow
37
+ key={row.getRowProps().key}
38
+ pinned={pinned}
39
+ row={row}
40
+ tableInstance={tableInstance}
41
+ />
42
+ ))}
39
43
  </TableBody>
40
44
  );
41
45
  };
@@ -1,92 +1,116 @@
1
- import React, { FC, MouseEvent } from 'react';
2
- import { Skeleton, TableCell, TableCellProps } from '@mui/material';
3
- import { useMRT } from '../useMRT';
1
+ import React, { FC, MouseEvent, useMemo } from 'react';
2
+ import { Skeleton, TableCell } from '@mui/material';
4
3
  import { MRT_EditCellTextField } from '../inputs/MRT_EditCellTextField';
5
- import type { MRT_Cell } from '..';
4
+ import type { MRT_Cell, MRT_TableInstance } from '..';
6
5
  import { MRT_CopyButton } from '../buttons/MRT_CopyButton';
7
6
 
8
- export const commonTableBodyCellStyles = (densePadding: boolean) => ({
9
- p: densePadding ? '0.5rem' : '1rem',
10
- transition: 'all 0.2s ease-in-out',
11
- whiteSpace: densePadding ? 'nowrap' : 'normal',
12
- });
13
-
14
- export const commonTableBodyButtonCellStyles = (densePadding: boolean) => ({
15
- p: densePadding ? '1px' : '0.6rem',
16
- textAlign: 'center',
17
- transition: 'all 0.2s ease-in-out',
18
- });
19
-
20
7
  interface Props {
21
8
  cell: MRT_Cell;
9
+ tableInstance: MRT_TableInstance;
22
10
  }
23
11
 
24
- export const MRT_TableBodyCell: FC<Props> = ({ cell }) => {
12
+ export const MRT_TableBodyCell: FC<Props> = ({ cell, tableInstance }) => {
25
13
  const {
26
- enableClickToCopy,
27
- isLoading,
28
- muiTableBodyCellProps,
29
- muiTableBodyCellSkeletonProps,
30
- onCellClick,
31
- tableInstance: {
32
- state: { currentEditingRow, densePadding },
14
+ getIsSomeColumnsPinned,
15
+ getState,
16
+ options: {
17
+ enableClickToCopy,
18
+ enableColumnPinning,
19
+ enableEditing,
20
+ isLoading,
21
+ muiTableBodyCellProps,
22
+ muiTableBodyCellSkeletonProps,
23
+ onCellClick,
33
24
  },
34
- } = useMRT();
25
+ } = tableInstance;
26
+
27
+ const { currentEditingRow, isDensePadding } = getState();
28
+
29
+ const { column, row } = cell;
35
30
 
36
31
  const mTableCellBodyProps =
37
32
  muiTableBodyCellProps instanceof Function
38
- ? muiTableBodyCellProps(cell)
33
+ ? muiTableBodyCellProps({ cell, tableInstance })
39
34
  : muiTableBodyCellProps;
40
35
 
41
36
  const mcTableCellBodyProps =
42
- cell.column.muiTableBodyCellProps instanceof Function
43
- ? cell.column.muiTableBodyCellProps(cell)
44
- : cell.column.muiTableBodyCellProps;
37
+ column.muiTableBodyCellProps instanceof Function
38
+ ? column.muiTableBodyCellProps({ cell, tableInstance })
39
+ : column.muiTableBodyCellProps;
45
40
 
46
41
  const tableCellProps = {
42
+ ...cell.getCellProps(),
47
43
  ...mTableCellBodyProps,
48
44
  ...mcTableCellBodyProps,
49
- ...cell.getCellProps(),
50
- style: {
51
- ...cell.getCellProps().style,
52
- ...mTableCellBodyProps?.style,
53
- ...mcTableCellBodyProps?.style,
54
- },
55
45
  };
56
46
 
47
+ const skeletonWidth = useMemo(
48
+ () =>
49
+ column.columnDefType === 'display'
50
+ ? column.getWidth() / 2
51
+ : Math.random() * (column.getWidth() - column.getWidth() / 3) +
52
+ column.getWidth() / 3,
53
+ [column.columnDefType, column.getWidth()],
54
+ );
55
+
57
56
  return (
58
57
  <TableCell
59
58
  onClick={(event: MouseEvent<HTMLTableCellElement>) =>
60
- onCellClick?.(event, cell)
59
+ onCellClick?.({ event, cell, tableInstance })
61
60
  }
62
61
  {...tableCellProps}
63
- sx={
64
- {
65
- ...commonTableBodyCellStyles(densePadding),
66
- ...tableCellProps?.sx,
67
- } as TableCellProps['sx']
68
- }
62
+ sx={{
63
+ p: isDensePadding
64
+ ? column.columnDefType === 'display'
65
+ ? '0 0.5rem'
66
+ : '0.5rem'
67
+ : column.columnDefType === 'display'
68
+ ? '0.5rem 0.75rem'
69
+ : '1rem',
70
+ pl:
71
+ column.id === 'mrt-expand'
72
+ ? `${row.depth + (isDensePadding ? 0.5 : 0.75)}rem`
73
+ : undefined,
74
+ transition: 'all 0.2s ease-in-out',
75
+ whiteSpace:
76
+ isDensePadding || (enableColumnPinning && getIsSomeColumnsPinned())
77
+ ? 'nowrap'
78
+ : 'normal',
79
+ //@ts-ignore
80
+ ...tableCellProps?.sx,
81
+ }}
69
82
  >
70
83
  {isLoading ? (
71
84
  <Skeleton
72
85
  animation="wave"
73
86
  height={20}
74
- width={Math.random() * (120 - 60) + 60}
87
+ width={skeletonWidth}
75
88
  {...muiTableBodyCellSkeletonProps}
76
89
  />
77
- ) : !cell.column.disableEditing &&
78
- currentEditingRow?.id === cell.row.id ? (
79
- <MRT_EditCellTextField cell={cell} />
80
- ) : cell.isPlaceholder ? null : cell.isAggregated ? (
81
- cell.render('Aggregated')
82
- ) : cell.isGrouped ? (
83
- <span>
84
- {cell.render('Cell')} ({cell.row.subRows.length})
85
- </span>
86
- ) : enableClickToCopy && !cell.column.disableClickToCopy ? (
87
- <MRT_CopyButton cell={cell} />
90
+ ) : column.columnDefType === 'display' ? (
91
+ column.Cell?.({ cell, tableInstance })
92
+ ) : cell.getIsPlaceholder() ||
93
+ (row.getIsGrouped() &&
94
+ column.id !==
95
+ row.groupingColumnId) ? null : cell.getIsAggregated() ? (
96
+ cell.renderAggregatedCell()
97
+ ) : enableEditing &&
98
+ column.enableEditing !== false &&
99
+ currentEditingRow?.id === row.id ? (
100
+ <MRT_EditCellTextField cell={cell} tableInstance={tableInstance} />
101
+ ) : (enableClickToCopy || column.enableClickToCopy) &&
102
+ column.enableClickToCopy !== false ? (
103
+ <>
104
+ <MRT_CopyButton cell={cell} tableInstance={tableInstance}>
105
+ {cell.column?.Cell?.({ cell, tableInstance }) ?? cell.renderCell()}
106
+ </MRT_CopyButton>
107
+ {row.getIsGrouped() && <> ({row.subRows?.length})</>}
108
+ </>
88
109
  ) : (
89
- cell.render('Cell')
110
+ <>
111
+ {cell.column?.Cell?.({ cell, tableInstance }) ?? cell.renderCell()}
112
+ {row.getIsGrouped() && <> ({row.subRows?.length})</>}
113
+ </>
90
114
  )}
91
115
  </TableCell>
92
116
  );
@@ -1,50 +1,45 @@
1
1
  import React, { FC, MouseEvent } from 'react';
2
- import { TableCell, TableRow } from '@mui/material';
3
- import {
4
- commonTableBodyButtonCellStyles,
5
- commonTableBodyCellStyles,
6
- MRT_TableBodyCell,
7
- } from './MRT_TableBodyCell';
8
- import { useMRT } from '../useMRT';
2
+ import { TableRow } from '@mui/material';
3
+ import { MRT_TableBodyCell } from './MRT_TableBodyCell';
9
4
  import { MRT_TableDetailPanel } from './MRT_TableDetailPanel';
10
- import { MRT_ExpandButton } from '../buttons/MRT_ExpandButton';
11
- import { MRT_SelectCheckbox } from '../inputs/MRT_SelectCheckbox';
12
- import { MRT_ToggleRowActionMenuButton } from '../buttons/MRT_ToggleRowActionMenuButton';
13
- import type { MRT_Cell, MRT_Row } from '..';
5
+ import type { MRT_Row, MRT_TableInstance } from '..';
14
6
 
15
7
  interface Props {
8
+ pinned: 'left' | 'center' | 'right' | 'none';
16
9
  row: MRT_Row;
10
+ tableInstance: MRT_TableInstance;
17
11
  }
18
12
 
19
- export const MRT_TableBodyRow: FC<Props> = ({ row }) => {
13
+ export const MRT_TableBodyRow: FC<Props> = ({ pinned, row, tableInstance }) => {
20
14
  const {
21
- anyRowsCanExpand,
22
- enableRowActions,
23
- enableRowEditing,
24
- enableRowNumbers,
25
- enableSelection,
26
- muiTableBodyRowProps,
27
- onRowClick,
28
- positionActionsColumn,
29
- renderDetailPanel,
30
- tableInstance,
31
- tableInstance: {
32
- state: { densePadding },
33
- },
34
- } = useMRT();
15
+ options: { muiTableBodyRowProps, onRowClick, renderDetailPanel },
16
+ } = tableInstance;
17
+
18
+ const {
19
+ getCenterVisibleCells,
20
+ getIsGrouped,
21
+ getIsSelected,
22
+ getLeftVisibleCells,
23
+ getRightVisibleCells,
24
+ getRowProps,
25
+ getVisibleCells,
26
+ } = row;
35
27
 
36
28
  const mTableBodyRowProps =
37
29
  muiTableBodyRowProps instanceof Function
38
- ? muiTableBodyRowProps(row)
30
+ ? muiTableBodyRowProps({ row, tableInstance })
39
31
  : muiTableBodyRowProps;
40
32
 
41
33
  const tableRowProps = {
34
+ ...getRowProps(),
42
35
  ...mTableBodyRowProps,
43
- ...row.getRowProps(),
44
- style: {
45
- ...row.getRowProps().style,
46
- ...mTableBodyRowProps?.style,
47
- },
36
+ };
37
+
38
+ const getVisibleCellsMap = {
39
+ center: getCenterVisibleCells,
40
+ left: getLeftVisibleCells,
41
+ none: getVisibleCells,
42
+ right: getRightVisibleCells,
48
43
  };
49
44
 
50
45
  return (
@@ -52,46 +47,21 @@ export const MRT_TableBodyRow: FC<Props> = ({ row }) => {
52
47
  <TableRow
53
48
  hover
54
49
  onClick={(event: MouseEvent<HTMLTableRowElement>) =>
55
- onRowClick?.(event, row)
50
+ onRowClick?.({ event, row, tableInstance })
56
51
  }
57
- selected={row.isSelected}
52
+ selected={getIsSelected()}
58
53
  {...tableRowProps}
59
54
  >
60
- {enableRowNumbers && (
61
- <TableCell sx={{ ...commonTableBodyCellStyles(densePadding) }}>
62
- {row.index + 1}
63
- </TableCell>
64
- )}
65
- {(enableRowActions || enableRowEditing) &&
66
- positionActionsColumn === 'first' && (
67
- <MRT_ToggleRowActionMenuButton row={row} />
68
- )}
69
- {(anyRowsCanExpand || renderDetailPanel) && (
70
- <MRT_ExpandButton row={row} />
71
- )}
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
- )}
85
- {row.cells.map((cell: MRT_Cell) => (
86
- <MRT_TableBodyCell key={cell.getCellProps().key} cell={cell} />
55
+ {getVisibleCellsMap[pinned]().map((cell) => (
56
+ <MRT_TableBodyCell
57
+ cell={cell}
58
+ key={cell.getCellProps().key}
59
+ tableInstance={tableInstance}
60
+ />
87
61
  ))}
88
- {(enableRowActions || enableRowEditing) &&
89
- positionActionsColumn === 'last' && (
90
- <MRT_ToggleRowActionMenuButton row={row} />
91
- )}
92
62
  </TableRow>
93
- {renderDetailPanel && !row.isGrouped && (
94
- <MRT_TableDetailPanel row={row} />
63
+ {renderDetailPanel && !getIsGrouped() && (
64
+ <MRT_TableDetailPanel row={row} tableInstance={tableInstance} />
95
65
  )}
96
66
  </>
97
67
  );
@@ -1,48 +1,52 @@
1
1
  import React, { FC, MouseEvent } from 'react';
2
2
  import { Collapse, TableCell, TableRow } from '@mui/material';
3
- import { useMRT } from '../useMRT';
4
- import type { MRT_Row } from '..';
3
+ import type { MRT_Row, MRT_TableInstance } from '..';
5
4
 
6
5
  interface Props {
7
6
  row: MRT_Row;
7
+ tableInstance: MRT_TableInstance;
8
8
  }
9
9
 
10
- export const MRT_TableDetailPanel: FC<Props> = ({ row }) => {
10
+ export const MRT_TableDetailPanel: FC<Props> = ({ row, tableInstance }) => {
11
11
  const {
12
- muiTableBodyRowProps,
13
- muiTableDetailPanelProps,
14
- onDetailPanelClick,
15
- renderDetailPanel,
16
- tableInstance,
17
- } = useMRT();
12
+ getVisibleFlatColumns,
13
+ options: {
14
+ muiTableBodyRowProps,
15
+ muiTableDetailPanelProps,
16
+ onDetailPanelClick,
17
+ renderDetailPanel,
18
+ },
19
+ } = tableInstance;
18
20
 
19
21
  const tableRowProps =
20
22
  muiTableBodyRowProps instanceof Function
21
- ? muiTableBodyRowProps(row)
23
+ ? muiTableBodyRowProps({ row, tableInstance })
22
24
  : muiTableBodyRowProps;
23
25
 
24
26
  const tableCellProps =
25
27
  muiTableDetailPanelProps instanceof Function
26
- ? muiTableDetailPanelProps(row)
28
+ ? muiTableDetailPanelProps({ row, tableInstance })
27
29
  : muiTableDetailPanelProps;
28
30
 
29
31
  return (
30
32
  <TableRow {...tableRowProps}>
31
33
  <TableCell
32
- colSpan={tableInstance.visibleColumns.length + 10}
34
+ colSpan={getVisibleFlatColumns().length + 10}
33
35
  onClick={(event: MouseEvent<HTMLTableCellElement>) =>
34
- onDetailPanelClick?.(event, row)
36
+ onDetailPanelClick?.({ event, row, tableInstance })
35
37
  }
36
38
  {...tableCellProps}
37
39
  sx={{
38
- borderBottom: !row.isExpanded ? 'none' : undefined,
39
- pb: row.isExpanded ? '1rem' : 0,
40
- pt: row.isExpanded ? '1rem' : 0,
40
+ borderBottom: !row.getIsExpanded() ? 'none' : undefined,
41
+ pb: row.getIsExpanded() ? '1rem' : 0,
42
+ pt: row.getIsExpanded() ? '1rem' : 0,
41
43
  transition: 'all 0.2s ease-in-out',
42
44
  ...tableCellProps?.sx,
43
45
  }}
44
46
  >
45
- <Collapse in={row.isExpanded}>{renderDetailPanel?.(row)}</Collapse>
47
+ <Collapse in={row.getIsExpanded()}>
48
+ {renderDetailPanel?.({ row, tableInstance })}
49
+ </Collapse>
46
50
  </TableCell>
47
51
  </TableRow>
48
52
  );
@@ -1,23 +1,44 @@
1
1
  import React, { FC, useState } from 'react';
2
2
  import { Button, Tooltip } from '@mui/material';
3
- import { useMRT } from '../useMRT';
4
- import { MRT_Cell } from '..';
3
+ import { MRT_Cell, MRT_TableInstance } from '..';
5
4
 
6
5
  interface Props {
7
6
  cell: MRT_Cell;
7
+ tableInstance: MRT_TableInstance;
8
8
  }
9
9
 
10
- export const MRT_CopyButton: FC<Props> = ({ cell }) => {
11
- const { localization } = useMRT();
10
+ export const MRT_CopyButton: FC<Props> = ({
11
+ cell,
12
+ children,
13
+ tableInstance,
14
+ }) => {
15
+ const {
16
+ options: { localization, muiTableBodyCellCopyButtonProps },
17
+ } = tableInstance;
12
18
 
13
19
  const [copied, setCopied] = useState(false);
14
20
 
15
- const handleCopy = (text: string) => {
16
- navigator.clipboard.writeText(text);
21
+ const handleCopy = (text: unknown) => {
22
+ navigator.clipboard.writeText(text as string);
17
23
  setCopied(true);
18
24
  setTimeout(() => setCopied(false), 4000);
19
25
  };
20
26
 
27
+ const mTableBodyCellCopyButtonProps =
28
+ muiTableBodyCellCopyButtonProps instanceof Function
29
+ ? muiTableBodyCellCopyButtonProps({ cell, tableInstance })
30
+ : muiTableBodyCellCopyButtonProps;
31
+
32
+ const mcTableBodyCellCopyButtonProps =
33
+ cell.column.muiTableBodyCellCopyButtonProps instanceof Function
34
+ ? cell.column.muiTableBodyCellCopyButtonProps({ cell, tableInstance })
35
+ : cell.column.muiTableBodyCellCopyButtonProps;
36
+
37
+ const buttonProps = {
38
+ ...mTableBodyCellCopyButtonProps,
39
+ ...mcTableBodyCellCopyButtonProps,
40
+ };
41
+
21
42
  return (
22
43
  <Tooltip
23
44
  arrow
@@ -30,20 +51,23 @@ export const MRT_CopyButton: FC<Props> = ({ cell }) => {
30
51
  aria-label={localization.clickToCopy}
31
52
  onClick={() => handleCopy(cell.value)}
32
53
  size="small"
54
+ {...buttonProps}
33
55
  sx={{
34
56
  backgroundColor: 'transparent',
57
+ border: 'none',
35
58
  color: 'inherit',
36
- letterSpacing: 'inherit',
37
59
  fontFamily: 'inherit',
38
60
  fontSize: 'inherit',
61
+ letterSpacing: 'inherit',
39
62
  m: '-0.25rem',
40
- textTransform: 'inherit',
41
- textAlign: 'inherit',
42
63
  minWidth: 'unset',
64
+ textAlign: 'inherit',
65
+ textTransform: 'inherit',
66
+ ...buttonProps?.sx,
43
67
  }}
44
68
  variant="text"
45
69
  >
46
- {cell.render('Cell')}
70
+ {children}
47
71
  </Button>
48
72
  </Tooltip>
49
73
  );
@@ -1,30 +1,33 @@
1
1
  import React, { FC } from 'react';
2
2
  import { Box, IconButton, Tooltip } from '@mui/material';
3
- import { useMRT } from '../useMRT';
4
- import type { MRT_Row } from '..';
3
+ import type { MRT_Row, MRT_TableInstance } from '..';
4
+ import { RowValues } from '@tanstack/react-table';
5
5
 
6
6
  interface Props {
7
7
  row: MRT_Row;
8
+ tableInstance: MRT_TableInstance;
8
9
  }
9
10
 
10
- export const MRT_EditActionButtons: FC<Props> = ({ row }) => {
11
+ export const MRT_EditActionButtons: FC<Props> = ({ row, tableInstance }) => {
11
12
  const {
12
- icons: { CancelIcon, SaveIcon },
13
- localization,
14
- onRowEditSubmit,
15
- setCurrentEditingRow,
16
- tableInstance: {
17
- state: { currentEditingRow },
13
+ getState,
14
+ options: {
15
+ icons: { CancelIcon, SaveIcon },
16
+ localization,
17
+ onEditSubmit,
18
+ setCurrentEditingRow,
18
19
  },
19
- } = useMRT();
20
+ } = tableInstance;
21
+
22
+ const { currentEditingRow } = getState();
20
23
 
21
24
  const handleCancel = () => {
22
- row.values = row.original;
25
+ row.values = (row.original as RowValues) ?? {};
23
26
  setCurrentEditingRow(null);
24
27
  };
25
28
 
26
- const handleSave = async () => {
27
- await onRowEditSubmit?.(currentEditingRow ?? row);
29
+ const handleSave = () => {
30
+ onEditSubmit?.({ row: currentEditingRow ?? row, tableInstance });
28
31
  setCurrentEditingRow(null);
29
32
  };
30
33
 
@@ -1,37 +1,45 @@
1
1
  import React, { FC } from 'react';
2
- import { IconButton, TableCell } from '@mui/material';
3
- import { useMRT } from '../useMRT';
4
- import { commonTableBodyButtonCellStyles } from '../body/MRT_TableBodyCell';
2
+ import { IconButton } from '@mui/material';
3
+ import { MRT_TableInstance } from '..';
5
4
 
6
- interface Props {}
5
+ interface Props {
6
+ tableInstance: MRT_TableInstance;
7
+ }
7
8
 
8
- export const MRT_ExpandAllButton: FC<Props> = () => {
9
+ export const MRT_ExpandAllButton: FC<Props> = ({ tableInstance }) => {
9
10
  const {
10
- anyRowsExpanded,
11
- icons: { DoubleArrowDownIcon },
12
- localization,
13
- tableInstance,
14
- } = useMRT();
11
+ getIsAllRowsExpanded,
12
+ getIsSomeRowsExpanded,
13
+ getState,
14
+ options: {
15
+ icons: { DoubleArrowDownIcon },
16
+ isLoading,
17
+ localization,
18
+ },
19
+ toggleAllRowsExpanded,
20
+ } = tableInstance;
21
+
22
+ const { isDensePadding } = getState();
15
23
 
16
24
  return (
17
- <TableCell
18
- size="small"
19
- {...tableInstance.getToggleAllRowsExpandedProps()}
20
- sx={commonTableBodyButtonCellStyles(tableInstance.state.densePadding)}
25
+ <IconButton
26
+ aria-label={localization.expandAll}
27
+ disabled={isLoading}
28
+ title={localization.expandAll}
29
+ onClick={() => toggleAllRowsExpanded(!getIsAllRowsExpanded())}
30
+ sx={{
31
+ height: isDensePadding ? '1.75rem' : '2.25rem',
32
+ width: isDensePadding ? '1.75rem' : '2.25rem',
33
+ }}
21
34
  >
22
- <IconButton
23
- aria-label={localization.expandAll}
24
- title={localization.expandAll}
25
- >
26
- <DoubleArrowDownIcon
27
- style={{
28
- transform: `rotate(${
29
- tableInstance.isAllRowsExpanded ? -180 : anyRowsExpanded ? -90 : 0
30
- }deg)`,
31
- transition: 'transform 0.2s',
32
- }}
33
- />
34
- </IconButton>
35
- </TableCell>
35
+ <DoubleArrowDownIcon
36
+ style={{
37
+ transform: `rotate(${
38
+ getIsAllRowsExpanded() ? -180 : getIsSomeRowsExpanded() ? -90 : 0
39
+ }deg)`,
40
+ transition: 'transform 0.2s',
41
+ }}
42
+ />
43
+ </IconButton>
36
44
  );
37
45
  };