material-react-table-narender 2.13.20 → 2.13.22
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.esm.js +66 -51
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +66 -51
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/buttons/MRT_ToggleNavigationButton.tsx +49 -0
- package/src/components/menus/MRT_ShowHideColumnsMenu.tsx +3 -3
- package/src/components/toolbar/MRT_ToolbarInternalButtons.tsx +6 -0
- package/src/types.ts +1 -0
- package/src/utils/cell.utils.ts +52 -39
package/package.json
CHANGED
@@ -0,0 +1,49 @@
|
|
1
|
+
import { useState } from 'react';
|
2
|
+
import IconButton, { type IconButtonProps } from '@mui/material/IconButton';
|
3
|
+
import Tooltip from '@mui/material/Tooltip';
|
4
|
+
import { type MRT_RowData, type MRT_TableInstance } from '../../types';
|
5
|
+
|
6
|
+
export interface MRT_ToggleNavigationButtonProps<TData extends MRT_RowData>
|
7
|
+
extends IconButtonProps {
|
8
|
+
table: MRT_TableInstance<TData>;
|
9
|
+
}
|
10
|
+
|
11
|
+
export const MRT_ToggleNavigationButton = <TData extends MRT_RowData>({
|
12
|
+
table,
|
13
|
+
...rest
|
14
|
+
}: MRT_ToggleNavigationButtonProps<TData>) => {
|
15
|
+
const {
|
16
|
+
getState,
|
17
|
+
options: {
|
18
|
+
icons: { FullscreenExitIcon, FullscreenIcon },
|
19
|
+
localization,
|
20
|
+
},
|
21
|
+
setEnableKeyboardShortcuts,
|
22
|
+
} = table;
|
23
|
+
const { enableKeyboardShortcuts } = getState();
|
24
|
+
|
25
|
+
const [tooltipOpened, setTooltipOpened] = useState(false);
|
26
|
+
|
27
|
+
const handleToggleFullScreen = () => {
|
28
|
+
setTooltipOpened(false);
|
29
|
+
setEnableKeyboardShortcuts(!enableKeyboardShortcuts);
|
30
|
+
};
|
31
|
+
|
32
|
+
return (
|
33
|
+
<Tooltip
|
34
|
+
open={tooltipOpened}
|
35
|
+
title={rest?.title ?? localization.toggleFullScreen}
|
36
|
+
>
|
37
|
+
<IconButton
|
38
|
+
aria-label={localization.toggleFullScreen}
|
39
|
+
onClick={handleToggleFullScreen}
|
40
|
+
onMouseEnter={() => setTooltipOpened(true)}
|
41
|
+
onMouseLeave={() => setTooltipOpened(false)}
|
42
|
+
{...rest}
|
43
|
+
title={undefined}
|
44
|
+
>
|
45
|
+
{enableKeyboardShortcuts ? <FullscreenExitIcon /> : <FullscreenIcon />}
|
46
|
+
</IconButton>
|
47
|
+
</Tooltip>
|
48
|
+
);
|
49
|
+
};
|
@@ -40,7 +40,7 @@ export const MRT_ShowHideColumnsMenu = <TData extends MRT_RowData>({
|
|
40
40
|
enableColumnPinning,
|
41
41
|
enableHiding,
|
42
42
|
localization,
|
43
|
-
enableColumnResizing,
|
43
|
+
// enableColumnResizing,
|
44
44
|
mrtTheme: { menuBackgroundColor },
|
45
45
|
},
|
46
46
|
} = table;
|
@@ -141,7 +141,7 @@ export const MRT_ShowHideColumnsMenu = <TData extends MRT_RowData>({
|
|
141
141
|
{localization.showAll}
|
142
142
|
</Button>
|
143
143
|
)}
|
144
|
-
{
|
144
|
+
{/* {
|
145
145
|
enableColumnResizing && (
|
146
146
|
<Button
|
147
147
|
onClick={() => {
|
@@ -151,7 +151,7 @@ export const MRT_ShowHideColumnsMenu = <TData extends MRT_RowData>({
|
|
151
151
|
{localization.resetColumnSize}
|
152
152
|
</Button>
|
153
153
|
)
|
154
|
-
}
|
154
|
+
} */}
|
155
155
|
</Box>
|
156
156
|
<Divider />
|
157
157
|
{allColumns.map((column, index) => (
|
@@ -6,6 +6,7 @@ import { MRT_ToggleDensePaddingButton } from '../buttons/MRT_ToggleDensePaddingB
|
|
6
6
|
import { MRT_ToggleFiltersButton } from '../buttons/MRT_ToggleFiltersButton';
|
7
7
|
import { MRT_ToggleFullScreenButton } from '../buttons/MRT_ToggleFullScreenButton';
|
8
8
|
import { MRT_ToggleGlobalFilterButton } from '../buttons/MRT_ToggleGlobalFilterButton';
|
9
|
+
import { MRT_ToggleNavigationButton } from '../buttons/MRT_ToggleNavigationButton';
|
9
10
|
|
10
11
|
export interface MRT_ToolbarInternalButtonsProps<TData extends MRT_RowData>
|
11
12
|
extends BoxProps {
|
@@ -29,6 +30,7 @@ export const MRT_ToolbarInternalButtons = <TData extends MRT_RowData>({
|
|
29
30
|
enableHiding,
|
30
31
|
initialState,
|
31
32
|
renderToolbarInternalActions,
|
33
|
+
enableKeyboardShortcuts
|
32
34
|
},
|
33
35
|
} = table;
|
34
36
|
|
@@ -65,6 +67,10 @@ export const MRT_ToolbarInternalButtons = <TData extends MRT_RowData>({
|
|
65
67
|
{enableFullScreenToggle && (
|
66
68
|
<MRT_ToggleFullScreenButton table={table} />
|
67
69
|
)}
|
70
|
+
{/* {enableKeyboardShortcuts && (
|
71
|
+
<MRT_ToggleNavigationButton table={table} />
|
72
|
+
)} */}
|
73
|
+
<MRT_ToggleNavigationButton table={table} />
|
68
74
|
</>
|
69
75
|
)}
|
70
76
|
</Box>
|
package/src/types.ts
CHANGED
package/src/utils/cell.utils.ts
CHANGED
@@ -91,39 +91,49 @@ export const cellKeyboardShortcuts = <TData extends MRT_RowData = MRT_RowData>({
|
|
91
91
|
const { enableKeyboardShortcuts } = getState();
|
92
92
|
|
93
93
|
// alt + n
|
94
|
-
if (event.altKey && event.key.toLocaleLowerCase() === 'n') {
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
}
|
94
|
+
// if (event.altKey && event.key.toLocaleLowerCase() === 'n') {
|
95
|
+
// event.preventDefault();
|
96
|
+
// setEnableKeyboardShortcuts(!enableKeyboardShortcuts);
|
97
|
+
// const currentCell = event.currentTarget;
|
98
|
+
|
99
|
+
|
100
|
+
// if (enableKeyboardShortcuts) {
|
101
|
+
// const input = currentCell.querySelector('input') as HTMLInputElement;
|
102
|
+
// const select = currentCell.querySelector('select') as HTMLSelectElement;
|
103
|
+
// const checkbox = currentCell.querySelector('input[type="checkbox"]') as HTMLInputElement;
|
104
|
+
// const button = currentCell.querySelector('button') as HTMLButtonElement;
|
105
|
+
// const autocomplete = currentCell.querySelector('.MuiAutocomplete-root input[type="text"]') as HTMLInputElement;
|
106
|
+
|
107
|
+
|
108
|
+
// if (autocomplete) {
|
109
|
+
// autocomplete.focus();
|
110
|
+
// autocomplete.select?.();
|
111
|
+
// } else if (input) {
|
112
|
+
// input.focus();
|
113
|
+
// input.select?.();
|
114
|
+
// } else if (select) {
|
115
|
+
// select.focus();
|
116
|
+
// } else if (checkbox) {
|
117
|
+
// checkbox.focus();
|
118
|
+
// // checkbox.click();
|
119
|
+
// } else if (button) {
|
120
|
+
// button.focus();
|
121
|
+
// } else {
|
122
|
+
// currentCell.focus();
|
123
|
+
// }
|
124
|
+
// }
|
125
|
+
|
126
|
+
// }
|
127
|
+
|
128
|
+
|
129
|
+
// if (event.altKey && event.key.toLocaleLowerCase() === 'n') {
|
130
|
+
// event.preventDefault();
|
131
|
+
// setEnableKeyboardShortcuts(!enableKeyboardShortcuts);
|
132
|
+
// }
|
133
|
+
|
134
|
+
|
135
|
+
|
125
136
|
|
126
|
-
}
|
127
137
|
|
128
138
|
// if (!table.options.enableKeyboardShortcuts) return;
|
129
139
|
if (!enableKeyboardShortcuts) return
|
@@ -195,11 +205,11 @@ const autocomplete = currentCell.querySelector('.MuiAutocomplete-root input[type
|
|
195
205
|
// Focus the appropriate element
|
196
206
|
if (autocomplete) {
|
197
207
|
autocomplete.focus();
|
198
|
-
autocomplete.select?.();
|
208
|
+
// autocomplete.select?.();
|
199
209
|
}
|
200
210
|
else if (input) {
|
201
211
|
input.focus();
|
202
|
-
input.select?.();
|
212
|
+
// input.select?.();
|
203
213
|
} else if (select) {
|
204
214
|
select.focus();
|
205
215
|
} else if (checkbox) {
|
@@ -241,8 +251,6 @@ else if (input) {
|
|
241
251
|
|
242
252
|
if (['ArrowDown','ArrowUp'].includes(event.key)) {
|
243
253
|
const autocomplete = currentCell.querySelector('.MuiAutocomplete-root input[type="text"]');
|
244
|
-
|
245
|
-
// Check if the autocomplete input exists and is focused
|
246
254
|
if (autocomplete && document.activeElement === autocomplete) {
|
247
255
|
|
248
256
|
|
@@ -259,14 +267,11 @@ if (['ArrowDown','ArrowUp'].includes(event.key)) {
|
|
259
267
|
}
|
260
268
|
}
|
261
269
|
}
|
262
|
-
|
263
|
-
// Additional logic if not an Autocomplete or not focused
|
264
270
|
}
|
265
271
|
|
266
272
|
|
267
273
|
|
268
274
|
|
269
|
-
|
270
275
|
const currentRow = parentElement || currentCell.closest('tr');
|
271
276
|
const tableElement = containerElement || currentCell.closest('table');
|
272
277
|
const allCells =
|
@@ -277,6 +282,8 @@ if (['ArrowDown','ArrowUp'].includes(event.key)) {
|
|
277
282
|
const currentIndex = parseInt(
|
278
283
|
currentCell.getAttribute('data-index') || '0',
|
279
284
|
);
|
285
|
+
|
286
|
+
|
280
287
|
let nextCell: HTMLElement | undefined = undefined;
|
281
288
|
|
282
289
|
//home/end first or last cell in row
|
@@ -317,6 +324,12 @@ if (['ArrowDown','ArrowUp'].includes(event.key)) {
|
|
317
324
|
) as HTMLElement | undefined;
|
318
325
|
};
|
319
326
|
|
327
|
+
// const findCurrentCell = () => {
|
328
|
+
// return allCells.find((cell) =>
|
329
|
+
// cell.matches(`[data-index="${currentIndex}"]`),
|
330
|
+
// );
|
331
|
+
// }
|
332
|
+
|
320
333
|
switch (event.key) {
|
321
334
|
case 'ArrowRight':
|
322
335
|
nextCell = findAdjacentCell(currentIndex + 1, 'f');
|