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

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 (108) hide show
  1. package/README.md +29 -19
  2. package/dist/MaterialReactTable.d.ts +314 -108
  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/enums.d.ts +2 -1
  19. package/dist/filtersFNs.d.ts +13 -5
  20. package/dist/footer/MRT_TableFooter.d.ts +3 -0
  21. package/dist/footer/MRT_TableFooterCell.d.ts +3 -2
  22. package/dist/footer/MRT_TableFooterRow.d.ts +2 -1
  23. package/dist/head/MRT_TableHead.d.ts +3 -0
  24. package/dist/head/MRT_TableHeadCell.d.ts +4 -18
  25. package/dist/head/MRT_TableHeadRow.d.ts +2 -1
  26. package/dist/icons.d.ts +1 -1
  27. package/dist/inputs/MRT_EditCellTextField.d.ts +2 -1
  28. package/dist/inputs/MRT_FilterTextField.d.ts +3 -2
  29. package/dist/inputs/MRT_SearchTextField.d.ts +2 -0
  30. package/dist/inputs/MRT_SelectCheckbox.d.ts +2 -1
  31. package/dist/localization.d.ts +10 -2
  32. package/dist/material-react-table.cjs.development.js +2286 -2459
  33. package/dist/material-react-table.cjs.development.js.map +1 -1
  34. package/dist/material-react-table.cjs.production.min.js +1 -1
  35. package/dist/material-react-table.cjs.production.min.js.map +1 -1
  36. package/dist/material-react-table.esm.js +2288 -2461
  37. package/dist/material-react-table.esm.js.map +1 -1
  38. package/dist/menus/MRT_ColumnActionMenu.d.ts +3 -2
  39. package/dist/menus/MRT_FilterTypeMenu.d.ts +4 -3
  40. package/dist/menus/MRT_RowActionMenu.d.ts +3 -2
  41. package/dist/menus/MRT_ShowHideColumnsMenu.d.ts +2 -0
  42. package/dist/menus/MRT_ShowHideColumnsMenuItems.d.ts +2 -1
  43. package/dist/table/MRT_Table.d.ts +3 -0
  44. package/dist/table/MRT_TableContainer.d.ts +2 -0
  45. package/dist/table/MRT_TablePaper.d.ts +7 -0
  46. package/dist/table/MRT_TableRoot.d.ts +3 -0
  47. package/dist/toolbar/MRT_LinearProgressBar.d.ts +2 -0
  48. package/dist/toolbar/MRT_TablePagination.d.ts +2 -0
  49. package/dist/toolbar/MRT_ToolbarAlertBanner.d.ts +2 -0
  50. package/dist/toolbar/MRT_ToolbarBottom.d.ts +2 -0
  51. package/dist/toolbar/MRT_ToolbarInternalButtons.d.ts +2 -0
  52. package/dist/toolbar/MRT_ToolbarTop.d.ts +4 -2
  53. package/dist/utils.d.ts +12 -2
  54. package/package.json +29 -30
  55. package/src/MaterialReactTable.tsx +614 -297
  56. package/src/body/MRT_TableBody.tsx +26 -22
  57. package/src/body/MRT_TableBodyCell.tsx +79 -55
  58. package/src/body/MRT_TableBodyRow.tsx +37 -67
  59. package/src/body/MRT_TableDetailPanel.tsx +21 -17
  60. package/src/buttons/MRT_CopyButton.tsx +34 -10
  61. package/src/buttons/MRT_EditActionButtons.tsx +16 -13
  62. package/src/buttons/MRT_ExpandAllButton.tsx +36 -28
  63. package/src/buttons/MRT_ExpandButton.tsx +35 -41
  64. package/src/buttons/MRT_FullScreenToggleButton.tsx +18 -11
  65. package/src/buttons/MRT_ShowHideColumnsButton.tsx +18 -7
  66. package/src/buttons/MRT_ToggleColumnActionMenuButton.tsx +22 -11
  67. package/src/buttons/MRT_ToggleDensePaddingButton.tsx +18 -11
  68. package/src/buttons/MRT_ToggleFiltersButton.tsx +16 -9
  69. package/src/buttons/MRT_ToggleRowActionMenuButton.tsx +31 -26
  70. package/src/buttons/MRT_ToggleSearchButton.tsx +24 -12
  71. package/src/enums.ts +2 -1
  72. package/src/filtersFNs.ts +17 -3
  73. package/src/footer/MRT_TableFooter.tsx +24 -8
  74. package/src/footer/MRT_TableFooterCell.tsx +34 -26
  75. package/src/footer/MRT_TableFooterRow.tsx +21 -39
  76. package/src/head/MRT_TableHead.tsx +24 -8
  77. package/src/head/MRT_TableHeadCell.tsx +185 -142
  78. package/src/head/MRT_TableHeadRow.tsx +16 -93
  79. package/src/icons.ts +3 -3
  80. package/src/inputs/MRT_EditCellTextField.tsx +39 -24
  81. package/src/inputs/MRT_FilterTextField.tsx +53 -39
  82. package/src/inputs/MRT_SearchTextField.tsx +71 -25
  83. package/src/inputs/MRT_SelectCheckbox.tsx +42 -30
  84. package/src/localization.ts +20 -4
  85. package/src/menus/MRT_ColumnActionMenu.tsx +129 -69
  86. package/src/menus/MRT_FilterTypeMenu.tsx +55 -23
  87. package/src/menus/MRT_RowActionMenu.tsx +22 -15
  88. package/src/menus/MRT_ShowHideColumnsMenu.tsx +52 -20
  89. package/src/menus/MRT_ShowHideColumnsMenuItems.tsx +27 -17
  90. package/src/table/MRT_Table.tsx +25 -15
  91. package/src/table/MRT_TableContainer.tsx +106 -45
  92. package/src/table/MRT_TablePaper.tsx +65 -0
  93. package/src/table/MRT_TableRoot.tsx +239 -0
  94. package/src/toolbar/MRT_LinearProgressBar.tsx +10 -7
  95. package/src/toolbar/MRT_TablePagination.tsx +33 -19
  96. package/src/toolbar/MRT_ToolbarAlertBanner.tsx +33 -20
  97. package/src/toolbar/MRT_ToolbarBottom.tsx +32 -21
  98. package/src/toolbar/MRT_ToolbarInternalButtons.tsx +34 -20
  99. package/src/toolbar/MRT_ToolbarTop.tsx +36 -29
  100. package/src/utils.ts +37 -8
  101. package/dist/head/MRT_TableHeadCellActions.d.ts +0 -5
  102. package/dist/table/MRT_TableSpacerCell.d.ts +0 -6
  103. package/dist/useMRT.d.ts +0 -27
  104. package/src/@types/faker.d.ts +0 -4
  105. package/src/@types/react-table-config.d.ts +0 -53
  106. package/src/head/MRT_TableHeadCellActions.tsx +0 -29
  107. package/src/table/MRT_TableSpacerCell.tsx +0 -20
  108. package/src/useMRT.tsx +0 -215
