material-react-table 0.6.10 → 0.7.0-alpha.11

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 (104) hide show
  1. package/README.md +29 -21
  2. package/dist/MaterialReactTable.d.ts +311 -110
  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/footer/MRT_TableFooter.d.ts +3 -0
  19. package/dist/footer/MRT_TableFooterCell.d.ts +3 -2
  20. package/dist/footer/MRT_TableFooterRow.d.ts +2 -1
  21. package/dist/head/MRT_TableHead.d.ts +3 -0
  22. package/dist/head/MRT_TableHeadCell.d.ts +4 -18
  23. package/dist/head/MRT_TableHeadRow.d.ts +2 -1
  24. package/dist/icons.d.ts +1 -1
  25. package/dist/inputs/MRT_EditCellTextField.d.ts +2 -1
  26. package/dist/inputs/MRT_FilterTextField.d.ts +3 -2
  27. package/dist/inputs/MRT_SearchTextField.d.ts +2 -0
  28. package/dist/inputs/MRT_SelectCheckbox.d.ts +2 -1
  29. package/dist/localization.d.ts +8 -2
  30. package/dist/material-react-table.cjs.development.js +2253 -2482
  31. package/dist/material-react-table.cjs.development.js.map +1 -1
  32. package/dist/material-react-table.cjs.production.min.js +1 -1
  33. package/dist/material-react-table.cjs.production.min.js.map +1 -1
  34. package/dist/material-react-table.esm.js +2254 -2483
  35. package/dist/material-react-table.esm.js.map +1 -1
  36. package/dist/menus/MRT_ColumnActionMenu.d.ts +3 -2
  37. package/dist/menus/MRT_FilterTypeMenu.d.ts +4 -3
  38. package/dist/menus/MRT_RowActionMenu.d.ts +3 -2
  39. package/dist/menus/MRT_ShowHideColumnsMenu.d.ts +2 -0
  40. package/dist/menus/MRT_ShowHideColumnsMenuItems.d.ts +2 -1
  41. package/dist/table/MRT_Table.d.ts +3 -0
  42. package/dist/table/MRT_TableContainer.d.ts +2 -0
  43. package/dist/table/MRT_TablePaper.d.ts +7 -0
  44. package/dist/table/MRT_TableRoot.d.ts +3 -0
  45. package/dist/toolbar/MRT_LinearProgressBar.d.ts +2 -0
  46. package/dist/toolbar/MRT_TablePagination.d.ts +2 -0
  47. package/dist/toolbar/MRT_ToolbarAlertBanner.d.ts +2 -0
  48. package/dist/toolbar/MRT_ToolbarBottom.d.ts +2 -0
  49. package/dist/toolbar/MRT_ToolbarInternalButtons.d.ts +2 -0
  50. package/dist/toolbar/MRT_ToolbarTop.d.ts +4 -2
  51. package/dist/utils.d.ts +12 -2
  52. package/package.json +29 -30
  53. package/src/MaterialReactTable.tsx +615 -302
  54. package/src/body/MRT_TableBody.tsx +26 -22
  55. package/src/body/MRT_TableBodyCell.tsx +78 -60
  56. package/src/body/MRT_TableBodyRow.tsx +37 -76
  57. package/src/body/MRT_TableDetailPanel.tsx +21 -17
  58. package/src/buttons/MRT_CopyButton.tsx +14 -8
  59. package/src/buttons/MRT_EditActionButtons.tsx +16 -13
  60. package/src/buttons/MRT_ExpandAllButton.tsx +24 -9
  61. package/src/buttons/MRT_ExpandButton.tsx +22 -15
  62. package/src/buttons/MRT_FullScreenToggleButton.tsx +18 -11
  63. package/src/buttons/MRT_ShowHideColumnsButton.tsx +18 -7
  64. package/src/buttons/MRT_ToggleColumnActionMenuButton.tsx +22 -11
  65. package/src/buttons/MRT_ToggleDensePaddingButton.tsx +18 -11
  66. package/src/buttons/MRT_ToggleFiltersButton.tsx +16 -9
  67. package/src/buttons/MRT_ToggleRowActionMenuButton.tsx +30 -25
  68. package/src/buttons/MRT_ToggleSearchButton.tsx +24 -12
  69. package/src/footer/MRT_TableFooter.tsx +24 -8
  70. package/src/footer/MRT_TableFooterCell.tsx +34 -26
  71. package/src/footer/MRT_TableFooterRow.tsx +21 -39
  72. package/src/head/MRT_TableHead.tsx +24 -8
  73. package/src/head/MRT_TableHeadCell.tsx +183 -141
  74. package/src/head/MRT_TableHeadRow.tsx +16 -104
  75. package/src/icons.ts +3 -3
  76. package/src/inputs/MRT_EditCellTextField.tsx +36 -24
  77. package/src/inputs/MRT_FilterTextField.tsx +52 -31
  78. package/src/inputs/MRT_SearchTextField.tsx +46 -24
  79. package/src/inputs/MRT_SelectCheckbox.tsx +42 -30
  80. package/src/localization.ts +14 -2
  81. package/src/menus/MRT_ColumnActionMenu.tsx +128 -68
  82. package/src/menus/MRT_FilterTypeMenu.tsx +23 -20
  83. package/src/menus/MRT_RowActionMenu.tsx +22 -15
  84. package/src/menus/MRT_ShowHideColumnsMenu.tsx +52 -20
  85. package/src/menus/MRT_ShowHideColumnsMenuItems.tsx +27 -17
  86. package/src/table/MRT_Table.tsx +25 -15
  87. package/src/table/MRT_TableContainer.tsx +106 -45
  88. package/src/table/MRT_TablePaper.tsx +65 -0
  89. package/src/table/MRT_TableRoot.tsx +240 -0
  90. package/src/toolbar/MRT_LinearProgressBar.tsx +10 -7
  91. package/src/toolbar/MRT_TablePagination.tsx +33 -19
  92. package/src/toolbar/MRT_ToolbarAlertBanner.tsx +33 -20
  93. package/src/toolbar/MRT_ToolbarBottom.tsx +32 -21
  94. package/src/toolbar/MRT_ToolbarInternalButtons.tsx +35 -20
  95. package/src/toolbar/MRT_ToolbarTop.tsx +36 -29
  96. package/src/utils.ts +37 -8
  97. package/dist/head/MRT_TableHeadCellActions.d.ts +0 -5
  98. package/dist/table/MRT_TableSpacerCell.d.ts +0 -6
  99. package/dist/useMRT.d.ts +0 -28
  100. package/src/@types/faker.d.ts +0 -4
  101. package/src/@types/react-table-config.d.ts +0 -53
  102. package/src/head/MRT_TableHeadCellActions.tsx +0 -29
  103. package/src/table/MRT_TableSpacerCell.tsx +0 -20
  104. package/src/useMRT.tsx +0 -226
