material-react-table 0.6.10 → 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 (103) hide show
  1. package/dist/MaterialReactTable.d.ts +142 -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/footer/MRT_TableFooter.d.ts +3 -0
  18. package/dist/footer/MRT_TableFooterCell.d.ts +3 -2
  19. package/dist/footer/MRT_TableFooterRow.d.ts +2 -1
  20. package/dist/head/MRT_TableHead.d.ts +3 -0
  21. package/dist/head/MRT_TableHeadCell.d.ts +4 -18
  22. package/dist/head/MRT_TableHeadRow.d.ts +2 -1
  23. package/dist/icons.d.ts +1 -1
  24. package/dist/inputs/MRT_EditCellTextField.d.ts +2 -1
  25. package/dist/inputs/MRT_FilterTextField.d.ts +3 -2
  26. package/dist/inputs/MRT_SearchTextField.d.ts +2 -0
  27. package/dist/inputs/MRT_SelectCheckbox.d.ts +2 -1
  28. package/dist/localization.d.ts +7 -2
  29. package/dist/material-react-table.cjs.development.js +2142 -1729
  30. package/dist/material-react-table.cjs.development.js.map +1 -1
  31. package/dist/material-react-table.cjs.production.min.js +1 -1
  32. package/dist/material-react-table.cjs.production.min.js.map +1 -1
  33. package/dist/material-react-table.esm.js +2143 -1730
  34. package/dist/material-react-table.esm.js.map +1 -1
  35. package/dist/menus/MRT_ColumnActionMenu.d.ts +3 -2
  36. package/dist/menus/MRT_FilterTypeMenu.d.ts +4 -3
  37. package/dist/menus/MRT_RowActionMenu.d.ts +3 -2
  38. package/dist/menus/MRT_ShowHideColumnsMenu.d.ts +2 -0
  39. package/dist/menus/MRT_ShowHideColumnsMenuItems.d.ts +2 -1
  40. package/dist/table/MRT_Table.d.ts +3 -0
  41. package/dist/table/MRT_TableContainer.d.ts +2 -0
  42. package/dist/table/MRT_TablePaper.d.ts +7 -0
  43. package/dist/table/MRT_TableRoot.d.ts +3 -0
  44. package/dist/toolbar/MRT_LinearProgressBar.d.ts +2 -0
  45. package/dist/toolbar/MRT_TablePagination.d.ts +2 -0
  46. package/dist/toolbar/MRT_ToolbarAlertBanner.d.ts +2 -0
  47. package/dist/toolbar/MRT_ToolbarBottom.d.ts +2 -0
  48. package/dist/toolbar/MRT_ToolbarInternalButtons.d.ts +2 -0
  49. package/dist/toolbar/MRT_ToolbarTop.d.ts +4 -2
  50. package/dist/utils.d.ts +12 -2
  51. package/package.json +27 -28
  52. package/src/MaterialReactTable.tsx +298 -242
  53. package/src/body/MRT_TableBody.tsx +25 -21
  54. package/src/body/MRT_TableBodyCell.tsx +73 -58
  55. package/src/body/MRT_TableBodyRow.tsx +35 -74
  56. package/src/body/MRT_TableDetailPanel.tsx +16 -14
  57. package/src/buttons/MRT_CopyButton.tsx +14 -7
  58. package/src/buttons/MRT_EditActionButtons.tsx +13 -12
  59. package/src/buttons/MRT_ExpandAllButton.tsx +24 -9
  60. package/src/buttons/MRT_ExpandButton.tsx +21 -14
  61. package/src/buttons/MRT_FullScreenToggleButton.tsx +18 -11
  62. package/src/buttons/MRT_ShowHideColumnsButton.tsx +18 -7
  63. package/src/buttons/MRT_ToggleColumnActionMenuButton.tsx +17 -9
  64. package/src/buttons/MRT_ToggleDensePaddingButton.tsx +18 -11
  65. package/src/buttons/MRT_ToggleFiltersButton.tsx +16 -9
  66. package/src/buttons/MRT_ToggleRowActionMenuButton.tsx +26 -21
  67. package/src/buttons/MRT_ToggleSearchButton.tsx +18 -11
  68. package/src/footer/MRT_TableFooter.tsx +23 -7
  69. package/src/footer/MRT_TableFooterCell.tsx +32 -24
  70. package/src/footer/MRT_TableFooterRow.tsx +20 -38
  71. package/src/head/MRT_TableHead.tsx +23 -7
  72. package/src/head/MRT_TableHeadCell.tsx +201 -152
  73. package/src/head/MRT_TableHeadRow.tsx +15 -103
  74. package/src/icons.ts +3 -3
  75. package/src/inputs/MRT_EditCellTextField.tsx +23 -24
  76. package/src/inputs/MRT_FilterTextField.tsx +51 -30
  77. package/src/inputs/MRT_SearchTextField.tsx +38 -21
  78. package/src/inputs/MRT_SelectCheckbox.tsx +34 -24
  79. package/src/localization.ts +13 -2
  80. package/src/menus/MRT_ColumnActionMenu.tsx +129 -69
  81. package/src/menus/MRT_FilterTypeMenu.tsx +28 -22
  82. package/src/menus/MRT_RowActionMenu.tsx +16 -11
  83. package/src/menus/MRT_ShowHideColumnsMenu.tsx +52 -20
  84. package/src/menus/MRT_ShowHideColumnsMenuItems.tsx +28 -17
  85. package/src/table/MRT_Table.tsx +24 -14
  86. package/src/table/MRT_TableContainer.tsx +109 -44
  87. package/src/table/MRT_TablePaper.tsx +61 -0
  88. package/src/table/MRT_TableRoot.tsx +236 -0
  89. package/src/toolbar/MRT_LinearProgressBar.tsx +9 -6
  90. package/src/toolbar/MRT_TablePagination.tsx +28 -18
  91. package/src/toolbar/MRT_ToolbarAlertBanner.tsx +31 -19
  92. package/src/toolbar/MRT_ToolbarBottom.tsx +31 -20
  93. package/src/toolbar/MRT_ToolbarInternalButtons.tsx +29 -16
  94. package/src/toolbar/MRT_ToolbarTop.tsx +34 -27
  95. package/src/utils.ts +37 -8
  96. package/dist/head/MRT_TableHeadCellActions.d.ts +0 -5
  97. package/dist/table/MRT_TableSpacerCell.d.ts +0 -6
  98. package/dist/useMRT.d.ts +0 -28
  99. package/src/@types/faker.d.ts +0 -4
  100. package/src/@types/react-table-config.d.ts +0 -53
  101. package/src/head/MRT_TableHeadCellActions.tsx +0 -29
  102. package/src/table/MRT_TableSpacerCell.tsx +0 -20
  103. package/src/useMRT.tsx +0 -226
