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

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 +308 -107
  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 +2258 -2470
  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 +2260 -2472
  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 +598 -295
  55. package/src/body/MRT_TableBody.tsx +26 -22
  56. package/src/body/MRT_TableBodyCell.tsx +76 -55
  57. package/src/body/MRT_TableBodyRow.tsx +37 -67
  58. package/src/body/MRT_TableDetailPanel.tsx +21 -17
  59. package/src/buttons/MRT_CopyButton.tsx +36 -11
  60. package/src/buttons/MRT_EditActionButtons.tsx +16 -13
  61. package/src/buttons/MRT_ExpandAllButton.tsx +36 -28
  62. package/src/buttons/MRT_ExpandButton.tsx +35 -41
  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 +22 -11
  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 +27 -22
  69. package/src/buttons/MRT_ToggleSearchButton.tsx +24 -12
  70. package/src/enums.ts +2 -1
  71. package/src/filtersFNs.ts +17 -3
  72. package/src/footer/MRT_TableFooter.tsx +24 -8
  73. package/src/footer/MRT_TableFooterCell.tsx +34 -26
  74. package/src/footer/MRT_TableFooterRow.tsx +21 -39
  75. package/src/head/MRT_TableHead.tsx +24 -8
  76. package/src/head/MRT_TableHeadCell.tsx +185 -142
  77. package/src/head/MRT_TableHeadRow.tsx +16 -93
  78. package/src/icons.ts +3 -3
  79. package/src/inputs/MRT_EditCellTextField.tsx +23 -24
  80. package/src/inputs/MRT_FilterTextField.tsx +53 -39
  81. package/src/inputs/MRT_SearchTextField.tsx +71 -25
  82. package/src/inputs/MRT_SelectCheckbox.tsx +42 -30
  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 +21 -14
  87. package/src/menus/MRT_ShowHideColumnsMenu.tsx +52 -20
  88. package/src/menus/MRT_ShowHideColumnsMenuItems.tsx +27 -17
  89. package/src/table/MRT_Table.tsx +25 -15
  90. package/src/table/MRT_TableContainer.tsx +106 -45
  91. package/src/table/MRT_TablePaper.tsx +65 -0
  92. package/src/table/MRT_TableRoot.tsx +236 -0
  93. package/src/toolbar/MRT_LinearProgressBar.tsx +10 -7
  94. package/src/toolbar/MRT_TablePagination.tsx +30 -19
  95. package/src/toolbar/MRT_ToolbarAlertBanner.tsx +33 -20
  96. package/src/toolbar/MRT_ToolbarBottom.tsx +32 -21
  97. package/src/toolbar/MRT_ToolbarInternalButtons.tsx +34 -20
  98. package/src/toolbar/MRT_ToolbarTop.tsx +36 -29
  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,66 +1,48 @@
1
1
  import React, { FC } from 'react';
2
2
  import { TableRow } from '@mui/material';
3
3
  import { MRT_TableFooterCell } from './MRT_TableFooterCell';
4
- import { MRT_TableSpacerCell } from '../table/MRT_TableSpacerCell';
5
- import { useMRT } from '../useMRT';
6
- import type { MRT_HeaderGroup } from '..';
4
+ import type { MRT_Header, MRT_HeaderGroup, MRT_TableInstance } from '..';
7
5
 
8
6
  interface Props {
9
7
  footerGroup: MRT_HeaderGroup;
8
+ tableInstance: MRT_TableInstance;
10
9
  }
11
10
 