@@ -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,98 +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
+ enablePinning,
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 || (enablePinning && 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
- enableClickToCopy && !cell.column.disableClickToCopy ? (
82
- <MRT_CopyButton cell={cell}>
83
- {cell.render('Aggregated')}
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()}
84
106
  </MRT_CopyButton>
85
- ) : (
86
- cell.render('Aggregated')
87
- )
88
- ) : cell.isGrouped ? (
89
- <span>
90
- {cell.render('Cell')} ({cell.row.subRows.length})
91
- </span>
92
- ) : enableClickToCopy && !cell.column.disableClickToCopy ? (
93
- <MRT_CopyButton cell={cell}>{cell.render('Cell')}</MRT_CopyButton>
107
+ {row.getIsGrouped() && <> ({row.subRows?.length})</>}
108
+ </>
94
109
  ) : (
95
- cell.render('Cell')
110
+ <>
111
+ {cell.column?.Cell?.({ cell, tableInstance }) ?? cell.renderCell()}
112
+ {row.getIsGrouped() && <> ({row.subRows?.length})</>}
113
+ </>
96
114
  )}
97
115
  </TableCell>
98
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,55 +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
- {(enableRowActions || enableRowEditing) &&
61
- positionActionsColumn === 'first' && (
62
- <MRT_ToggleRowActionMenuButton row={row} />
63
- )}
64
- {(anyRowsCanExpand || renderDetailPanel) && (
65
- <TableCell
66
- size="small"
67
- sx={{
68
- ...commonTableBodyButtonCellStyles(densePadding),
69
- pl: `${row.depth + 0.5}rem`,
70
- textAlign: 'left',
71
- }}
72
- >
73
- <MRT_ExpandButton row={row} />
74
- </TableCell>
75
- )}
76
- {enableSelection && (
77
- <TableCell
78
- sx={{
79
- ...commonTableBodyButtonCellStyles(
80
- tableInstance.state.densePadding,
81
- ),
82
- maxWidth: '3rem',
83
- width: '3rem',
84
- }}
85
- >
86
- <MRT_SelectCheckbox row={row} />
87
- </TableCell>
88
- )}
89
- {enableRowNumbers && (
90
- <TableCell sx={{ ...commonTableBodyCellStyles(densePadding) }}>
91
- {row.index + 1}
92
- </TableCell>
93
- )}
94
- {row.cells.map((cell: MRT_Cell) => (
95
- <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
+ />
96
61
  ))}
97
- {(enableRowActions || enableRowEditing) &&
98
- positionActionsColumn === 'last' && (
99
- <MRT_ToggleRowActionMenuButton row={row} />
100
- )}
101
62
  </TableRow>
