material-react-table 2.9.1 → 2.10.0
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.
- package/dist/index.d.ts +162 -111
- package/dist/index.esm.js +739 -639
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +741 -639
- package/dist/index.js.map +1 -1
- package/locales/ar/index.esm.js +1 -0
- package/locales/ar/index.js +1 -0
- package/locales/az/index.esm.js +1 -0
- package/locales/az/index.js +1 -0
- package/locales/bg/index.esm.js +1 -0
- package/locales/bg/index.js +1 -0
- package/locales/cs/index.esm.js +1 -0
- package/locales/cs/index.js +1 -0
- package/locales/da/index.esm.js +1 -0
- package/locales/da/index.js +1 -0
- package/locales/de/index.esm.js +1 -0
- package/locales/de/index.js +1 -0
- package/locales/en/index.esm.js +1 -0
- package/locales/en/index.js +1 -0
- package/locales/es/index.esm.js +1 -0
- package/locales/es/index.js +1 -0
- package/locales/et/index.esm.js +1 -0
- package/locales/et/index.js +1 -0
- package/locales/fa/index.esm.js +1 -0
- package/locales/fa/index.js +1 -0
- package/locales/fi/index.esm.js +1 -0
- package/locales/fi/index.js +1 -0
- package/locales/fr/index.esm.js +1 -0
- package/locales/fr/index.js +1 -0
- package/locales/he/index.esm.js +1 -0
- package/locales/he/index.js +1 -0
- package/locales/hu/index.esm.js +1 -0
- package/locales/hu/index.js +1 -0
- package/locales/hy/index.esm.js +1 -0
- package/locales/hy/index.js +1 -0
- package/locales/id/index.esm.js +1 -0
- package/locales/id/index.js +1 -0
- package/locales/it/index.esm.js +1 -0
- package/locales/it/index.js +1 -0
- package/locales/ja/index.esm.js +1 -0
- package/locales/ja/index.js +1 -0
- package/locales/ko/index.esm.js +1 -0
- package/locales/ko/index.js +1 -0
- package/locales/nl/index.esm.js +1 -0
- package/locales/nl/index.js +1 -0
- package/locales/no/index.esm.js +1 -0
- package/locales/no/index.js +1 -0
- package/locales/np/index.esm.js +1 -0
- package/locales/np/index.js +1 -0
- package/locales/pl/index.esm.js +1 -0
- package/locales/pl/index.js +1 -0
- package/locales/pt/index.esm.js +1 -0
- package/locales/pt/index.js +1 -0
- package/locales/pt-BR/index.esm.js +1 -0
- package/locales/pt-BR/index.js +1 -0
- package/locales/ro/index.esm.js +1 -0
- package/locales/ro/index.js +1 -0
- package/locales/ru/index.esm.js +1 -0
- package/locales/ru/index.js +1 -0
- package/locales/sk/index.esm.js +1 -0
- package/locales/sk/index.js +1 -0
- package/locales/sr-Cyrl-RS/index.esm.js +1 -0
- package/locales/sr-Cyrl-RS/index.js +1 -0
- package/locales/sr-Latn-RS/index.esm.js +1 -0
- package/locales/sr-Latn-RS/index.js +1 -0
- package/locales/sv/index.esm.js +1 -0
- package/locales/sv/index.js +1 -0
- package/locales/tr/index.esm.js +1 -0
- package/locales/tr/index.js +1 -0
- package/locales/uk/index.esm.js +1 -0
- package/locales/uk/index.js +1 -0
- package/locales/vi/index.esm.js +1 -0
- package/locales/vi/index.js +1 -0
- package/locales/zh-Hans/index.esm.js +1 -0
- package/locales/zh-Hans/index.js +1 -0
- package/locales/zh-Hant/index.esm.js +1 -0
- package/locales/zh-Hant/index.js +1 -0
- package/package.json +11 -11
- package/src/components/body/MRT_TableBodyCell.tsx +41 -37
- package/src/components/body/MRT_TableBodyRow.tsx +15 -21
- package/src/components/buttons/MRT_CopyButton.tsx +1 -0
- package/src/components/footer/MRT_TableFooter.tsx +1 -1
- package/src/components/footer/MRT_TableFooterCell.tsx +2 -4
- package/src/components/footer/MRT_TableFooterRow.tsx +1 -0
- package/src/components/head/MRT_TableHeadCell.tsx +6 -6
- package/src/components/head/MRT_TableHeadCellFilterLabel.tsx +1 -0
- package/src/components/head/MRT_TableHeadRow.tsx +6 -1
- package/src/components/inputs/MRT_EditCellTextField.tsx +4 -1
- package/src/components/inputs/MRT_FilterTextField.tsx +1 -0
- package/src/components/menus/MRT_ActionMenuItem.tsx +60 -0
- package/src/components/menus/MRT_CellActionMenu.tsx +108 -0
- package/src/components/menus/MRT_ColumnActionMenu.tsx +90 -170
- package/src/components/menus/MRT_FilterOptionMenu.tsx +7 -14
- package/src/components/menus/MRT_RowActionMenu.tsx +8 -15
- package/src/components/menus/MRT_ShowHideColumnsMenu.tsx +4 -1
- package/src/components/table/MRT_Table.tsx +1 -0
- package/src/components/table/MRT_TableContainer.tsx +4 -0
- package/src/components/toolbar/MRT_TablePagination.tsx +14 -5
- package/src/hooks/display-columns/getMRT_RowActionsColumnDef.tsx +1 -8
- package/src/hooks/display-columns/getMRT_RowDragColumnDef.tsx +1 -8
- package/src/hooks/display-columns/getMRT_RowExpandColumnDef.tsx +1 -8
- package/src/hooks/display-columns/getMRT_RowNumbersColumnDef.tsx +1 -8
- package/src/hooks/display-columns/getMRT_RowPinningColumnDef.tsx +1 -8
- package/src/hooks/display-columns/getMRT_RowSelectColumnDef.tsx +1 -8
- package/src/hooks/display-columns/getMRT_RowSpacerColumnDef.tsx +1 -8
- package/src/hooks/useMRT_Effects.ts +10 -0
- package/src/hooks/useMRT_TableInstance.ts +112 -59
- package/src/icons.ts +2 -0
- package/src/index.ts +2 -0
- package/src/locales/ar.ts +1 -0
- package/src/locales/az.ts +1 -0
- package/src/locales/bg.ts +1 -0
- package/src/locales/cs.ts +1 -0
- package/src/locales/da.ts +1 -0
- package/src/locales/de.ts +1 -0
- package/src/locales/en.ts +1 -0
- package/src/locales/es.ts +1 -0
- package/src/locales/et.ts +1 -0
- package/src/locales/fa.ts +1 -0
- package/src/locales/fi.ts +1 -0
- package/src/locales/fr.ts +1 -0
- package/src/locales/he.ts +1 -0
- package/src/locales/hu.ts +1 -0
- package/src/locales/hy.ts +1 -0
- package/src/locales/id.ts +1 -0
- package/src/locales/it.ts +1 -0
- package/src/locales/ja.ts +1 -0
- package/src/locales/ko.ts +1 -0
- package/src/locales/nl.ts +1 -0
- package/src/locales/no.ts +1 -0
- package/src/locales/np.ts +1 -0
- package/src/locales/pl.ts +1 -0
- package/src/locales/pt-BR.ts +1 -0
- package/src/locales/pt.ts +1 -0
- package/src/locales/ro.ts +1 -0
- package/src/locales/ru.ts +1 -0
- package/src/locales/sk.ts +1 -0
- package/src/locales/sr-Cyrl-RS.ts +1 -0
- package/src/locales/sr-Latn-RS.ts +1 -0
- package/src/locales/sv.ts +1 -0
- package/src/locales/tr.ts +1 -0
- package/src/locales/uk.ts +1 -0
- package/src/locales/vi.ts +1 -0
- package/src/locales/zh-Hans.ts +1 -0
- package/src/locales/zh-Hant.ts +1 -0
- package/src/types.ts +41 -9
- package/src/utils/cell.utils.ts +50 -0
- package/src/utils/displayColumn.utils.ts +38 -20
- package/src/utils/style.utils.ts +17 -4
- package/src/hooks/display-columns/getMRT_DisplayColumns.tsx +0 -26
- package/src/locales/am.ts +0 -94
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
import { useState } from 'react';
|
|
2
|
-
import * as React from 'react';
|
|
3
|
-
import Box from '@mui/material/Box';
|
|
4
|
-
import IconButton from '@mui/material/IconButton';
|
|
5
|
-
import ListItemIcon from '@mui/material/ListItemIcon';
|
|
1
|
+
import { type MouseEvent, useState } from 'react';
|
|
6
2
|
import Menu, { type MenuProps } from '@mui/material/Menu';
|
|
7
|
-
import MenuItem from '@mui/material/MenuItem';
|
|
8
3
|
import { useTheme } from '@mui/material/styles';
|
|
9
4
|
import { MRT_FilterOptionMenu } from './MRT_FilterOptionMenu';
|
|
5
|
+
import { MRT_ActionMenuItem } from './MRT_ActionMenuItem';
|
|
10
6
|
import {
|
|
11
7
|
type MRT_Header,
|
|
12
8
|
type MRT_RowData,
|
|
@@ -14,18 +10,6 @@ import {
|
|
|
14
10
|
} from '../../types';
|
|
15
11
|
import { getMRTTheme } from '../../utils/style.utils';
|
|
16
12
|
|
|
17
|
-
export const commonMenuItemStyles = {
|
|
18
|
-
alignItems: 'center',
|
|
19
|
-
justifyContent: 'space-between',
|
|
20
|
-
my: 0,
|
|
21
|
-
py: '6px',
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
export const commonListItemStyles = {
|
|
25
|
-
alignItems: 'center',
|
|
26
|
-
display: 'flex',
|
|
27
|
-
};
|
|
28
|
-
|
|
29
13
|
interface Props<TData extends MRT_RowData> extends Partial<MenuProps> {
|
|
30
14
|
anchorEl: HTMLElement | null;
|
|
31
15
|
header: MRT_Header<TData>;
|
|
@@ -42,6 +26,7 @@ export const MRT_ColumnActionMenu = <TData extends MRT_RowData>({
|
|
|
42
26
|
}: Props<TData>) => {
|
|
43
27
|
const {
|
|
44
28
|
getState,
|
|
29
|
+
getAllLeafColumns,
|
|
45
30
|
options: {
|
|
46
31
|
columnFilterDisplayMode,
|
|
47
32
|
columnFilterModeOptions,
|
|
@@ -54,7 +39,6 @@ export const MRT_ColumnActionMenu = <TData extends MRT_RowData>({
|
|
|
54
39
|
enableSorting,
|
|
55
40
|
enableSortingRemoval,
|
|
56
41
|
icons: {
|
|
57
|
-
ArrowRightIcon,
|
|
58
42
|
ClearAllIcon,
|
|
59
43
|
DynamicFeedIcon,
|
|
60
44
|
FilterListIcon,
|
|
@@ -73,7 +57,6 @@ export const MRT_ColumnActionMenu = <TData extends MRT_RowData>({
|
|
|
73
57
|
setColumnOrder,
|
|
74
58
|
setColumnSizingInfo,
|
|
75
59
|
setShowColumnFilters,
|
|
76
|
-
toggleAllColumnsVisible,
|
|
77
60
|
} = table;
|
|
78
61
|
const { column } = header;
|
|
79
62
|
const { columnDef } = column;
|
|
@@ -139,11 +122,13 @@ export const MRT_ColumnActionMenu = <TData extends MRT_RowData>({
|
|
|
139
122
|
};
|
|
140
123
|
|
|
141
124
|
const handleShowAllColumns = () => {
|
|
142
|
-
|
|
125
|
+
getAllLeafColumns()
|
|
126
|
+
.filter((col) => col.columnDef.enableHiding !== false)
|
|
127
|
+
.forEach((col) => col.toggleVisibility(true));
|
|
143
128
|
setAnchorEl(null);
|
|
144
129
|
};
|
|
145
130
|
|
|
146
|
-
const handleOpenFilterModeMenu = (event:
|
|
131
|
+
const handleOpenFilterModeMenu = (event: MouseEvent<HTMLElement>) => {
|
|
147
132
|
event.stopPropagation();
|
|
148
133
|
setFilterMenuAnchorEl(event.currentTarget);
|
|
149
134
|
};
|
|
@@ -164,106 +149,75 @@ export const MRT_ColumnActionMenu = <TData extends MRT_RowData>({
|
|
|
164
149
|
...(enableSorting && column.getCanSort()
|
|
165
150
|
? [
|
|
166
151
|
enableSortingRemoval !== false && (
|
|
167
|
-
<
|
|
168
|
-
|
|
152
|
+
<MRT_ActionMenuItem
|
|
153
|
+
icon={<ClearAllIcon />}
|
|
169
154
|
key={0}
|
|
155
|
+
label={localization.clearSort}
|
|
170
156
|
onClick={handleClearSort}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
<Box sx={commonListItemStyles}>
|
|
174
|
-
<ListItemIcon>
|
|
175
|
-
<ClearAllIcon />
|
|
176
|
-
</ListItemIcon>
|
|
177
|
-
{localization.clearSort}
|
|
178
|
-
</Box>
|
|
179
|
-
</MenuItem>
|
|
157
|
+
table={table}
|
|
158
|
+
/>
|
|
180
159
|
),
|
|
181
|
-
<
|
|
160
|
+
<MRT_ActionMenuItem
|
|
182
161
|
disabled={column.getIsSorted() === 'asc'}
|
|
162
|
+
icon={
|
|
163
|
+
<SortIcon style={{ transform: 'rotate(180deg) scaleX(-1)' }} />
|
|
164
|
+
}
|
|
183
165
|
key={1}
|
|
166
|
+
label={localization.sortByColumnAsc?.replace(
|
|
167
|
+
'{column}',
|
|
168
|
+
String(columnDef.header),
|
|
169
|
+
)}
|
|
184
170
|
onClick={handleSortAsc}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
<ListItemIcon>
|
|
189
|
-
<SortIcon style={{ transform: 'rotate(180deg) scaleX(-1)' }} />
|
|
190
|
-
</ListItemIcon>
|
|
191
|
-
{localization.sortByColumnAsc?.replace(
|
|
192
|
-
'{column}',
|
|
193
|
-
String(columnDef.header),
|
|
194
|
-
)}
|
|
195
|
-
</Box>
|
|
196
|
-
</MenuItem>,
|
|
197
|
-
<MenuItem
|
|
171
|
+
table={table}
|
|
172
|
+
/>,
|
|
173
|
+
<MRT_ActionMenuItem
|
|
198
174
|
disabled={column.getIsSorted() === 'desc'}
|
|
199
175
|
divider={enableColumnFilters || enableGrouping || enableHiding}
|
|
176
|
+
icon={<SortIcon />}
|
|
200
177
|
key={2}
|
|
178
|
+
label={localization.sortByColumnDesc?.replace(
|
|
179
|
+
'{column}',
|
|
180
|
+
String(columnDef.header),
|
|
181
|
+
)}
|
|
201
182
|
onClick={handleSortDesc}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
<Box sx={commonListItemStyles}>
|
|
205
|
-
<ListItemIcon>
|
|
206
|
-
<SortIcon />
|
|
207
|
-
</ListItemIcon>
|
|
208
|
-
{localization.sortByColumnDesc?.replace(
|
|
209
|
-
'{column}',
|
|
210
|
-
String(columnDef.header),
|
|
211
|
-
)}
|
|
212
|
-
</Box>
|
|
213
|
-
</MenuItem>,
|
|
183
|
+
table={table}
|
|
184
|
+
/>,
|
|
214
185
|
]
|
|
215
186
|
: []),
|
|
216
187
|
...(enableColumnFilters && column.getCanFilter()
|
|
217
188
|
? [
|
|
218
|
-
<
|
|
189
|
+
<MRT_ActionMenuItem
|
|
219
190
|
disabled={
|
|
220
191
|
!columnFilterValue ||
|
|
221
192
|
(Array.isArray(columnFilterValue) &&
|
|
222
193
|
!columnFilterValue.filter((value) => value).length)
|
|
223
194
|
}
|
|
195
|
+
icon={<FilterListOffIcon />}
|
|
224
196
|
key={3}
|
|
197
|
+
label={localization.clearFilter}
|
|
225
198
|
onClick={handleClearFilter}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
<Box sx={commonListItemStyles}>
|
|
229
|
-
<ListItemIcon>
|
|
230
|
-
<FilterListOffIcon />
|
|
231
|
-
</ListItemIcon>
|
|
232
|
-
{localization.clearFilter}
|
|
233
|
-
</Box>
|
|
234
|
-
</MenuItem>,
|
|
199
|
+
table={table}
|
|
200
|
+
/>,
|
|
235
201
|
columnFilterDisplayMode === 'subheader' && (
|
|
236
|
-
<
|
|
202
|
+
<MRT_ActionMenuItem
|
|
237
203
|
disabled={showColumnFilters && !enableColumnFilterModes}
|
|
238
204
|
divider={enableGrouping || enableHiding}
|
|
205
|
+
icon={<FilterListIcon />}
|
|
239
206
|
key={4}
|
|
207
|
+
label={localization.filterByColumn?.replace(
|
|
208
|
+
'{column}',
|
|
209
|
+
String(columnDef.header),
|
|
210
|
+
)}
|
|
240
211
|
onClick={
|
|
241
212
|
showColumnFilters
|
|
242
213
|
? handleOpenFilterModeMenu
|
|
243
214
|
: handleFilterByColumn
|
|
244
215
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
</ListItemIcon>
|
|
251
|
-
{localization.filterByColumn?.replace(
|
|
252
|
-
'{column}',
|
|
253
|
-
String(columnDef.header),
|
|
254
|
-
)}
|
|
255
|
-
</Box>
|
|
256
|
-
{showFilterModeSubMenu && (
|
|
257
|
-
<IconButton
|
|
258
|
-
onClick={handleOpenFilterModeMenu}
|
|
259
|
-
onMouseEnter={handleOpenFilterModeMenu}
|
|
260
|
-
size="small"
|
|
261
|
-
sx={{ p: 0 }}
|
|
262
|
-
>
|
|
263
|
-
<ArrowRightIcon />
|
|
264
|
-
</IconButton>
|
|
265
|
-
)}
|
|
266
|
-
</MenuItem>
|
|
216
|
+
onOpenSubMenu={
|
|
217
|
+
showFilterModeSubMenu ? handleOpenFilterModeMenu : undefined
|
|
218
|
+
}
|
|
219
|
+
table={table}
|
|
220
|
+
/>
|
|
267
221
|
),
|
|
268
222
|
showFilterModeSubMenu && (
|
|
269
223
|
<MRT_FilterOptionMenu
|
|
@@ -279,121 +233,86 @@ export const MRT_ColumnActionMenu = <TData extends MRT_RowData>({
|
|
|
279
233
|
: []),
|
|
280
234
|
...(enableGrouping && column.getCanGroup()
|
|
281
235
|
? [
|
|
282
|
-
<
|
|
236
|
+
<MRT_ActionMenuItem
|
|
283
237
|
divider={enableColumnPinning}
|
|
238
|
+
icon={<DynamicFeedIcon />}
|
|
284
239
|
key={6}
|
|
240
|
+
label={localization[
|
|
241
|
+
column.getIsGrouped() ? 'ungroupByColumn' : 'groupByColumn'
|
|
242
|
+
]?.replace('{column}', String(columnDef.header))}
|
|
285
243
|
onClick={handleGroupByColumn}
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
<Box sx={commonListItemStyles}>
|
|
289
|
-
<ListItemIcon>
|
|
290
|
-
<DynamicFeedIcon />
|
|
291
|
-
</ListItemIcon>
|
|
292
|
-
{localization[
|
|
293
|
-
column.getIsGrouped() ? 'ungroupByColumn' : 'groupByColumn'
|
|
294
|
-
]?.replace('{column}', String(columnDef.header))}
|
|
295
|
-
</Box>
|
|
296
|
-
</MenuItem>,
|
|
244
|
+
table={table}
|
|
245
|
+
/>,
|
|
297
246
|
]
|
|
298
247
|
: []),
|
|
299
248
|
...(enableColumnPinning && column.getCanPin()
|
|
300
249
|
? [
|
|
301
|
-
<
|
|
250
|
+
<MRT_ActionMenuItem
|
|
302
251
|
disabled={column.getIsPinned() === 'left' || !column.getCanPin()}
|
|
252
|
+
icon={<PushPinIcon style={{ transform: 'rotate(90deg)' }} />}
|
|
303
253
|
key={7}
|
|
254
|
+
label={localization.pinToLeft}
|
|
304
255
|
onClick={() => handlePinColumn('left')}
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
<ListItemIcon>
|
|
309
|
-
<PushPinIcon style={{ transform: 'rotate(90deg)' }} />
|
|
310
|
-
</ListItemIcon>
|
|
311
|
-
{localization.pinToLeft}
|
|
312
|
-
</Box>
|
|
313
|
-
</MenuItem>,
|
|
314
|
-
<MenuItem
|
|
256
|
+
table={table}
|
|
257
|
+
/>,
|
|
258
|
+
<MRT_ActionMenuItem
|
|
315
259
|
disabled={column.getIsPinned() === 'right' || !column.getCanPin()}
|
|
260
|
+
icon={<PushPinIcon style={{ transform: 'rotate(-90deg)' }} />}
|
|
316
261
|
key={8}
|
|
262
|
+
label={localization.pinToRight}
|
|
317
263
|
onClick={() => handlePinColumn('right')}
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
<ListItemIcon>
|
|
322
|
-
<PushPinIcon style={{ transform: 'rotate(-90deg)' }} />
|
|
323
|
-
</ListItemIcon>
|
|
324
|
-
{localization.pinToRight}
|
|
325
|
-
</Box>
|
|
326
|
-
</MenuItem>,
|
|
327
|
-
<MenuItem
|
|
264
|
+
table={table}
|
|
265
|
+
/>,
|
|
266
|
+
<MRT_ActionMenuItem
|
|
328
267
|
disabled={!column.getIsPinned()}
|
|
329
268
|
divider={enableHiding}
|
|
269
|
+
icon={<PushPinIcon />}
|
|
330
270
|
key={9}
|
|
271
|
+
label={localization.unpin}
|
|
331
272
|
onClick={() => handlePinColumn(false)}
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
<Box sx={commonListItemStyles}>
|
|
335
|
-
<ListItemIcon>
|
|
336
|
-
<PushPinIcon />
|
|
337
|
-
</ListItemIcon>
|
|
338
|
-
{localization.unpin}
|
|
339
|
-
</Box>
|
|
340
|
-
</MenuItem>,
|
|
273
|
+
table={table}
|
|
274
|
+
/>,
|
|
341
275
|
]
|
|
342
276
|
: []),
|
|
343
277
|
...(enableColumnResizing && column.getCanResize()
|
|
344
278
|
? [
|
|
345
|
-
<
|
|
279
|
+
<MRT_ActionMenuItem
|
|
346
280
|
disabled={!columnSizing[column.id]}
|
|
281
|
+
icon={<RestartAltIcon />}
|
|
347
282
|
key={10}
|
|
283
|
+
label={localization.resetColumnSize}
|
|
348
284
|
onClick={handleResetColumnSize}
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
<Box sx={commonListItemStyles}>
|
|
352
|
-
<ListItemIcon>
|
|
353
|
-
<RestartAltIcon />
|
|
354
|
-
</ListItemIcon>
|
|
355
|
-
{localization.resetColumnSize}
|
|
356
|
-
</Box>
|
|
357
|
-
</MenuItem>,
|
|
285
|
+
table={table}
|
|
286
|
+
/>,
|
|
358
287
|
]
|
|
359
288
|
: []),
|
|
360
289
|
...(enableHiding
|
|
361
290
|
? [
|
|
362
|
-
<
|
|
291
|
+
<MRT_ActionMenuItem
|
|
363
292
|
disabled={!column.getCanHide()}
|
|
293
|
+
icon={<VisibilityOffIcon />}
|
|
364
294
|
key={11}
|
|
295
|
+
label={localization.hideColumn?.replace(
|
|
296
|
+
'{column}',
|
|
297
|
+
String(columnDef.header),
|
|
298
|
+
)}
|
|
365
299
|
onClick={handleHideColumn}
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
<ListItemIcon>
|
|
370
|
-
<VisibilityOffIcon />
|
|
371
|
-
</ListItemIcon>
|
|
372
|
-
{localization.hideColumn?.replace(
|
|
373
|
-
'{column}',
|
|
374
|
-
String(columnDef.header),
|
|
375
|
-
)}
|
|
376
|
-
</Box>
|
|
377
|
-
</MenuItem>,
|
|
378
|
-
<MenuItem
|
|
300
|
+
table={table}
|
|
301
|
+
/>,
|
|
302
|
+
<MRT_ActionMenuItem
|
|
379
303
|
disabled={
|
|
380
304
|
!Object.values(columnVisibility).filter((visible) => !visible)
|
|
381
305
|
.length
|
|
382
306
|
}
|
|
307
|
+
icon={<ViewColumnIcon />}
|
|
383
308
|
key={12}
|
|
309
|
+
label={localization.showAllColumns?.replace(
|
|
310
|
+
'{column}',
|
|
311
|
+
String(columnDef.header),
|
|
312
|
+
)}
|
|
384
313
|
onClick={handleShowAllColumns}
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
<Box sx={commonListItemStyles}>
|
|
388
|
-
<ListItemIcon>
|
|
389
|
-
<ViewColumnIcon />
|
|
390
|
-
</ListItemIcon>
|
|
391
|
-
{localization.showAllColumns?.replace(
|
|
392
|
-
'{column}',
|
|
393
|
-
String(columnDef.header),
|
|
394
|
-
)}
|
|
395
|
-
</Box>
|
|
396
|
-
</MenuItem>,
|
|
314
|
+
table={table}
|
|
315
|
+
/>,
|
|
397
316
|
]
|
|
398
317
|
: []),
|
|
399
318
|
].filter(Boolean);
|
|
@@ -410,6 +329,7 @@ export const MRT_ColumnActionMenu = <TData extends MRT_RowData>({
|
|
|
410
329
|
},
|
|
411
330
|
}}
|
|
412
331
|
anchorEl={anchorEl}
|
|
332
|
+
disableScrollLock
|
|
413
333
|
onClose={() => setAnchorEl(null)}
|
|
414
334
|
open={!!anchorEl}
|
|
415
335
|
{...rest}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { useMemo } from 'react';
|
|
2
|
-
import Box from '@mui/material/Box';
|
|
3
2
|
import Menu, { type MenuProps } from '@mui/material/Menu';
|
|
4
|
-
import MenuItem from '@mui/material/MenuItem';
|
|
5
3
|
import { useTheme } from '@mui/material/styles';
|
|
4
|
+
import { MRT_ActionMenuItem } from './MRT_ActionMenuItem';
|
|
6
5
|
import {
|
|
7
6
|
type MRT_FilterOption,
|
|
8
7
|
type MRT_Header,
|
|
@@ -252,6 +251,7 @@ export const MRT_FilterOptionMenu = <TData extends MRT_RowData>({
|
|
|
252
251
|
}}
|
|
253
252
|
anchorEl={anchorEl}
|
|
254
253
|
anchorOrigin={{ horizontal: 'right', vertical: 'center' }}
|
|
254
|
+
disableScrollLock
|
|
255
255
|
onClose={() => setAnchorEl(null)}
|
|
256
256
|
open={!!anchorEl}
|
|
257
257
|
{...rest}
|
|
@@ -276,23 +276,16 @@ export const MRT_FilterOptionMenu = <TData extends MRT_RowData>({
|
|
|
276
276
|
})) ??
|
|
277
277
|
internalFilterOptions.map(
|
|
278
278
|
({ divider, label, option, symbol }, index) => (
|
|
279
|
-
<
|
|
279
|
+
<MRT_ActionMenuItem
|
|
280
280
|
divider={divider}
|
|
281
|
+
icon={symbol}
|
|
281
282
|
key={index}
|
|
283
|
+
label={label}
|
|
282
284
|
onClick={() => handleSelectFilterMode(option as MRT_FilterOption)}
|
|
283
285
|
selected={option === filterOption}
|
|
284
|
-
|
|
285
|
-
alignItems: 'center',
|
|
286
|
-
display: 'flex',
|
|
287
|
-
gap: '2ch',
|
|
288
|
-
my: 0,
|
|
289
|
-
py: '6px',
|
|
290
|
-
}}
|
|
286
|
+
table={table}
|
|
291
287
|
value={option}
|
|
292
|
-
|
|
293
|
-
<Box sx={{ fontSize: '1.25rem', width: '2ch' }}>{symbol}</Box>
|
|
294
|
-
{label}
|
|
295
|
-
</MenuItem>
|
|
288
|
+
/>
|
|
296
289
|
),
|
|
297
290
|
)}
|
|
298
291
|
</Menu>
|
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import { type MouseEvent } from 'react';
|
|
2
|
-
import Box from '@mui/material/Box';
|
|
3
|
-
import ListItemIcon from '@mui/material/ListItemIcon';
|
|
4
2
|
import Menu, { type MenuProps } from '@mui/material/Menu';
|
|
5
|
-
import MenuItem from '@mui/material/MenuItem';
|
|
6
3
|
import { useTheme } from '@mui/material/styles';
|
|
7
|
-
import {
|
|
8
|
-
commonListItemStyles,
|
|
9
|
-
commonMenuItemStyles,
|
|
10
|
-
} from './MRT_ColumnActionMenu';
|
|
4
|
+
import { MRT_ActionMenuItem } from './MRT_ActionMenuItem';
|
|
11
5
|
import {
|
|
12
6
|
type MRT_Row,
|
|
13
7
|
type MRT_RowData,
|
|
@@ -58,6 +52,7 @@ export const MRT_RowActionMenu = <TData extends MRT_RowData>({
|
|
|
58
52
|
},
|
|
59
53
|
}}
|
|
60
54
|
anchorEl={anchorEl}
|
|
55
|
+
disableScrollLock
|
|
61
56
|
onClick={(event) => event.stopPropagation()}
|
|
62
57
|
onClose={() => setAnchorEl(null)}
|
|
63
58
|
open={!!anchorEl}
|
|
@@ -65,14 +60,12 @@ export const MRT_RowActionMenu = <TData extends MRT_RowData>({
|
|
|
65
60
|
>
|
|
66
61
|
{parseFromValuesOrFunc(enableEditing, row) &&
|
|
67
62
|
['modal', 'row'].includes(editDisplayMode!) && (
|
|
68
|
-
<
|
|
69
|
-
<
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
</Box>
|
|
75
|
-
</MenuItem>
|
|
63
|
+
<MRT_ActionMenuItem
|
|
64
|
+
icon={<EditIcon />}
|
|
65
|
+
label={localization.edit}
|
|
66
|
+
onClick={handleEdit}
|
|
67
|
+
table={table}
|
|
68
|
+
/>
|
|
76
69
|
)}
|
|
77
70
|
{renderRowActionMenuItems?.({
|
|
78
71
|
closeMenu: () => setAnchorEl(null),
|
|
@@ -91,6 +91,7 @@ export const MRT_ShowHideColumnsMenu = <TData extends MRT_RowData>({
|
|
|
91
91
|
},
|
|
92
92
|
}}
|
|
93
93
|
anchorEl={anchorEl}
|
|
94
|
+
disableScrollLock
|
|
94
95
|
onClose={() => setAnchorEl(null)}
|
|
95
96
|
open={!!anchorEl}
|
|
96
97
|
{...rest}
|
|
@@ -114,7 +115,9 @@ export const MRT_ShowHideColumnsMenu = <TData extends MRT_RowData>({
|
|
|
114
115
|
{enableColumnOrdering && (
|
|
115
116
|
<Button
|
|
116
117
|
onClick={() =>
|
|
117
|
-
table.setColumnOrder(
|
|
118
|
+
table.setColumnOrder(
|
|
119
|
+
getDefaultColumnOrderIds(table.options, true),
|
|
120
|
+
)
|
|
118
121
|
}
|
|
119
122
|
>
|
|
120
123
|
{localization.resetOrder}
|
|
@@ -67,6 +67,7 @@ export const MRT_Table = <TData extends MRT_RowData>({
|
|
|
67
67
|
sx={(theme) => ({
|
|
68
68
|
borderCollapse: 'separate',
|
|
69
69
|
display: layoutMode?.startsWith('grid') ? 'grid' : undefined,
|
|
70
|
+
position: 'relative',
|
|
70
71
|
...(parseFromValuesOrFunc(tableProps?.sx, theme) as any),
|
|
71
72
|
})}
|
|
72
73
|
>
|
|
@@ -6,6 +6,7 @@ import { MRT_Table } from './MRT_Table';
|
|
|
6
6
|
import { MRT_TableLoadingOverlay } from './MRT_TableLoadingOverlay';
|
|
7
7
|
import { type MRT_RowData, type MRT_TableInstance } from '../../types';
|
|
8
8
|
import { parseFromValuesOrFunc } from '../../utils/utils';
|
|
9
|
+
import { MRT_CellActionMenu } from '../menus/MRT_CellActionMenu';
|
|
9
10
|
import { MRT_EditRowModal } from '../modals/MRT_EditRowModal';
|
|
10
11
|
|
|
11
12
|
const useIsomorphicLayoutEffect =
|
|
@@ -24,12 +25,14 @@ export const MRT_TableContainer = <TData extends MRT_RowData>({
|
|
|
24
25
|
options: {
|
|
25
26
|
createDisplayMode,
|
|
26
27
|
editDisplayMode,
|
|
28
|
+
enableCellActions,
|
|
27
29
|
enableStickyHeader,
|
|
28
30
|
muiTableContainerProps,
|
|
29
31
|
},
|
|
30
32
|
refs: { bottomToolbarRef, tableContainerRef, topToolbarRef },
|
|
31
33
|
} = table;
|
|
32
34
|
const {
|
|
35
|
+
actionCell,
|
|
33
36
|
creatingRow,
|
|
34
37
|
editingRow,
|
|
35
38
|
isFullScreen,
|
|
@@ -101,6 +104,7 @@ export const MRT_TableContainer = <TData extends MRT_RowData>({
|
|
|
101
104
|
{(createModalOpen || editModalOpen) && (
|
|
102
105
|
<MRT_EditRowModal open table={table} />
|
|
103
106
|
)}
|
|
107
|
+
{enableCellActions && actionCell && <MRT_CellActionMenu table={table} />}
|
|
104
108
|
</TableContainer>
|
|
105
109
|
);
|
|
106
110
|
};
|
|
@@ -8,6 +8,7 @@ import Select, { type SelectProps } from '@mui/material/Select';
|
|
|
8
8
|
import Tooltip from '@mui/material/Tooltip';
|
|
9
9
|
import Typography from '@mui/material/Typography';
|
|
10
10
|
import { useTheme } from '@mui/material/styles';
|
|
11
|
+
import useMediaQuery from '@mui/material/useMediaQuery';
|
|
11
12
|
import { type MRT_RowData, type MRT_TableInstance } from '../../types';
|
|
12
13
|
import { flipIconStyles, getCommonTooltipProps } from '../../utils/style.utils';
|
|
13
14
|
import { parseFromValuesOrFunc } from '../../utils/utils';
|
|
@@ -33,6 +34,7 @@ export const MRT_TablePagination = <TData extends MRT_RowData>({
|
|
|
33
34
|
...rest
|
|
34
35
|
}: Props<TData>) => {
|
|
35
36
|
const theme = useTheme();
|
|
37
|
+
const isMobile = useMediaQuery('(max-width: 720px)');
|
|
36
38
|
|
|
37
39
|
const {
|
|
38
40
|
getPrePaginationRowModel,
|
|
@@ -67,18 +69,22 @@ export const MRT_TablePagination = <TData extends MRT_RowData>({
|
|
|
67
69
|
const lastRowIndex = Math.min(pageIndex * pageSize + pageSize, totalRowCount);
|
|
68
70
|
|
|
69
71
|
const {
|
|
70
|
-
SelectProps,
|
|
72
|
+
SelectProps = {},
|
|
71
73
|
disabled = false,
|
|
72
74
|
rowsPerPageOptions = defaultRowsPerPage,
|
|
73
75
|
showFirstButton = showFirstLastPageButtons,
|
|
74
76
|
showLastButton = showFirstLastPageButtons,
|
|
75
77
|
showRowsPerPage = true,
|
|
76
|
-
...
|
|
78
|
+
...restPaginationProps
|
|
77
79
|
} = paginationProps ?? {};
|
|
78
80
|
|
|
79
81
|
const disableBack = pageIndex <= 0 || disabled;
|
|
80
82
|
const disableNext = lastRowIndex >= totalRowCount || disabled;
|
|
81
83
|
|
|
84
|
+
if (isMobile && SelectProps?.native !== false) {
|
|
85
|
+
SelectProps.native = true;
|
|
86
|
+
}
|
|
87
|
+
|
|
82
88
|
const tooltipProps = getCommonTooltipProps();
|
|
83
89
|
|
|
84
90
|
return (
|
|
@@ -109,10 +115,13 @@ export const MRT_TablePagination = <TData extends MRT_RowData>({
|
|
|
109
115
|
{localization.rowsPerPage}
|
|
110
116
|
</InputLabel>
|
|
111
117
|
<Select
|
|
118
|
+
MenuProps={{ disableScrollLock: true }}
|
|
112
119
|
disableUnderline
|
|
113
120
|
disabled={disabled}
|
|
114
|
-
|
|
115
|
-
|
|
121
|
+
inputProps={{
|
|
122
|
+
'aria-label': localization.rowsPerPage,
|
|
123
|
+
id: 'mrt-rows-per-page',
|
|
124
|
+
}}
|
|
116
125
|
label={localization.rowsPerPage}
|
|
117
126
|
onChange={(event) => setPageSize(+(event.target.value as any))}
|
|
118
127
|
sx={{ mb: 0 }}
|
|
@@ -159,7 +168,7 @@ export const MRT_TablePagination = <TData extends MRT_RowData>({
|
|
|
159
168
|
)}
|
|
160
169
|
showFirstButton={showFirstButton}
|
|
161
170
|
showLastButton={showLastButton}
|
|
162
|
-
{...
|
|
171
|
+
{...restPaginationProps}
|
|
163
172
|
/>
|
|
164
173
|
) : paginationDisplayMode === 'default' ? (
|
|
165
174
|
<>
|
|
@@ -4,18 +4,11 @@ import {
|
|
|
4
4
|
type MRT_RowData,
|
|
5
5
|
type MRT_StatefulTableOptions,
|
|
6
6
|
} from '../../types';
|
|
7
|
-
import {
|
|
8
|
-
defaultDisplayColumnProps,
|
|
9
|
-
showRowActionsColumn,
|
|
10
|
-
} from '../../utils/displayColumn.utils';
|
|
7
|
+
import { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';
|
|
11
8
|
|
|
12
9
|
export const getMRT_RowActionsColumnDef = <TData extends MRT_RowData>(
|
|
13
10
|
tableOptions: MRT_StatefulTableOptions<TData>,
|
|
14
11
|
): MRT_ColumnDef<TData> | null => {
|
|
15
|
-
if (!showRowActionsColumn(tableOptions)) {
|
|
16
|
-
return null;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
12
|
return {
|
|
20
13
|
Cell: ({ cell, row, staticRowIndex, table }) => (
|
|
21
14
|
<MRT_ToggleRowActionMenuButton
|
|
@@ -5,18 +5,11 @@ import {
|
|
|
5
5
|
type MRT_RowData,
|
|
6
6
|
type MRT_StatefulTableOptions,
|
|
7
7
|
} from '../../types';
|
|
8
|
-
import {
|
|
9
|
-
defaultDisplayColumnProps,
|
|
10
|
-
showRowDragColumn,
|
|
11
|
-
} from '../../utils/displayColumn.utils';
|
|
8
|
+
import { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';
|
|
12
9
|
|
|
13
10
|
export const getMRT_RowDragColumnDef = <TData extends MRT_RowData>(
|
|
14
11
|
tableOptions: MRT_StatefulTableOptions<TData>,
|
|
15
12
|
): MRT_ColumnDef<TData> | null => {
|
|
16
|
-
if (!showRowDragColumn(tableOptions)) {
|
|
17
|
-
return null;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
13
|
return {
|
|
21
14
|
Cell: ({ row, rowRef, table }) => (
|
|
22
15
|
<MRT_TableBodyRowGrabHandle
|
|
@@ -8,19 +8,12 @@ import {
|
|
|
8
8
|
type MRT_RowData,
|
|
9
9
|
type MRT_StatefulTableOptions,
|
|
10
10
|
} from '../../types';
|
|
11
|
-
import {
|
|
12
|
-
defaultDisplayColumnProps,
|
|
13
|
-
showRowExpandColumn,
|
|
14
|
-
} from '../../utils/displayColumn.utils';
|
|
11
|
+
import { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';
|
|
15
12
|
import { getCommonTooltipProps } from '../../utils/style.utils';
|
|
16
13
|
|
|
17
14
|
export const getMRT_RowExpandColumnDef = <TData extends MRT_RowData>(
|
|
18
15
|
tableOptions: MRT_StatefulTableOptions<TData>,
|
|
19
16
|
): MRT_ColumnDef<TData> | null => {
|
|
20
|
-
if (!showRowExpandColumn(tableOptions)) {
|
|
21
|
-
return null;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
17
|
const {
|
|
25
18
|
defaultColumn,
|
|
26
19
|
enableExpandAll,
|