@@ -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,60 +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
- enableClickToCopy && !cell.column.disableClickToCopy ? (
82
- <MRT_CopyButton cell={cell}>
83
- {cell.render('Aggregated')}
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()}
84
103
  </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>
104
+ {row.getIsGrouped() && <> ({row.subRows?.length})</>}
105
+ </>
94
106
  ) : (
95
- cell.render('Cell')
107
+ <>
108
+ {cell.renderCell()}
109
+ {row.getIsGrouped() && <> ({row.subRows?.length})</>}
110
+ </>
96
111
  )}
97
112
  </TableCell>
98
113
  );
@@ -1,37 +1,29 @@
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
@@ -39,12 +31,15 @@ export const MRT_TableBodyRow: FC<Props> = ({ row }) => {
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 (
@@ -54,53 +49,19 @@ export const MRT_TableBodyRow: FC<Props> = ({ row }) => {
54
49
  onClick={(event: MouseEvent<HTMLTableRowElement>) =>
55
50
  onRowClick?.(event, row)
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,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,19 +1,26 @@
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, children }) => {
11
- const { localization, muiTableBodyCellCopyButtonProps } = 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
  };
@@ -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,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);
24
+ row.toggleExpanded();
21
25
  onRowExpandChange?.(event, row);
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)`,
@@ -1,28 +1,35 @@
1
1
  import React, { FC } from 'react';
2
2
  import { IconButton, IconButtonProps, Tooltip } from '@mui/material';
3
- import { useMRT } from '../useMRT';
3
+ import { MRT_TableInstance } from '..';
4
4
 
5
- interface Props extends IconButtonProps {}
5
+ interface Props extends IconButtonProps {
6
+ tableInstance: MRT_TableInstance;
7
+ }
6
8
 
7
- export const MRT_FullScreenToggleButton: FC<Props> = ({ ...rest }) => {
9
+ export const MRT_FullScreenToggleButton: FC<Props> = ({
10
+ tableInstance,
11
+ ...rest
12
+ }) => {
8
13
  const {
9
- icons: { FullscreenExitIcon, FullscreenIcon },
10
- localization,
11
- setFullScreen,
12
- tableInstance: {
13
- state: { fullScreen },
14
+ getState,
15
+ options: {
16
+ icons: { FullscreenExitIcon, FullscreenIcon },
17
+ localization,
18
+ setIsFullScreen,
14
19
  },
15
- } = useMRT();
20
+ } = tableInstance;
21
+
22
+ const { isFullScreen } = getState();
16
23
 
17
24
  return (
18
25
  <Tooltip arrow title={localization.toggleFullScreen}>
19
26
  <IconButton
20
27
  aria-label={localization.showHideFilters}
21
- onClick={() => setFullScreen(!fullScreen)}
28
+ onClick={() => setIsFullScreen(!isFullScreen)}
22
29
  size="small"
23
30
  {...rest}
24
31
  >
25
- {fullScreen ? <FullscreenExitIcon /> : <FullscreenIcon />}
32
+ {isFullScreen ? <FullscreenExitIcon /> : <FullscreenIcon />}
26
33
  </IconButton>
27
34
  </Tooltip>
28
35
  );