@@ -1,62 +1,69 @@
1
1
  import React, { ChangeEvent, FC } from 'react';
2
2
  import { Checkbox, Tooltip } 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;
8
7
  selectAll?: boolean;
8
+ tableInstance: MRT_TableInstance;
9
9
  }
10
10
 
11
- export const MRT_SelectCheckbox: FC<Props> = ({ row, selectAll }) => {
11
+ export const MRT_SelectCheckbox: FC<Props> = ({
12
+ row,
13
+ selectAll,
14
+ tableInstance,
15
+ }) => {
12
16
  const {
13
- localization,
14
- muiSelectCheckboxProps,
15
- onSelectChange,
16
- onSelectAllChange,
17
- tableInstance,
18
- tableInstance: {
19
- state: { densePadding },
17
+ getRowModel,
18
+ getSelectedRowModel,
19
+ getState,
20
+ getToggleAllRowsSelectedProps,
21
+ options: {
22
+ isLoading,
23
+ localization,
24
+ muiSelectCheckboxProps,
25
+ onSelectChange,
26
+ onSelectAllChange,
20
27
  },
21
- } = useMRT();
28
+ } = tableInstance;
29
+
30
+ const { isDensePadding } = getState();
22
31
 
23
32
  const handleSelectChange = (event: ChangeEvent<HTMLInputElement>) => {
24
33
  if (selectAll) {
25
- tableInstance?.getToggleAllRowsSelectedProps?.()?.onChange?.(event);
26
- onSelectAllChange?.(
34
+ getToggleAllRowsSelectedProps?.()?.onChange?.(event as any);
35
+ onSelectAllChange?.({
27
36
  event,
28
- event.target.checked ? tableInstance.rows : [],
29
- );
37
+ selectedRows: event.target.checked ? getRowModel().flatRows : [],
38
+ tableInstance,
39
+ });
30
40
  } else if (row) {
31
- row?.getToggleRowSelectedProps()?.onChange?.(event);
32
- onSelectChange?.(
41
+ row?.getToggleSelectedProps()?.onChange?.(event as any);
42
+ onSelectChange?.({
33
43
  event,
34
44
  row,
35
- event.target.checked
36
- ? [...tableInstance.selectedFlatRows, row]
37
- : tableInstance.selectedFlatRows.filter(
45
+ selectedRows: event.target.checked
46
+ ? [...getSelectedRowModel().flatRows, row]
47
+ : getSelectedRowModel().flatRows.filter(
38
48
  (selectedRow) => selectedRow.id !== row.id,
39
49
  ),
40
- );
50
+ tableInstance,
51
+ });
41
52
  }
42
53
  };
43
54
 
44
55
  const mTableBodyRowSelectCheckboxProps =
45
56
  muiSelectCheckboxProps instanceof Function
46
- ? muiSelectCheckboxProps(selectAll, row, tableInstance)
57
+ ? muiSelectCheckboxProps({ isSelectAll: !!selectAll, row, tableInstance })
47
58
  : muiSelectCheckboxProps;
48
59
 
49
60
  const rtSelectCheckboxProps = selectAll
50
- ? tableInstance.getToggleAllRowsSelectedProps()
51
- : row?.getToggleRowSelectedProps();
61
+ ? getToggleAllRowsSelectedProps()
62
+ : row?.getToggleSelectedProps();
52
63
 
53
64
  const checkboxProps = {
54
- ...mTableBodyRowSelectCheckboxProps,
55
65
  ...rtSelectCheckboxProps,
56
- style: {
57
- ...rtSelectCheckboxProps?.style,
58
- ...mTableBodyRowSelectCheckboxProps?.style,
59
- },
66
+ ...mTableBodyRowSelectCheckboxProps,
60
67
  };
61
68
 
62
69
  return (
@@ -69,13 +76,18 @@ export const MRT_SelectCheckbox: FC<Props> = ({ row, selectAll }) => {
69
76
  }
70
77
  >
71
78
  <Checkbox
79
+ disabled={isLoading}
72
80
  inputProps={{
73
81
  'aria-label': selectAll
74
82
  ? localization.toggleSelectAll
75
83
  : localization.toggleSelectRow,
76
84
  }}
77
- size={densePadding ? 'small' : 'medium'}
85
+ size={isDensePadding ? 'small' : 'medium'}
78
86
  {...checkboxProps}
87
+ sx={{
88
+ height: isDensePadding ? '1.75rem' : '2.25rem',
89
+ width: isDensePadding ? '1.75rem' : '2.25rem',
90
+ }}
79
91
  onChange={handleSelectChange}
80
92
  title={undefined}
81
93
  />
@@ -2,6 +2,7 @@ export interface MRT_Localization {
2
2
  actions: string;
3
3
  cancel: string;
4
4
  changeFilterMode: string;
5
+ changeSearchMode: string;
5
6
  clearFilter: string;
6
7
  clearSearch: string;
7
8
  clearSort: string;
@@ -11,12 +12,13 @@ export interface MRT_Localization {
11
12
  edit: string;
12
13
  expand: string;
13
14
  expandAll: string;
15
+ filterBestMatch: string;
16
+ filterBestMatchFirst: string;
14
17
  filterByColumn: string;
15
18
  filterContains: string;
16
19
  filterEmpty: string;
17
20
  filterEndsWith: string;
18
21
  filterEquals: string;
19
- filterFuzzy: string;
20
22
  filterGreaterThan: string;
21
23
  filterLessThan: string;
22
24
  filterMode: string;
@@ -28,13 +30,18 @@ export interface MRT_Localization {
28
30
  groupedBy: string;
29
31
  hideAll: string;
30
32
  hideColumn: string;
33
+ pinToLeft: string;
34
+ pinToRight: string;
31
35
  rowActions: string;
36
+ rowNumber: string;
37
+ rowNumbers: string;
32
38
  save: string;
33
39
  search: string;
40
+ select: string;
34
41
  selectedCountOfRowCountRowsSelected: string;
35
42
  showAll: string;
36
- showHideColumns: string;
37
43
  showAllColumns: string;
44
+ showHideColumns: string;
38
45
  showHideFilters: string;
39
46
  showHideSearch: string;
40
47
  sortByColumnAsc: string;
@@ -45,12 +52,14 @@ export interface MRT_Localization {
45
52
  toggleSelectAll: string;
46
53
  toggleSelectRow: string;
47
54
  ungroupByColumn: string;
55
+ unpin: string;
48
56
  }
49
57
 
50
58
  export const MRT_DefaultLocalization_EN: MRT_Localization = {
51
59
  actions: 'Actions',
52
60
  cancel: 'Cancel',
53
61
  changeFilterMode: 'Change filter mode',
62
+ changeSearchMode: 'Change search mode',
54
63
  clearFilter: 'Clear filter',
55
64
  clearSearch: 'Clear search',
56
65
  clearSort: 'Clear sort',
@@ -60,12 +69,13 @@ export const MRT_DefaultLocalization_EN: MRT_Localization = {
60
69
  edit: 'Edit',
61
70
  expand: 'Expand',
62
71
  expandAll: 'Expand all',
72
+ filterBestMatch: 'Best Match',
73
+ filterBestMatchFirst: 'Best Match First',
63
74
  filterByColumn: 'Filter by {column}',
64
- filterContains: 'Contains Exact',
75
+ filterContains: 'Contains',
65
76
  filterEmpty: 'Empty',
66
77
  filterEndsWith: 'Ends With',
67
78
  filterEquals: 'Equals',
68
- filterFuzzy: 'Fuzzy Match',
69
79
  filterGreaterThan: 'Greater Than',
70
80
  filterLessThan: 'Less Than',
71
81
  filterMode: 'Filter Mode: {filterType}',
@@ -77,11 +87,16 @@ export const MRT_DefaultLocalization_EN: MRT_Localization = {
77
87
  groupedBy: 'Grouped by ',
78
88
  hideAll: 'Hide all',
79
89
  hideColumn: 'Hide {column} column',
90
+ pinToLeft: 'Pin to left',
91
+ pinToRight: 'Pin to right',
80
92
  rowActions: 'Row Actions',
93
+ rowNumber: '#',
94
+ rowNumbers: 'Row Numbers',
81
95
  save: 'Save',
82
96
  search: 'Search',
83
97
  selectedCountOfRowCountRowsSelected:
84
98
  '{selectedCount} of {rowCount} row(s) selected',
99
+ select: 'Select',
85
100
  showAll: 'Show all',
86
101
  showAllColumns: 'Show all columns',
87
102
  showHideColumns: 'Show/Hide columns',
@@ -95,4 +110,5 @@ export const MRT_DefaultLocalization_EN: MRT_Localization = {
95
110
  toggleSelectAll: 'Toggle select all',
96
111
  toggleSelectRow: 'Toggle select row',
97
112
  ungroupByColumn: 'Ungroup by {column}',
113
+ unpin: 'Unpin',
98
114
  };
@@ -1,7 +1,6 @@
1
1
  import React, { FC, useState } from 'react';
2
2
  import { Box, IconButton, ListItemIcon, Menu, MenuItem } from '@mui/material';
3
- import { useMRT } from '../useMRT';
4
- import type { MRT_HeaderGroup } from '..';
3
+ import type { MRT_Header, MRT_TableInstance } from '..';
5
4
  import { MRT_FilterTypeMenu } from './MRT_FilterTypeMenu';
6
5
  import { MRT_ShowHideColumnsMenu } from './MRT_ShowHideColumnsMenu';
7
6
 
@@ -19,35 +18,47 @@ export const commonListItemStyles = {
19
18
 
20
19
  interface Props {
21
20
  anchorEl: HTMLElement | null;
22
- column: MRT_HeaderGroup;
21
+ header: MRT_Header;
23
22
  setAnchorEl: (anchorEl: HTMLElement | null) => void;
23
+ tableInstance: MRT_TableInstance;
24
24
  }
25
25
 
26
26
  export const MRT_ColumnActionMenu: FC<Props> = ({
27
27
  anchorEl,
28
- column,
28
+ header,
29
29
  setAnchorEl,
30
+ tableInstance,
30
31
  }) => {
31
32
  const {
32
- disableColumnHiding,
33
- disableFilters,
34
- disableSortBy,
35
- enableColumnGrouping,
36
- icons: {
37
- ArrowRightIcon,
38
- ClearAllIcon,
39
- ViewColumnIcon,
40
- DynamicFeedIcon,
41
- FilterListIcon,
42
- FilterListOffIcon,
43
- SortIcon,
44
- VisibilityOffIcon,
33
+ getState,
34
+ toggleAllColumnsVisible,
35
+ setColumnOrder,
36
+ options: {
37
+ enableColumnFilters,
38
+ enableColumnPinning,
39
+ enableGrouping,
40
+ enableHiding,
41
+ enableSorting,
42
+ icons: {
43
+ ArrowRightIcon,
44
+ ClearAllIcon,
45
+ ViewColumnIcon,
46
+ DynamicFeedIcon,
47
+ FilterListIcon,
48
+ FilterListOffIcon,
49
+ PushPinIcon,
50
+ SortIcon,
51
+ VisibilityOffIcon,
52
+ },
53
+ idPrefix,
54
+ localization,
55
+ setShowFilters,
45
56
  },
46
- idPrefix,
47
- localization,
48
- setShowFilters,
49
- tableInstance,
50
- } = useMRT();
57
+ } = tableInstance;
58
+
59
+ const { column } = header;
60
+
61
+ const { isDensePadding, columnVisibility } = getState();
51
62
 
52
63
  const [filterMenuAnchorEl, setFilterMenuAnchorEl] =
53
64
  useState<null | HTMLElement>(null);
@@ -56,32 +67,37 @@ export const MRT_ColumnActionMenu: FC<Props> = ({
56
67
  useState<null | HTMLElement>(null);
57
68
 
58
69
  const handleClearSort = () => {
59
- column.clearSortBy();
70
+ column.resetSorting();
60
71
  setAnchorEl(null);
61
72
  };
62
73
 
63
74
  const handleSortAsc = () => {
64
- column.toggleSortBy(false);
75
+ column.toggleSorting(false);
65
76
  setAnchorEl(null);
66
77
  };
67
78
 
68
79
  const handleSortDesc = () => {
69
- column.toggleSortBy(true);
80
+ column.toggleSorting(true);
70
81
  setAnchorEl(null);
71
82
  };
72
83
 
73
84
  const handleHideColumn = () => {
74
- column.toggleHidden();
85
+ column.toggleVisibility(false);
75
86
  setAnchorEl(null);
76
87
  };
77
88
 
89
+ const handlePinColumn = (pinDirection: 'left' | 'right' | false) => {
90
+ column.pin(pinDirection);
91
+ };
92
+
78
93
  const handleGroupByColumn = () => {
79
- column.toggleGroupBy();
94
+ column.toggleGrouping();
95
+ setColumnOrder((old) => ['mrt-expand', ...old]);
80
96
  setAnchorEl(null);
81
97
  };
82
98
 
83
99
  const handleClearFilter = () => {
84
- column.setFilter('');
100
+ column.setColumnFilterValue('');
85
101
  setAnchorEl(null);
86
102
  };
87
103
 
@@ -92,8 +108,8 @@ export const MRT_ColumnActionMenu: FC<Props> = ({
92
108
  document
93
109
  .getElementById(
94
110
  // @ts-ignore
95
- column.muiTableHeadCellFilterTextFieldProps?.id ??
96
- `mrt-${idPrefix}-${column.id}-filter-text-field`,
111
+ header.muiTableHeadCellFilterTextFieldProps?.id ??
112
+ `mrt-${idPrefix}-${header.id}-filter-text-field`,
97
113
  )
98
114
  ?.focus(),
99
115
  200,
@@ -102,7 +118,7 @@ export const MRT_ColumnActionMenu: FC<Props> = ({
102
118
  };
103
119
 
104
120
  const handleShowAllColumns = () => {
105
- tableInstance.toggleHideAllColumns(false);
121
+ toggleAllColumnsVisible(true);
106
122
  setAnchorEl(null);
107
123
  };
108
124
 
@@ -124,13 +140,13 @@ export const MRT_ColumnActionMenu: FC<Props> = ({
124
140
  open={!!anchorEl}
125
141
  onClose={() => setAnchorEl(null)}
126
142
  MenuListProps={{
127
- dense: tableInstance.state.densePadding,
143
+ dense: isDensePadding,
128
144
  }}
129
145
  >
130
- {!disableSortBy &&
131
- column.canSort && [
146
+ {enableSorting &&
147
+ column.getCanSort() && [
132
148
  <MenuItem
133
- disabled={!column.isSorted}
149
+ disabled={!column.getIsSorted()}
134
150
  key={0}
135
151
  onClick={handleClearSort}
136
152
  sx={commonMenuItemStyles}
@@ -143,7 +159,7 @@ export const MRT_ColumnActionMenu: FC<Props> = ({
143
159
  </Box>
144
160
  </MenuItem>,
145
161
  <MenuItem
146
- disabled={column.isSorted && !column.isSortedDesc}
162
+ disabled={column.getIsSorted() === 'asc'}
147
163
  key={1}
148
164
  onClick={handleSortAsc}
149
165
  sx={commonMenuItemStyles}
@@ -154,16 +170,14 @@ export const MRT_ColumnActionMenu: FC<Props> = ({
154
170
  </ListItemIcon>
155
171
  {localization.sortByColumnAsc?.replace(
156
172
  '{column}',
157
- String(column.Header),
173
+ String(column.header),
158
174
  )}
159
175
  </Box>
160
176
  </MenuItem>,
161
177
  <MenuItem
162
- divider={
163
- !disableFilters || enableColumnGrouping || !disableColumnHiding
164
- }
178
+ divider={enableColumnFilters || enableGrouping || enableHiding}
165
179
  key={2}
166
- disabled={column.isSorted && column.isSortedDesc}
180
+ disabled={column.getIsSorted() === 'desc'}
167
181
  onClick={handleSortDesc}
168
182
  sx={commonMenuItemStyles}
169
183
  >
@@ -173,15 +187,15 @@ export const MRT_ColumnActionMenu: FC<Props> = ({
173
187
  </ListItemIcon>
174
188
  {localization.sortByColumnDesc?.replace(
175
189
  '{column}',
176
- String(column.Header),
190
+ String(column.header),
177
191
  )}
178
192
  </Box>
179
193
  </MenuItem>,
180
194
  ]}
181
- {!disableFilters &&
182
- column.canFilter && [
195
+ {enableColumnFilters &&
196
+ column.getCanColumnFilter() && [
183
197
  <MenuItem
184
- disabled={!column.filterValue}
198
+ disabled={!column.getColumnFilterValue()}
185
199
  key={0}
186
200
  onClick={handleClearFilter}
187
201
  sx={commonMenuItemStyles}
@@ -194,7 +208,7 @@ export const MRT_ColumnActionMenu: FC<Props> = ({
194
208
  </Box>
195
209
  </MenuItem>,
196
210
  <MenuItem
197
- divider={enableColumnGrouping || !disableColumnHiding}
211
+ divider={enableGrouping || enableHiding}
198
212
  key={1}
199
213
  onClick={handleFilterByColumn}
200
214
  sx={commonMenuItemStyles}
@@ -205,7 +219,7 @@ export const MRT_ColumnActionMenu: FC<Props> = ({
205
219
  </ListItemIcon>
206
220
  {localization.filterByColumn?.replace(
207
221
  '{column}',
208
- String(column.Header),
222
+ String(column.header),
209
223
  )}
210
224
  </Box>
211
225
  {!column.filterSelectOptions && (
@@ -221,16 +235,17 @@ export const MRT_ColumnActionMenu: FC<Props> = ({
221
235
  </MenuItem>,
222
236
  <MRT_FilterTypeMenu
223
237
  anchorEl={filterMenuAnchorEl}
224
- column={column}
238
+ header={header}
225
239
  key={2}
226
- setAnchorEl={setFilterMenuAnchorEl}
227
240
  onSelect={handleFilterByColumn}
241
+ setAnchorEl={setFilterMenuAnchorEl}
242
+ tableInstance={tableInstance}
228
243
  />,
229
244
  ]}
230
- {enableColumnGrouping &&
231
- column.canGroupBy && [
245
+ {enableGrouping &&
246
+ column.getCanGroup() && [
232
247
  <MenuItem
233
- divider={!disableColumnHiding}
248
+ divider={enableColumnPinning}
234
249
  key={0}
235
250
  onClick={handleGroupByColumn}
236
251
  sx={commonMenuItemStyles}
@@ -240,14 +255,57 @@ export const MRT_ColumnActionMenu: FC<Props> = ({
240
255
  <DynamicFeedIcon />
241
256
  </ListItemIcon>
242
257
  {localization[
243
- column.isGrouped ? 'ungroupByColumn' : 'groupByColumn'
244
- ]?.replace('{column}', String(column.Header))}
258
+ column.getIsGrouped() ? 'ungroupByColumn' : 'groupByColumn'
259
+ ]?.replace('{column}', String(column.header))}
245
260
  </Box>
246
261
  </MenuItem>,
247
262
  ]}
248
- {!disableColumnHiding && [
263
+ {enableColumnPinning &&
264
+ column.getCanPin() && [
265
+ <MenuItem
266
+ disabled={column.getIsPinned() === 'left'}
267
+ key={0}
268
+ onClick={() => handlePinColumn('left')}
269
+ sx={commonMenuItemStyles}
270
+ >
271
+ <Box sx={commonListItemStyles}>
272
+ <ListItemIcon>
273
+ <PushPinIcon style={{ transform: 'rotate(90deg)' }} />
274
+ </ListItemIcon>
275
+ {localization.pinToLeft}
276
+ </Box>
277
+ </MenuItem>,
278
+ <MenuItem
279
+ disabled={column.getIsPinned() === 'right'}
280
+ key={0}
281
+ onClick={() => handlePinColumn('right')}
282
+ sx={commonMenuItemStyles}
283
+ >
284
+ <Box sx={commonListItemStyles}>
285
+ <ListItemIcon>
286
+ <PushPinIcon style={{ transform: 'rotate(-90deg)' }} />
287
+ </ListItemIcon>
288
+ {localization.pinToRight}
289
+ </Box>
290
+ </MenuItem>,
291
+ <MenuItem
292
+ disabled={!column.getIsPinned()}
293
+ divider={enableHiding}
294
+ key={0}
295
+ onClick={() => handlePinColumn(false)}
296
+ sx={commonMenuItemStyles}
297
+ >
298
+ <Box sx={commonListItemStyles}>
299
+ <ListItemIcon>
300
+ <PushPinIcon />
301
+ </ListItemIcon>
302
+ {localization.unpin}
303
+ </Box>
304
+ </MenuItem>,
305
+ ]}
306
+ {enableHiding && [
249
307
  <MenuItem
250
- disabled={column.disableColumnHiding}
308
+ disabled={column.enableHiding === false}
251
309
  key={0}
252
310
  onClick={handleHideColumn}
253
311
  sx={commonMenuItemStyles}
@@ -258,12 +316,15 @@ export const MRT_ColumnActionMenu: FC<Props> = ({
258
316
  </ListItemIcon>
259
317
  {localization.hideColumn?.replace(
260
318
  '{column}',
261
- String(column.Header),
319
+ String(column.header),
262
320
  )}
263
321
  </Box>
264
322
  </MenuItem>,
265
323
  <MenuItem
266
- disabled={!tableInstance.state.hiddenColumns?.length}
324
+ disabled={
325
+ !Object.values(columnVisibility).filter((visible) => !visible)
326
+ .length
327
+ }
267
328
  key={1}
268
329
  onClick={handleShowAllColumns}
269
330
  sx={commonMenuItemStyles}
@@ -274,25 +335,24 @@ export const MRT_ColumnActionMenu: FC<Props> = ({
274
335
  </ListItemIcon>
275
336
  {localization.showAllColumns?.replace(
276
337
  '{column}',
277
- String(column.Header),
338
+ String(column.header),
278
339
  )}
279
340
  </Box>
280
- {!column.filterSelectOptions && (
281
- <IconButton
282
- onClick={handleOpenShowHideColumnsMenu}
283
- onMouseEnter={handleOpenShowHideColumnsMenu}
284
- size="small"
285
- sx={{ p: 0 }}
286
- >
287
- <ArrowRightIcon />
288
- </IconButton>
289
- )}
341
+ <IconButton
342
+ onClick={handleOpenShowHideColumnsMenu}
343
+ onMouseEnter={handleOpenShowHideColumnsMenu}
344
+ size="small"
345
+ sx={{ p: 0 }}
346
+ >
347
+ <ArrowRightIcon />
348
+ </IconButton>
290
349
  </MenuItem>,
291
350
  <MRT_ShowHideColumnsMenu
292
351
  anchorEl={showHideColumnsMenuAnchorEl}
293
352
  isSubMenu
294
353
  key={2}
295
354
  setAnchorEl={setShowHideColumnsMenuAnchorEl}
355
+ tableInstance={tableInstance}
296
356
  />,
297
357
  ]}
298
358
  </Menu>