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