material-react-table 3.0.0-beta.1 → 3.0.0-beta.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.
- package/dist/index.d.ts +87 -87
- package/dist/index.esm.js +79 -42
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +79 -42
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/body/MRT_TableBodyCell.tsx +9 -11
- package/src/components/footer/MRT_TableFooterCell.tsx +8 -9
- package/src/components/head/MRT_TableHeadCell.tsx +10 -11
- package/src/hooks/useMRT_TableOptions.ts +2 -2
- package/src/types.ts +66 -66
- package/src/utils/cell.utils.ts +57 -11
package/dist/index.js
CHANGED
@@ -497,6 +497,10 @@ const getMRT_SelectAllHandler = ({ table }) => (event, value, forceAll) => {
|
|
497
497
|
lastSelectedRowId.current = null;
|
498
498
|
};
|
499
499
|
|
500
|
+
const isWinCtrlMacMeta = (event) => {
|
501
|
+
return ((event.ctrlKey && navigator.platform.toLowerCase().includes('win')) ||
|
502
|
+
(event.metaKey && navigator.platform.toLowerCase().includes('mac')));
|
503
|
+
};
|
500
504
|
const isCellEditable = ({ cell, table, }) => {
|
501
505
|
const { enableEditing } = table.options;
|
502
506
|
const { column: { columnDef }, row, } = cell;
|
@@ -519,13 +523,17 @@ const openEditingCell = ({ cell, table, }) => {
|
|
519
523
|
});
|
520
524
|
}
|
521
525
|
};
|
522
|
-
const
|
526
|
+
const cellKeyboardShortcuts = ({ cell, cellElements, cellValue, containerElement, event, header, parentElement, table, }) => {
|
523
527
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
524
|
-
if (
|
528
|
+
if (!table.options.enableKeyboardShortcuts)
|
529
|
+
return;
|
530
|
+
const currentCell = event.currentTarget;
|
531
|
+
if (cellValue && isWinCtrlMacMeta(event) && event.key === 'c') {
|
525
532
|
navigator.clipboard.writeText(cellValue);
|
526
533
|
}
|
527
534
|
else if (['Enter', ' '].includes(event.key)) {
|
528
535
|
if (((_a = cell === null || cell === void 0 ? void 0 : cell.column) === null || _a === void 0 ? void 0 : _a.id) === 'mrt-row-select') {
|
536
|
+
event.preventDefault();
|
529
537
|
getMRT_RowSelectionHandler({
|
530
538
|
row: cell.row,
|
531
539
|
table,
|
@@ -535,6 +543,7 @@ const cellNavigation = ({ cell, cellElements, cellValue, containerElement, event
|
|
535
543
|
}
|
536
544
|
else if (((_b = header === null || header === void 0 ? void 0 : header.column) === null || _b === void 0 ? void 0 : _b.id) === 'mrt-row-select' &&
|
537
545
|
table.options.enableSelectAll) {
|
546
|
+
event.preventDefault();
|
538
547
|
getMRT_SelectAllHandler({
|
539
548
|
table,
|
540
549
|
})(event);
|
@@ -542,26 +551,44 @@ const cellNavigation = ({ cell, cellElements, cellValue, containerElement, event
|
|
542
551
|
else if (((_c = cell === null || cell === void 0 ? void 0 : cell.column) === null || _c === void 0 ? void 0 : _c.id) === 'mrt-row-expand' &&
|
543
552
|
(cell.row.getCanExpand() ||
|
544
553
|
((_e = (_d = table.options).renderDetailPanel) === null || _e === void 0 ? void 0 : _e.call(_d, { row: cell.row, table })))) {
|
554
|
+
event.preventDefault();
|
545
555
|
cell.row.toggleExpanded();
|
546
556
|
}
|
547
557
|
else if (((_f = header === null || header === void 0 ? void 0 : header.column) === null || _f === void 0 ? void 0 : _f.id) === 'mrt-row-expand' &&
|
548
558
|
table.options.enableExpandAll) {
|
559
|
+
event.preventDefault();
|
549
560
|
table.toggleAllRowsExpanded();
|
550
561
|
}
|
551
|
-
else if ((_g = header === null || header === void 0 ? void 0 : header.column) === null || _g === void 0 ? void 0 : _g.getCanSort()) {
|
552
|
-
header.column.toggleSorting();
|
553
|
-
}
|
554
562
|
else if ((cell === null || cell === void 0 ? void 0 : cell.column.id) === 'mrt-row-pin') {
|
563
|
+
event.preventDefault();
|
555
564
|
cell.row.getIsPinned()
|
556
565
|
? cell.row.pin(false)
|
557
|
-
: cell.row.pin(((
|
566
|
+
: cell.row.pin(((_g = table.options.rowPinningDisplayMode) === null || _g === void 0 ? void 0 : _g.includes('bottom'))
|
558
567
|
? 'bottom'
|
559
568
|
: 'top');
|
560
569
|
}
|
570
|
+
else if (header && isWinCtrlMacMeta(event)) {
|
571
|
+
const actionsButton = currentCell.querySelector(`button[aria-label="${table.options.localization.columnActions}"]`);
|
572
|
+
if (actionsButton) {
|
573
|
+
actionsButton.click();
|
574
|
+
}
|
575
|
+
}
|
576
|
+
else if ((_h = header === null || header === void 0 ? void 0 : header.column) === null || _h === void 0 ? void 0 : _h.getCanSort()) {
|
577
|
+
event.preventDefault();
|
578
|
+
header.column.toggleSorting();
|
579
|
+
}
|
561
580
|
}
|
562
|
-
else if ([
|
581
|
+
else if ([
|
582
|
+
'ArrowRight',
|
583
|
+
'ArrowLeft',
|
584
|
+
'ArrowUp',
|
585
|
+
'ArrowDown',
|
586
|
+
'Home',
|
587
|
+
'End',
|
588
|
+
'PageUp',
|
589
|
+
'PageDown',
|
590
|
+
].includes(event.key)) {
|
563
591
|
event.preventDefault();
|
564
|
-
const currentCell = event.currentTarget;
|
565
592
|
const currentRow = parentElement || currentCell.closest('tr');
|
566
593
|
const tableElement = containerElement || currentCell.closest('table');
|
567
594
|
const allCells = cellElements ||
|
@@ -581,6 +608,16 @@ const cellNavigation = ({ cell, cellElements, cellValue, containerElement, event
|
|
581
608
|
const targetCell = edge === 'f' ? rowCells[0] : rowCells[rowCells.length - 1];
|
582
609
|
return targetCell;
|
583
610
|
};
|
611
|
+
//page up/down first or last cell in column
|
612
|
+
const findBottomTopCell = (columnIndex, edge) => {
|
613
|
+
var _a;
|
614
|
+
const row = edge === 't'
|
615
|
+
? tableElement === null || tableElement === void 0 ? void 0 : tableElement.querySelector('tr')
|
616
|
+
: (_a = tableElement === null || tableElement === void 0 ? void 0 : tableElement.lastElementChild) === null || _a === void 0 ? void 0 : _a.lastElementChild;
|
617
|
+
const rowCells = Array.from((row === null || row === void 0 ? void 0 : row.children) || []);
|
618
|
+
const targetCell = rowCells[columnIndex];
|
619
|
+
return targetCell;
|
620
|
+
};
|
584
621
|
const findAdjacentCell = (columnIndex, searchDirection) => {
|
585
622
|
const searchArray = searchDirection === 'f'
|
586
623
|
? allCells.slice(currentCellIndex + 1)
|
@@ -601,10 +638,16 @@ const cellNavigation = ({ cell, cellElements, cellValue, containerElement, event
|
|
601
638
|
nextCell = findAdjacentCell(currentIndex, 'f');
|
602
639
|
break;
|
603
640
|
case 'Home':
|
604
|
-
nextCell = findEdgeCell(event
|
641
|
+
nextCell = findEdgeCell(isWinCtrlMacMeta(event) ? 'f' : 'c', 'f');
|
605
642
|
break;
|
606
643
|
case 'End':
|
607
|
-
nextCell = findEdgeCell(event
|
644
|
+
nextCell = findEdgeCell(isWinCtrlMacMeta(event) ? 'l' : 'c', 'l');
|
645
|
+
break;
|
646
|
+
case 'PageUp':
|
647
|
+
nextCell = findBottomTopCell(currentIndex, 't');
|
648
|
+
break;
|
649
|
+
case 'PageDown':
|
650
|
+
nextCell = findBottomTopCell(currentIndex, 'b');
|
608
651
|
break;
|
609
652
|
}
|
610
653
|
if (nextCell) {
|
@@ -1459,7 +1502,7 @@ const MRT_DefaultDisplayColumn = {
|
|
1459
1502
|
};
|
1460
1503
|
const useMRT_TableOptions = (_a) => {
|
1461
1504
|
var _b;
|
1462
|
-
var { aggregationFns, autoResetExpanded = false, columnFilterDisplayMode = 'subheader', columnResizeDirection, columnResizeMode = 'onChange', createDisplayMode = 'modal', defaultColumn, defaultDisplayColumn, editDisplayMode = 'modal', enableBatchRowSelection = true, enableBottomToolbar = true, enableColumnActions = true, enableColumnFilters = true, enableColumnOrdering = false, enableColumnPinning = false, enableColumnResizing = false, enableColumnVirtualization, enableDensityToggle = true, enableExpandAll = true, enableExpanding, enableFacetedValues = false, enableFilterMatchHighlighting = true, enableFilters = true, enableFullScreenToggle = true, enableGlobalFilter = true, enableGlobalFilterRankedResults = true, enableGrouping = false, enableHiding = true,
|
1505
|
+
var { aggregationFns, autoResetExpanded = false, columnFilterDisplayMode = 'subheader', columnResizeDirection, columnResizeMode = 'onChange', createDisplayMode = 'modal', defaultColumn, defaultDisplayColumn, editDisplayMode = 'modal', enableBatchRowSelection = true, enableBottomToolbar = true, enableColumnActions = true, enableColumnFilters = true, enableColumnOrdering = false, enableColumnPinning = false, enableColumnResizing = false, enableColumnVirtualization, enableDensityToggle = true, enableExpandAll = true, enableExpanding, enableFacetedValues = false, enableFilterMatchHighlighting = true, enableFilters = true, enableFullScreenToggle = true, enableGlobalFilter = true, enableGlobalFilterRankedResults = true, enableGrouping = false, enableHiding = true, enableKeyboardShortcuts = true, enableMultiRowSelection = true, enableMultiSort = true, enablePagination = true, enableRowPinning = false, enableRowSelection = false, enableRowVirtualization, enableSelectAll = true, enableSorting = true, enableStickyHeader = false, enableTableFooter = true, enableTableHead = true, enableToolbarInternalActions = true, enableTopToolbar = true, filterFns, icons, layoutMode, localization, manualFiltering, manualGrouping, manualPagination, manualSorting, mrtTheme, paginationDisplayMode = 'default', positionActionsColumn = 'first', positionCreatingRow = 'top', positionExpandColumn = 'first', positionGlobalFilter = 'right', positionPagination = 'bottom', positionToolbarAlertBanner = 'top', positionToolbarDropZone = 'top', rowNumberDisplayMode = 'static', rowPinningDisplayMode = 'sticky', selectAllMode = 'page', sortingFns } = _a, rest = __rest(_a, ["aggregationFns", "autoResetExpanded", "columnFilterDisplayMode", "columnResizeDirection", "columnResizeMode", "createDisplayMode", "defaultColumn", "defaultDisplayColumn", "editDisplayMode", "enableBatchRowSelection", "enableBottomToolbar", "enableColumnActions", "enableColumnFilters", "enableColumnOrdering", "enableColumnPinning", "enableColumnResizing", "enableColumnVirtualization", "enableDensityToggle", "enableExpandAll", "enableExpanding", "enableFacetedValues", "enableFilterMatchHighlighting", "enableFilters", "enableFullScreenToggle", "enableGlobalFilter", "enableGlobalFilterRankedResults", "enableGrouping", "enableHiding", "enableKeyboardShortcuts", "enableMultiRowSelection", "enableMultiSort", "enablePagination", "enableRowPinning", "enableRowSelection", "enableRowVirtualization", "enableSelectAll", "enableSorting", "enableStickyHeader", "enableTableFooter", "enableTableHead", "enableToolbarInternalActions", "enableTopToolbar", "filterFns", "icons", "layoutMode", "localization", "manualFiltering", "manualGrouping", "manualPagination", "manualSorting", "mrtTheme", "paginationDisplayMode", "positionActionsColumn", "positionCreatingRow", "positionExpandColumn", "positionGlobalFilter", "positionPagination", "positionToolbarAlertBanner", "positionToolbarDropZone", "rowNumberDisplayMode", "rowPinningDisplayMode", "selectAllMode", "sortingFns"]);
|
1463
1506
|
const theme = styles.useTheme();
|
1464
1507
|
icons = react.useMemo(() => (Object.assign(Object.assign({}, MRT_Default_Icons), icons)), [icons]);
|
1465
1508
|
localization = react.useMemo(() => (Object.assign(Object.assign({}, MRT_Localization_EN), localization)), [localization]);
|
@@ -1520,7 +1563,7 @@ const useMRT_TableOptions = (_a) => {
|
|
1520
1563
|
enableGlobalFilterRankedResults,
|
1521
1564
|
enableGrouping,
|
1522
1565
|
enableHiding,
|
1523
|
-
|
1566
|
+
enableKeyboardShortcuts,
|
1524
1567
|
enableMultiRowSelection,
|
1525
1568
|
enableMultiSort,
|
1526
1569
|
enablePagination,
|
@@ -2167,7 +2210,7 @@ const MRT_TableBodyCell = (_a) => {
|
|
2167
2210
|
var _b, _c, _d, _e, _f;
|
2168
2211
|
var { cell, numRows, rowRef, staticColumnIndex, staticRowIndex, table } = _a, rest = __rest(_a, ["cell", "numRows", "rowRef", "staticColumnIndex", "staticRowIndex", "table"]);
|
2169
2212
|
const theme = styles.useTheme();
|
2170
|
-
const { getState, options: { columnResizeDirection, columnResizeMode, createDisplayMode, editDisplayMode, enableCellActions, enableClickToCopy, enableColumnOrdering, enableColumnPinning, enableGrouping,
|
2213
|
+
const { getState, options: { columnResizeDirection, columnResizeMode, createDisplayMode, editDisplayMode, enableCellActions, enableClickToCopy, enableColumnOrdering, enableColumnPinning, enableGrouping, enableKeyboardShortcuts, layoutMode, mrtTheme: { draggingBorderColor }, muiSkeletonProps, muiTableBodyCellProps, }, setHoveredColumn, } = table;
|
2171
2214
|
const { actionCell, columnSizingInfo, creatingRow, density, draggingColumn, draggingRow, editingCell, editingRow, hoveredColumn, hoveredRow, isLoading, showSkeletons, } = getState();
|
2172
2215
|
const { column, row } = cell;
|
2173
2216
|
const { columnDef } = column;
|
@@ -2291,17 +2334,15 @@ const MRT_TableBodyCell = (_a) => {
|
|
2291
2334
|
};
|
2292
2335
|
const handleKeyDown = (event) => {
|
2293
2336
|
var _a;
|
2294
|
-
|
2295
|
-
|
2296
|
-
|
2297
|
-
|
2298
|
-
|
2299
|
-
|
2300
|
-
});
|
2301
|
-
}
|
2337
|
+
cellKeyboardShortcuts({
|
2338
|
+
cell,
|
2339
|
+
cellValue: cell.getValue(),
|
2340
|
+
event,
|
2341
|
+
table,
|
2342
|
+
});
|
2302
2343
|
(_a = tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.onKeyDown) === null || _a === void 0 ? void 0 : _a.call(tableCellProps, event);
|
2303
2344
|
};
|
2304
|
-
return (jsxRuntime.jsx(TableCell__default["default"], Object.assign({ align: theme.direction === 'rtl' ? 'right' : 'left', "data-index": staticColumnIndex, "data-pinned": !!isColumnPinned || undefined, tabIndex:
|
2345
|
+
return (jsxRuntime.jsx(TableCell__default["default"], Object.assign({ align: theme.direction === 'rtl' ? 'right' : 'left', "data-index": staticColumnIndex, "data-pinned": !!isColumnPinned || undefined, tabIndex: enableKeyboardShortcuts ? 0 : undefined }, tableCellProps, { onKeyDown: handleKeyDown, onContextMenu: handleContextMenu, onDoubleClick: handleDoubleClick, onDragEnter: handleDragEnter, onDragOver: handleDragOver, sx: (theme) => (Object.assign(Object.assign({ '&:hover': {
|
2305
2346
|
outline: (actionCell === null || actionCell === void 0 ? void 0 : actionCell.id) === cell.id ||
|
2306
2347
|
(editDisplayMode === 'cell' && isEditable) ||
|
2307
2348
|
(editDisplayMode === 'table' && (isCreating || isEditing))
|
@@ -2562,7 +2603,7 @@ const MRT_TableFooterCell = (_a) => {
|
|
2562
2603
|
var _b, _c, _d;
|
2563
2604
|
var { footer, staticColumnIndex, table } = _a, rest = __rest(_a, ["footer", "staticColumnIndex", "table"]);
|
2564
2605
|
const theme = styles.useTheme();
|
2565
|
-
const { getState, options: { enableColumnPinning, muiTableFooterCellProps,
|
2606
|
+
const { getState, options: { enableColumnPinning, muiTableFooterCellProps, enableKeyboardShortcuts, }, } = table;
|
2566
2607
|
const { density } = getState();
|
2567
2608
|
const { column } = footer;
|
2568
2609
|
const { columnDef } = column;
|
@@ -2574,20 +2615,18 @@ const MRT_TableFooterCell = (_a) => {
|
|
2574
2615
|
const tableCellProps = Object.assign(Object.assign(Object.assign({}, parseFromValuesOrFunc(muiTableFooterCellProps, args)), parseFromValuesOrFunc(columnDef.muiTableFooterCellProps, args)), rest);
|
2575
2616
|
const handleKeyDown = (event) => {
|
2576
2617
|
var _a;
|
2577
|
-
|
2578
|
-
|
2579
|
-
|
2580
|
-
|
2581
|
-
|
2582
|
-
});
|
2583
|
-
}
|
2618
|
+
cellKeyboardShortcuts({
|
2619
|
+
event,
|
2620
|
+
cellValue: footer.column.columnDef.footer,
|
2621
|
+
table,
|
2622
|
+
});
|
2584
2623
|
(_a = tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.onKeyDown) === null || _a === void 0 ? void 0 : _a.call(tableCellProps, event);
|
2585
2624
|
};
|
2586
2625
|
return (jsxRuntime.jsx(TableCell__default["default"], Object.assign({ align: columnDefType === 'group'
|
2587
2626
|
? 'center'
|
2588
2627
|
: theme.direction === 'rtl'
|
2589
2628
|
? 'right'
|
2590
|
-
: 'left', colSpan: footer.colSpan, "data-index": staticColumnIndex, "data-pinned": !!isColumnPinned || undefined, variant: "footer" }, tableCellProps, { onKeyDown: handleKeyDown, sx: (theme) => (Object.assign(Object.assign({ fontWeight: 'bold', p: density === 'compact'
|
2629
|
+
: 'left', colSpan: footer.colSpan, "data-index": staticColumnIndex, "data-pinned": !!isColumnPinned || undefined, tabIndex: enableKeyboardShortcuts ? 0 : undefined, variant: "footer" }, tableCellProps, { onKeyDown: handleKeyDown, sx: (theme) => (Object.assign(Object.assign({ fontWeight: 'bold', p: density === 'compact'
|
2591
2630
|
? '0.5rem'
|
2592
2631
|
: density === 'comfortable'
|
2593
2632
|
? '1rem'
|
@@ -3517,7 +3556,7 @@ const MRT_TableHeadCell = (_a) => {
|
|
3517
3556
|
var _b, _c, _d, _f, _g, _h;
|
3518
3557
|
var { columnVirtualizer, header, staticColumnIndex, table } = _a, rest = __rest(_a, ["columnVirtualizer", "header", "staticColumnIndex", "table"]);
|
3519
3558
|
const theme = styles.useTheme();
|
3520
|
-
const { getState, options: { columnFilterDisplayMode, columnResizeDirection, columnResizeMode, enableColumnActions, enableColumnDragging, enableColumnOrdering, enableColumnPinning, enableGrouping,
|
3559
|
+
const { getState, options: { columnFilterDisplayMode, columnResizeDirection, columnResizeMode, enableKeyboardShortcuts, enableColumnActions, enableColumnDragging, enableColumnOrdering, enableColumnPinning, enableGrouping, enableMultiSort, layoutMode, mrtTheme: { draggingBorderColor }, muiTableHeadCellProps, }, refs: { tableHeadCellRefs }, setHoveredColumn, } = table;
|
3521
3560
|
const { columnSizingInfo, density, draggingColumn, grouping, hoveredColumn, showColumnFilters, } = getState();
|
3522
3561
|
const { column } = header;
|
3523
3562
|
const { columnDef } = column;
|
@@ -3588,14 +3627,12 @@ const MRT_TableHeadCell = (_a) => {
|
|
3588
3627
|
};
|
3589
3628
|
const handleKeyDown = (event) => {
|
3590
3629
|
var _a;
|
3591
|
-
|
3592
|
-
|
3593
|
-
|
3594
|
-
|
3595
|
-
|
3596
|
-
|
3597
|
-
});
|
3598
|
-
}
|
3630
|
+
cellKeyboardShortcuts({
|
3631
|
+
event,
|
3632
|
+
cellValue: header.column.columnDef.header,
|
3633
|
+
table,
|
3634
|
+
header,
|
3635
|
+
});
|
3599
3636
|
(_a = tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.onKeyDown) === null || _a === void 0 ? void 0 : _a.call(tableCellProps, event);
|
3600
3637
|
};
|
3601
3638
|
const HeaderElement = (_b = parseFromValuesOrFunc(columnDef.Header, {
|
@@ -3619,7 +3656,7 @@ const MRT_TableHeadCell = (_a) => {
|
|
3619
3656
|
(_a = columnVirtualizer === null || columnVirtualizer === void 0 ? void 0 : columnVirtualizer.measureElement) === null || _a === void 0 ? void 0 : _a.call(columnVirtualizer, node);
|
3620
3657
|
}
|
3621
3658
|
}
|
3622
|
-
}, tabIndex:
|
3659
|
+
}, tabIndex: enableKeyboardShortcuts ? 0 : undefined }, tableCellProps, { onKeyDown: handleKeyDown, sx: (theme) => (Object.assign(Object.assign({ '& :hover': {
|
3623
3660
|
'.MuiButtonBase-root': {
|
3624
3661
|
opacity: 1,
|
3625
3662
|
},
|
@@ -4472,7 +4509,7 @@ exports.MaterialReactTable = MaterialReactTable;
|
|
4472
4509
|
exports.Memo_MRT_TableBody = Memo_MRT_TableBody;
|
4473
4510
|
exports.Memo_MRT_TableBodyCell = Memo_MRT_TableBodyCell;
|
4474
4511
|
exports.Memo_MRT_TableBodyRow = Memo_MRT_TableBodyRow;
|
4475
|
-
exports.
|
4512
|
+
exports.cellKeyboardShortcuts = cellKeyboardShortcuts;
|
4476
4513
|
exports.createMRTColumnHelper = createMRTColumnHelper;
|
4477
4514
|
exports.createRow = createRow;
|
4478
4515
|
exports.defaultDisplayColumnProps = defaultDisplayColumnProps;
|