12
- export const MRT_TableFooterRow: FC<Props> = ({ footerGroup }) => {
11
+ export const MRT_TableFooterRow: FC<Props> = ({
12
+ footerGroup,
13
+ tableInstance,
14
+ }) => {
13
15
  const {
14
- anyRowsCanExpand,
15
- columns,
16
- enableRowActions,
17
- enableRowEditing,
18
- enableRowNumbers,
19
- enableSelection,
20
- muiTableFooterRowProps,
21
- positionActionsColumn,
22
- renderDetailPanel,
23
- tableInstance,
24
- } = useMRT();
16
+ options: { muiTableFooterRowProps },
17
+ } = tableInstance;
25
18
 
26
- //if no content in row, skip row
27
- if (!columns?.some((c) => c.Footer)) return null;
19
+ // if no content in row, skip row
20
+ if (
21
+ !footerGroup.headers?.some(
22
+ (h) => h.column.columnDef.footer || h.column.Footer,
23
+ )
24
+ )
25
+ return null;
28
26
 
29
27
  const mTableFooterRowProps =
30
28
  muiTableFooterRowProps instanceof Function
31
- ? muiTableFooterRowProps(footerGroup)
29
+ ? muiTableFooterRowProps({ footerGroup, tableInstance })
32
30
  : muiTableFooterRowProps;
33
31
 
34
32
  const tableRowProps = {
35
- ...mTableFooterRowProps,
36
33
  ...footerGroup.getFooterGroupProps(),
37
- style: {
38
- ...footerGroup.getFooterGroupProps().style,
39
- ...mTableFooterRowProps?.style,
40
- },
34
+ ...mTableFooterRowProps,
41
35
  };
42
36
 
43
37
  return (
44
38
  <TableRow {...tableRowProps}>
45
- {enableRowNumbers && <MRT_TableSpacerCell />}
46
- {(enableRowActions || enableRowEditing) &&
47
- positionActionsColumn === 'first' && <MRT_TableSpacerCell />}
48
- {(anyRowsCanExpand || renderDetailPanel) && (
49
- <MRT_TableSpacerCell
50
- width={`${
51
- renderDetailPanel ? 2 : tableInstance.expandedDepth + 0.5
52
- }rem`}
53
- />
54
- )}
55
- {enableSelection && <MRT_TableSpacerCell width="1rem" />}
56
- {footerGroup.headers.map((column: MRT_HeaderGroup) => (
39
+ {footerGroup.headers.map((footer: MRT_Header) => (
57
40
  <MRT_TableFooterCell
58
- key={column.getFooterProps().key}
59
- column={column}
41
+ footer={footer}
42
+ key={footer.getFooterProps().key}
43
+ tableInstance={tableInstance}
60
44
  />
61
45
  ))}
62
- {(enableRowActions || enableRowEditing) &&
63
- positionActionsColumn === 'last' && <MRT_TableSpacerCell />}
64
46
  </TableRow>
65
47
  );
66
48
  };
@@ -1,25 +1,41 @@
1
1
  import React, { FC } from 'react';
2
2
  import { TableHead } from '@mui/material';
3
3
  import { MRT_TableHeadRow } from './MRT_TableHeadRow';
4
- import { useMRT } from '../useMRT';
5
- import type { MRT_HeaderGroup } from '..';
4
+ import type { MRT_HeaderGroup, 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_TableHead: FC<Props> = () => {
10
- const { tableInstance, muiTableHeadProps } = useMRT();
11
+ export const MRT_TableHead: FC<Props> = ({ pinned, tableInstance }) => {
12
+ const {
13
+ getCenterHeaderGroups,
14
+ getHeaderGroups,
15
+ getLeftHeaderGroups,
16
+ getRightHeaderGroups,
17
+ options: { muiTableHeadProps },
18
+ } = tableInstance;
11
19
 
12
20
  const tableHeadProps =
13
21
  muiTableHeadProps instanceof Function
14
- ? muiTableHeadProps(tableInstance)
22
+ ? muiTableHeadProps({ tableInstance })
15
23
  : muiTableHeadProps;
16
24
 
25
+ const getHeaderGroupsMap = {
26
+ center: getCenterHeaderGroups,
27
+ left: getLeftHeaderGroups,
28
+ none: getHeaderGroups,
29
+ right: getRightHeaderGroups,
30
+ };
31
+
17
32
  return (
18
33
  <TableHead {...tableHeadProps}>
19
- {tableInstance.headerGroups.map((headerGroup: MRT_HeaderGroup) => (
34
+ {getHeaderGroupsMap[pinned]().map((headerGroup) => (
20
35
  <MRT_TableHeadRow
36
+ headerGroup={headerGroup as MRT_HeaderGroup}
21
37
  key={headerGroup.getHeaderGroupProps().key}
22
- headerGroup={headerGroup}
38
+ tableInstance={tableInstance}
23
39
  />
24
40
  ))}
25
41
  </TableHead>
@@ -1,4 +1,4 @@
1
- import React, { CSSProperties, FC } from 'react';
1
+ import React, { FC, MouseEvent } from 'react';
2
2
  import {
3
3
  TableCell,
4
4
  TableSortLabel,
@@ -7,86 +7,64 @@ import {
7
7
  Tooltip,
8
8
  Box,
9
9
  IconButton,
10
+ alpha,
11
+ Theme,
10
12
  } from '@mui/material';
11
- import { useMRT } from '../useMRT';
12
13
  import { MRT_FilterTextField } from '../inputs/MRT_FilterTextField';
13
14
  import { MRT_ToggleColumnActionMenuButton } from '../buttons/MRT_ToggleColumnActionMenuButton';
14
- import type { MRT_HeaderGroup } from '..';
15
-
16
- export const commonTableHeadCellStyles = (
17
- densePadding: boolean,
18
- enableColumnResizing?: boolean,
19
- widths?: {
20
- maxWidth?: CSSProperties['maxWidth'];
21
- minWidth?: CSSProperties['minWidth'];
22
- width?: CSSProperties['width'];
23
- },
24
- ) => ({
25
- fontWeight: 'bold',
26
- height: '100%',
27
- p: densePadding ? '0.5rem' : '1rem',
28
- pt: densePadding ? '0.75rem' : '1.25rem',
29
- transition: `all ${enableColumnResizing ? '10ms' : '0.2s'} ease-in-out`,
30
- verticalAlign: 'text-top',
31
- ...widths,
32
- });
15
+ import type { MRT_Header, MRT_TableInstance } from '..';
16
+ import { ColumnResizerProps } from '@tanstack/react-table';
33
17
 
34
18
  interface Props {
35
- column: MRT_HeaderGroup;
19
+ header: MRT_Header;
20
+ tableInstance: MRT_TableInstance;
36
21
  }
37
22
 
38
- export const MRT_TableHeadCell: FC<Props> = ({ column }) => {
23
+ export const MRT_TableHeadCell: FC<Props> = ({ header, tableInstance }) => {
39
24
  const {
40
- disableColumnActions,
41
- disableFilters,
42
- enableColumnResizing,
43
- icons: { FilterAltIcon, FilterAltOff },
44
- localization,
45
- muiTableHeadCellProps,
46
- setShowFilters,
47
- tableInstance,
48
- } = useMRT();
25
+ getState,
26
+ options: {
27
+ enableColumnActions,
28
+ enableColumnFilters,
29
+ enableColumnResizing,
30
+ icons: { FilterAltIcon, FilterAltOff },
31
+ localization,
32
+ muiTableHeadCellProps,
33
+ setShowFilters,
34
+ },
35
+ } = tableInstance;
36
+
37
+ const { isDensePadding, showFilters } = getState();
49
38
 
50
- const isParentHeader = !!column?.columns?.length;
39
+ const { column } = header;
51
40
 
52
41
  const mTableHeadCellProps =
53
42
  muiTableHeadCellProps instanceof Function
54
- ? muiTableHeadCellProps(column)
43
+ ? muiTableHeadCellProps({ column, tableInstance })
55
44
  : muiTableHeadCellProps;
56
45
 
57
46
  const mcTableHeadCellProps =
58
47
  column.muiTableHeadCellProps instanceof Function
59
- ? column.muiTableHeadCellProps(column)
48
+ ? column.muiTableHeadCellProps({ column, tableInstance })
60
49
  : column.muiTableHeadCellProps;
61
50
 
62
51
  const tableCellProps = {
52
+ ...header.getHeaderProps(),
63
53
  ...mTableHeadCellProps,
64
54
  ...mcTableHeadCellProps,
65
- ...column.getHeaderProps(),
66
- style: {
67
- ...column.getHeaderProps().style,
68
- ...mTableHeadCellProps?.style,
69
- ...mcTableHeadCellProps?.style,
70
- },
71
55
  };
72
56
 
73
- const sortTooltip = column.isSorted
74
- ? column.isSortedDesc
57
+ const sortTooltip = !!column.getIsSorted()
58
+ ? column.getIsSorted() === 'desc'
75
59
  ? localization.clearSort
76
- : localization.sortByColumnDesc?.replace(
77
- '{column}',
78
- column.Header as string,
79
- )
80
- : localization.sortByColumnAsc?.replace(
81
- '{column}',
82
- column.Header as string,
83
- );
60
+ : localization.sortByColumnDesc.replace('{column}', column.header)
61
+ : localization.sortByColumnAsc.replace('{column}', column.header);
84
62
 
85
- const filterType = tableInstance.state.currentFilterTypes[column.id];
63
+ const filterType = getState()?.currentFilterTypes?.[header.id];
86
64
 
87
- const filterTooltip = !!column.filterValue
65
+ const filterTooltip = !!column.getColumnFilterValue()
88
66
  ? localization.filteringByColumn
89
- .replace('{column}', String(column.Header))
67
+ .replace('{column}', String(column.header))
90
68
  .replace(
91
69
  '{filterType}',
92
70
  filterType instanceof Function
@@ -98,111 +76,176 @@ export const MRT_TableHeadCell: FC<Props> = ({ column }) => {
98
76
  }`
99
77
  ],
100
78
  )
101
- .replace('{filterValue}', column.filterValue)
79
+ .replace('{filterValue}', column.getColumnFilterValue() as string)
80
+ .replace('" "', '')
102
81
  : localization.showHideFilters;
103
82
 
104
- const columnHeader = column.render('Header') as string;
83
+ const headerElement =
84
+ column?.Header?.({
85
+ header,
86
+ tableInstance,
87
+ }) ?? column.header;
105
88
 
106
89
  return (
107
90
  <TableCell
108
- align={isParentHeader ? 'center' : 'left'}
91
+ align={column.columnDefType === 'group' ? 'center' : 'left'}
109
92
  {...tableCellProps}
110
- sx={{
111
- ...commonTableHeadCellStyles(
112
- tableInstance.state.densePadding,
113
- enableColumnResizing,
114
- {
115
- maxWidth: column.maxWidth,
116
- minWidth: column.minWidth,
117
- width: column.width,
118
- },
119
- ),
93
+ //@ts-ignore
94
+ sx={(theme: Theme) => ({
95
+ backgroundColor: theme.palette.background.default,
96
+ backgroundImage: `linear-gradient(${alpha(
97
+ theme.palette.common.white,
98
+ 0.05,
99
+ )},${alpha(theme.palette.common.white, 0.05)})`,
100
+ boxShadow: `3px 0 6px ${alpha(theme.palette.common.black, 0.1)}`,
101
+ fontWeight: 'bold',
102
+ height: '100%',
103
+ minWidth: `max(${header.getWidth()}, 100px)`,
104
+ p: isDensePadding
105
+ ? column.columnDefType === 'display'
106
+ ? '0 0.5rem'
107
+ : '0.5rem'
108
+ : column.columnDefType === 'display'
109
+ ? '0.5rem 0.75rem'
110
+ : '1rem',
111
+ pt:
112
+ column.columnDefType === 'display'
113
+ ? 0
114
+ : isDensePadding
115
+ ? '0.75rem'
116
+ : '1.25rem',
117
+ pb: column.columnDefType === 'display' ? 0 : undefined,
118
+ transition: `all ${enableColumnResizing ? 0 : '0.2s'} ease-in-out`,
119
+ verticalAlign: 'text-top',
120
+ width: header.getWidth(),
121
+ //@ts-ignore
120
122
  ...tableCellProps?.sx,
121
- }}
123
+ })}
122
124
  >
123
- <Box
124
- sx={{
125
- alignItems: 'flex-start',
126
- display: 'flex',
127
- justifyContent: isParentHeader ? 'center' : 'space-between',
128
- width: '100%',
129
- }}
130
- >
125
+ {header.isPlaceholder ? null : column.columnDefType === 'display' ? (
126
+ headerElement
127
+ ) : (
131
128
  <Box
132
- {...column.getSortByToggleProps()}
133
129
  sx={{
134
- alignItems: 'center',
130
+ alignItems: 'flex-start',
135
131
  display: 'flex',
136
- flexWrap: 'nowrap',
137
- whiteSpace: columnHeader.length < 15 ? 'nowrap' : 'normal',
132
+ justifyContent:
133
+ column.columnDefType === 'group' ? 'center' : 'space-between',
134
+ width: '100%',
138
135
  }}
139
- title={undefined}
140
136
  >
141
- {column.render('Header')}
142
- {!isParentHeader && column.canSort && (
143
- <Tooltip arrow placement="top" title={sortTooltip}>
144
- <TableSortLabel
145
- aria-label={sortTooltip}
146
- active={column.isSorted}
147
- direction={column.isSortedDesc ? 'desc' : 'asc'}
148
- />
149
- </Tooltip>
150
- )}
151
- {!isParentHeader && !!column.canFilter && (
152
- <Tooltip arrow placement="top" title={filterTooltip}>
153
- <IconButton
154
- disableRipple
155
- onClick={(event) => {
156
- event.stopPropagation();
157
- setShowFilters(!tableInstance.state.showFilters);
158
- }}
159
- size="small"
160
- sx={{
161
- m: 0,
162
- opacity: !!column.filterValue ? 0.8 : 0,
163
- p: '2px',
164
- transition: 'all 0.2s ease-in-out',
165
- '&:hover': {
166
- backgroundColor: 'transparent',
167
- opacity: 0.8,
137
+ <Box
138
+ {...column.getToggleSortingProps()}
139
+ sx={{
140
+ alignItems: 'center',
141
+ cursor:
142
+ column.getCanSort() && column.columnDefType !== 'group'
143
+ ? 'pointer'
144
+ : undefined,
145
+ display: 'flex',
146
+ flexWrap: 'nowrap',
147
+ whiteSpace: column.header.length < 15 ? 'nowrap' : 'normal',
148
+ }}
149
+ title={undefined}
150
+ >
151
+ {headerElement}
152
+ {column.columnDefType !== 'group' && column.getCanSort() && (
153
+ <Tooltip arrow placement="top" title={sortTooltip}>
154
+ <TableSortLabel
155
+ aria-label={sortTooltip}
156
+ active={!!column.getIsSorted()}
157
+ direction={
158
+ column.getIsSorted()
159
+ ? (column.getIsSorted() as 'asc' | 'desc')
160
+ : undefined
161
+ }
162
+ />
163
+ </Tooltip>
164
+ )}
165
+ {column.columnDefType !== 'group' &&
166
+ enableColumnFilters &&
167
+ !!column.getCanColumnFilter() && (
168
+ <Tooltip arrow placement="top" title={filterTooltip}>
169
+ <IconButton
170
+ disableRipple
171
+ onClick={(event: MouseEvent<HTMLButtonElement>) => {
172
+ event.stopPropagation();
173
+ setShowFilters(!showFilters);
174
+ }}
175
+ size="small"
176
+ sx={{
177
+ m: 0,
178
+ opacity: !!column.getColumnFilterValue() ? 0.8 : 0,
179
+ p: '2px',
180
+ transition: 'all 0.2s ease-in-out',
181
+ '&:hover': {
182
+ backgroundColor: 'transparent',
183
+ opacity: 0.8,
184
+ },
185
+ }}
186
+ >
187
+ {showFilters && !column.getColumnFilterValue() ? (
188
+ <FilterAltOff fontSize="small" />
189
+ ) : (
190
+ <FilterAltIcon fontSize="small" />
191
+ )}
192
+ </IconButton>
193
+ </Tooltip>
194
+ )}
195
+ </Box>
196
+ <Box
197
+ sx={{ alignItems: 'center', display: 'flex', flexWrap: 'nowrap' }}
198
+ >
199
+ {(enableColumnActions || column.enableColumnActions) &&
200
+ column.enableColumnActions !== false &&
201
+ column.columnDefType !== 'group' && (
202
+ <MRT_ToggleColumnActionMenuButton
203
+ header={header}
204
+ tableInstance={tableInstance}
205
+ />
206
+ )}
207
+ {enableColumnResizing && column.columnDefType !== 'group' && (
208
+ <Divider
209
+ flexItem
210
+ orientation="vertical"
211
+ onDoubleClick={() => header.resetSize()}
212
+ sx={(theme: Theme) => ({
213
+ borderRightWidth: '2px',
214
+ borderRadius: '2px',
215
+ maxHeight: '2rem',
216
+ cursor: 'col-resize',
217
+ userSelect: 'none',
218
+ touchAction: 'none',
219
+ '&:active': {
220
+ backgroundColor: theme.palette.secondary.dark,
221
+ opacity: 1,
168
222
  },
169
- }}
170
- >
171
- {tableInstance.state.showFilters && !column.filterValue ? (
172
- <FilterAltOff fontSize="small" />
173
- ) : (
174
- <FilterAltIcon fontSize="small" />
175
- )}
176
- </IconButton>
177
- </Tooltip>
178
- )}
179
- </Box>
180
- <Box sx={{ alignItems: 'center', display: 'flex', flexWrap: 'nowrap' }}>
181
- {!disableColumnActions &&
182
- !column.disableColumnActions &&
183
- !isParentHeader && (
184
- <MRT_ToggleColumnActionMenuButton column={column} />
223
+ })}
224
+ {...(header.getResizerProps((props: ColumnResizerProps) => ({
225
+ ...props,
226
+ style: {
227
+ transform: column.getIsResizing()
228
+ ? `translateX(${
229
+ getState().columnSizingInfo.deltaOffset
230
+ }px)`
231
+ : '',
232
+ },
233
+ })) as any)}
234
+ />
185
235
  )}
186
- {enableColumnResizing && !isParentHeader && (
187
- <Divider
188
- flexItem
189
- orientation="vertical"
190
- onDoubleClick={() => tableInstance.resetResizing()}
191
- {...column.getResizerProps()}
192
- sx={{
193
- borderRightWidth: '2px',
194
- borderRadius: '2px',
195
- maxHeight: '2rem',
196
- }}
197
- />
198
- )}
236
+ </Box>
199
237
  </Box>
200
- </Box>
201
- {!disableFilters && column.canFilter && (
202
- <Collapse in={tableInstance.state.showFilters}>
203
- <MRT_FilterTextField column={column} />
204
- </Collapse>
205
238
  )}
239
+ {column.columnDefType === 'data' &&
240
+ enableColumnFilters &&
241
+ column.getCanColumnFilter() && (
242
+ <Collapse in={showFilters}>
243
+ <MRT_FilterTextField
244
+ header={header}
245
+ tableInstance={tableInstance}
246
+ />
247
+ </Collapse>
248
+ )}
206
249
  </TableCell>
207
250
  );
208
251
  };
@@ -1,114 +1,37 @@
1
- import React, { FC, useMemo } from 'react';
2
- import { TableCell, TableRow } from '@mui/material';
3
- import {
4
- commonTableHeadCellStyles,
5
- MRT_TableHeadCell,
6
- } from './MRT_TableHeadCell';
7
- import { commonTableBodyButtonCellStyles } from '../body/MRT_TableBodyCell';
8
- import { useMRT } from '../useMRT';
9
- import { MRT_SelectCheckbox } from '../inputs/MRT_SelectCheckbox';
10
- import { MRT_ExpandAllButton } from '../buttons/MRT_ExpandAllButton';
11
- import { MRT_TableSpacerCell } from '../table/MRT_TableSpacerCell';
12
- import { MRT_TableHeadCellActions } from './MRT_TableHeadCellActions';
13
- import type { MRT_HeaderGroup } from '..';
1
+ import React, { FC } from 'react';
2
+ import { TableRow } from '@mui/material';
3
+ import { MRT_TableHeadCell } from './MRT_TableHeadCell';
4
+ import type { MRT_Header, MRT_HeaderGroup, MRT_TableInstance } from '..';
14
5
 
15
6
  interface Props {
16
7
  headerGroup: MRT_HeaderGroup;
8
+ tableInstance: MRT_TableInstance;
17
9
  }
18
10
 
19
- export const MRT_TableHeadRow: FC<Props> = ({ headerGroup }) => {
11
+ export const MRT_TableHeadRow: FC<Props> = ({ headerGroup, tableInstance }) => {
20
12
  const {
21
- anyRowsCanExpand,
22
- disableExpandAll,
23
- disableSelectAll,
24
- enableRowActions,
25
- enableRowEditing,
26
- enableRowNumbers,
27
- enableSelection,
28
- muiTableHeadRowProps,
29
- positionActionsColumn,
30
- renderDetailPanel,
31
- tableInstance,
32
- } = useMRT();
33
-
34
- const isParentHeader = useMemo(
35
- () => headerGroup.headers.some((h) => (h.columns?.length ?? 0) > 0),
36
- [headerGroup.headers],
37
- );
13
+ options: { muiTableHeadRowProps },
14
+ } = tableInstance;
38
15
 
39
16
  const mTableHeadRowProps =
40
17
  muiTableHeadRowProps instanceof Function
41
- ? muiTableHeadRowProps(headerGroup)
18
+ ? muiTableHeadRowProps({ headerGroup, tableInstance })
42
19
  : muiTableHeadRowProps;
43
20
 
44
21
  const tableRowProps = {
22
+ ...headerGroup?.getHeaderGroupProps(),
45
23
  ...mTableHeadRowProps,
46
- ...headerGroup.getHeaderGroupProps(),
47
- style: {
48
- ...headerGroup.getHeaderGroupProps().style,
49
- ...mTableHeadRowProps?.style,
50
- },
51
24
  };
52
25
 
53
26
  return (
54
27
  <TableRow {...tableRowProps}>
55
- {enableRowNumbers &&
56
- (isParentHeader ? (
57
- <MRT_TableSpacerCell />
58
- ) : (
59
- <TableCell
60
- sx={{
61
- ...commonTableHeadCellStyles(tableInstance.state.densePadding),
62
- }}
63
- >
64
- #
65
- </TableCell>
66
- ))}
67
- {(enableRowActions || enableRowEditing) &&
68
- positionActionsColumn === 'first' &&
69
- (isParentHeader ? (
70
- <MRT_TableSpacerCell />
71
- ) : (
72
- <MRT_TableHeadCellActions />
73
- ))}
74
- {anyRowsCanExpand || renderDetailPanel ? (
75
- !disableExpandAll && !isParentHeader ? (
76
- <MRT_ExpandAllButton />
77
- ) : (
78
- <MRT_TableSpacerCell
79
- width={`${
80
- renderDetailPanel ? 2 : tableInstance.expandedDepth + 0.5
81
- }rem`}
82
- />
83
- )
84
- ) : null}
85
- {enableSelection ? (
86
- !isParentHeader && !disableSelectAll ? (
87
- <TableCell
88
- sx={{
89
- ...commonTableBodyButtonCellStyles(
90
- tableInstance.state.densePadding,
91
- ),
92
- maxWidth: '3rem',
93
- width: '3rem',
94
- }}
95
- >
96
- <MRT_SelectCheckbox selectAll />
97
- </TableCell>
98
- ) : (
99
- <MRT_TableSpacerCell width="1rem" />
100
- )
101
- ) : null}
102
- {headerGroup.headers.map((column: MRT_HeaderGroup) => (
103
- <MRT_TableHeadCell key={column.getHeaderProps().key} column={column} />
28
+ {headerGroup.headers.map((header: MRT_Header, index) => (
29
+ <MRT_TableHeadCell
30
+ header={header}
31
+ key={header.id || index}
32
+ tableInstance={tableInstance}
33
+ />
104
34
  ))}
105
- {(enableRowActions || enableRowEditing) &&
106
- positionActionsColumn === 'last' &&
107
- (isParentHeader ? (
108
- <MRT_TableSpacerCell />
109
- ) : (
110
- <MRT_TableHeadCellActions />
111
- ))}
112
35
  </TableRow>
113
36
  );
114
37
  };