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