102
- {renderDetailPanel && !row.isGrouped && (
103
- <MRT_TableDetailPanel row={row} />
63
+ {renderDetailPanel && !getIsGrouped() && (
64
+ <MRT_TableDetailPanel row={row} tableInstance={tableInstance} />
104
65
  )}
105
66
  </>
106
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,31 +1,37 @@
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, children }) => {
11
- const { localization, muiTableBodyCellCopyButtonProps } = 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
 
21
27
  const mTableBodyCellCopyButtonProps =
22
28
  muiTableBodyCellCopyButtonProps instanceof Function
23
- ? muiTableBodyCellCopyButtonProps(cell)
29
+ ? muiTableBodyCellCopyButtonProps({ cell, tableInstance })
24
30
  : muiTableBodyCellCopyButtonProps;
25
31
 
26
32
  const mcTableBodyCellCopyButtonProps =
27
33
  cell.column.muiTableBodyCellCopyButtonProps instanceof Function
28
- ? cell.column.muiTableBodyCellCopyButtonProps(cell)
34
+ ? cell.column.muiTableBodyCellCopyButtonProps({ cell, tableInstance })
29
35
  : cell.column.muiTableBodyCellCopyButtonProps;
30
36
 
31
37
  const buttonProps = {
@@ -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
18
  },
19
- } = useMRT();
19
+ setCurrentEditingRow,
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,26 +1,41 @@
1
1
  import React, { FC } from 'react';
2
2
  import { IconButton } from '@mui/material';
3
- import { useMRT } from '../useMRT';
3
+ import { MRT_TableInstance } from '..';
4
4
 
5
- interface Props {}
5
+ interface Props {
6
+ tableInstance: MRT_TableInstance;
7
+ }
6
8
 
7
- export const MRT_ExpandAllButton: FC<Props> = () => {
9
+ export const MRT_ExpandAllButton: FC<Props> = ({ tableInstance }) => {
8
10
  const {
9
- anyRowsExpanded,
10
- icons: { DoubleArrowDownIcon },
11
- localization,
12
- tableInstance,
13
- } = 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();
14
23
 
15
24
  return (
16
25
  <IconButton
17
26
  aria-label={localization.expandAll}
27
+ disabled={isLoading}
18
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
+ }}
19
34
  >
20
35
  <DoubleArrowDownIcon
21
36
  style={{
22
37
  transform: `rotate(${
23
- tableInstance.isAllRowsExpanded ? -180 : anyRowsExpanded ? -90 : 0
38
+ getIsAllRowsExpanded() ? -180 : getIsSomeRowsExpanded() ? -90 : 0
24
39
  }deg)`,
25
40
  transition: 'transform 0.2s',
26
41
  }}
@@ -1,40 +1,47 @@
1
1
  import React, { FC, MouseEvent } from 'react';
2
2
  import { IconButton } 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_ExpandButton: FC<Props> = ({ row }) => {
10
+ export const MRT_ExpandButton: FC<Props> = ({ row, tableInstance }) => {
11
11
  const {
12
- icons: { ExpandMoreIcon },
13
- localization,
14
- onRowExpandChange,
15
- renderDetailPanel,
16
- } = useMRT();
12
+ getState,
13
+ options: {
14
+ icons: { ExpandMoreIcon },
15
+ localization,
16
+ onRowExpandChange,
17
+ renderDetailPanel,
18
+ },
19
+ } = tableInstance;
20
+
21
+ const { isDensePadding } = getState();
17
22
 
18
23
  const handleToggleExpand = (event: MouseEvent<HTMLButtonElement>) => {
19
- // @ts-ignore
20
- row.getToggleRowExpandedProps()?.onClick(event);
21
- onRowExpandChange?.(event, row);
24
+ row.toggleExpanded();
25
+ onRowExpandChange?.({ event, row, tableInstance });
22
26
  };
23
27
 
24
28
  return (
25
29
  <IconButton
26
30
  aria-label={localization.expand}
27
- disabled={!row.canExpand && !renderDetailPanel}
31
+ disabled={!row.getCanExpand() && !renderDetailPanel}
28
32
  title={localization.expand}
29
- {...row.getToggleRowExpandedProps()}
30
33
  onClick={handleToggleExpand}
34
+ sx={{
35
+ height: isDensePadding ? '1.75rem' : '2.25rem',
36
+ width: isDensePadding ? '1.75rem' : '2.25rem',
37
+ }}
31
38
  >
32
39
  <ExpandMoreIcon
33
40
  style={{
34
41
  transform: `rotate(${
35
- !row.canExpand && !renderDetailPanel
42
+ !row.getCanExpand() && !renderDetailPanel
36
43
  ? -90
37
- : row.isExpanded
44
+ : row.getIsExpanded()
38
45
  ? -180
39
46
  : 0
40
47
  }deg)`,