material-react-table 0.39.0 → 0.40.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/cjs/MaterialReactTable.d.ts +11 -2
- package/dist/cjs/index.js +40 -23
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/MaterialReactTable.d.ts +11 -2
- package/dist/esm/material-react-table.esm.js +40 -23
- package/dist/esm/material-react-table.esm.js.map +1 -1
- package/dist/index.d.ts +12 -3
- package/package.json +4 -4
- package/src/MaterialReactTable.tsx +11 -5
- package/src/body/MRT_TableBody.tsx +15 -10
- package/src/body/MRT_TableBodyCell.tsx +6 -4
- package/src/head/MRT_TableHeadCell.tsx +21 -13
- package/src/menus/MRT_ShowHideColumnsMenuItems.tsx +1 -1
- package/src/table/MRT_TableRoot.tsx +15 -9
- package/src/toolbar/MRT_ToolbarDropZone.tsx +10 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Dispatch, DragEvent, MutableRefObject, ReactNode, SetStateAction } from 'react';
|
|
2
2
|
import type { AlertProps, ButtonProps, CheckboxProps, ChipProps, IconButtonProps, LinearProgressProps, PaperProps, SkeletonProps, TableBodyProps, TableCellProps, TableContainerProps, TableFooterProps, TableHeadProps, TablePaginationProps, TableProps, TableRowProps, TextFieldProps, ToolbarProps } from '@mui/material';
|
|
3
3
|
import type { Cell, Column, ColumnDef, DeepKeys, FilterFn, Header, HeaderGroup, OnChangeFn, Row, SortingFn, Table, TableOptions, TableState } from '@tanstack/react-table';
|
|
4
|
-
import type { Options as VirtualizerOptions } from 'react-virtual';
|
|
4
|
+
import type { Options as VirtualizerOptions, VirtualItem } from 'react-virtual';
|
|
5
5
|
import { MRT_Icons } from './icons';
|
|
6
6
|
import { MRT_FilterFns } from './filterFns';
|
|
7
7
|
import { MRT_Localization } from './localization';
|
|
@@ -505,9 +505,18 @@ export declare type MaterialReactTableProps<TData extends Record<string, any> =
|
|
|
505
505
|
rowNumberMode?: 'original' | 'static';
|
|
506
506
|
selectAllMode?: 'all' | 'page';
|
|
507
507
|
state?: Partial<MRT_TableState<TData>>;
|
|
508
|
+
tableInstanceRef?: MutableRefObject<MRT_TableInstance<TData> | null>;
|
|
508
509
|
virtualizerProps?: Partial<VirtualizerOptions<HTMLDivElement>> | (({ table, }: {
|
|
509
510
|
table: MRT_TableInstance<TData>;
|
|
510
511
|
}) => Partial<VirtualizerOptions<HTMLDivElement>>);
|
|
512
|
+
virtualizerInstanceRef?: MutableRefObject<Virtualizer | null>;
|
|
511
513
|
};
|
|
512
|
-
declare
|
|
514
|
+
export declare type Virtualizer = {
|
|
515
|
+
virtualItems: VirtualItem[];
|
|
516
|
+
totalSize: number;
|
|
517
|
+
scrollToOffset: (index: number, options?: any | undefined) => void;
|
|
518
|
+
scrollToIndex: (index: number, options?: any | undefined) => void;
|
|
519
|
+
measure: () => void;
|
|
520
|
+
};
|
|
521
|
+
declare const _default: <TData extends Record<string, any> = {}>({ aggregationFns, autoResetExpanded, columnResizeMode, defaultColumn, editingMode, enableBottomToolbar, enableColumnActions, enableColumnFilters, enableColumnOrdering, enableColumnResizing, enableDensityToggle, enableExpandAll, enableFilters, enableFullScreenToggle, enableGlobalFilter, enableGlobalFilterRankedResults, enableGrouping, enableHiding, enableMultiRowSelection, enableMultiSort, enablePagination, enablePinning, enableRowSelection, enableSelectAll, enableSorting, enableStickyHeader, enableTableFooter, enableTableHead, enableToolbarInternalActions, enableTopToolbar, filterFns, icons, localization, positionActionsColumn, positionExpandColumn, positionGlobalFilter, positionPagination, positionToolbarAlertBanner, positionToolbarDropZone, rowNumberMode, selectAllMode, sortingFns, ...rest }: MaterialReactTableProps<TData>) => JSX.Element;
|
|
513
522
|
export default _default;
|
|
@@ -615,7 +615,7 @@ const MRT_ShowHideColumnsMenuItems = ({ allColumns, hoveredColumn, setHoveredCol
|
|
|
615
615
|
}
|
|
616
616
|
};
|
|
617
617
|
const handleDragEnter = (_e) => {
|
|
618
|
-
if (!isDragging) {
|
|
618
|
+
if (!isDragging && columnDef.enableColumnOrdering !== false) {
|
|
619
619
|
setHoveredColumn(column);
|
|
620
620
|
}
|
|
621
621
|
};
|
|
@@ -1175,11 +1175,13 @@ const MRT_ToolbarInternalButtons = ({ table }) => {
|
|
|
1175
1175
|
const MRT_ToolbarDropZone = ({ table }) => {
|
|
1176
1176
|
var _a, _b;
|
|
1177
1177
|
const { getState, options: { enableGrouping, localization }, setHoveredColumn, } = table;
|
|
1178
|
-
const { draggingColumn, hoveredColumn } = getState();
|
|
1178
|
+
const { draggingColumn, hoveredColumn, grouping } = getState();
|
|
1179
1179
|
const handleDragEnter = (_event) => {
|
|
1180
1180
|
setHoveredColumn({ id: 'drop-zone' });
|
|
1181
1181
|
};
|
|
1182
|
-
return (React.createElement(Fade, { unmountOnExit: true, mountOnEnter: true, in: !!enableGrouping &&
|
|
1182
|
+
return (React.createElement(Fade, { unmountOnExit: true, mountOnEnter: true, in: !!enableGrouping &&
|
|
1183
|
+
!!draggingColumn &&
|
|
1184
|
+
!grouping.includes(draggingColumn.id) },
|
|
1183
1185
|
React.createElement(Box, { sx: (theme) => ({
|
|
1184
1186
|
alignItems: 'center',
|
|
1185
1187
|
backgroundColor: alpha(theme.palette.info.main, (hoveredColumn === null || hoveredColumn === void 0 ? void 0 : hoveredColumn.id) === 'drop-zone' ? 0.2 : 0.1),
|
|
@@ -1626,7 +1628,7 @@ const MRT_TableHeadCell = ({ header, table }) => {
|
|
|
1626
1628
|
var _a, _b, _c, _d;
|
|
1627
1629
|
const theme = useTheme();
|
|
1628
1630
|
const { getState, options: { enableColumnActions, enableColumnDragging, enableColumnOrdering, enableColumnResizing, enableGrouping, enableMultiSort, muiTableHeadCellProps, }, setHoveredColumn, } = table;
|
|
1629
|
-
const { density, draggingColumn, hoveredColumn, showColumnFilters } = getState();
|
|
1631
|
+
const { density, draggingColumn, grouping, hoveredColumn, showColumnFilters, } = getState();
|
|
1630
1632
|
const { column } = header;
|
|
1631
1633
|
const { columnDef } = column;
|
|
1632
1634
|
const { columnDefType } = columnDef;
|
|
@@ -1742,11 +1744,14 @@ const MRT_TableHeadCell = ({ header, table }) => {
|
|
|
1742
1744
|
column.getCanSort() && (React.createElement(MRT_TableHeadCellSortLabel, { header: header, table: table })),
|
|
1743
1745
|
column.getCanFilter() && (React.createElement(MRT_TableHeadCellFilterLabel, { header: header, table: table }))),
|
|
1744
1746
|
columnDefType !== 'group' && (React.createElement(Box, { sx: { whiteSpace: 'nowrap' } },
|
|
1745
|
-
|
|
1746
|
-
columnDef.enableColumnDragging !== false
|
|
1747
|
-
(
|
|
1748
|
-
|
|
1749
|
-
|
|
1747
|
+
enableColumnDragging !== false &&
|
|
1748
|
+
columnDef.enableColumnDragging !== false &&
|
|
1749
|
+
(enableColumnDragging ||
|
|
1750
|
+
(enableColumnOrdering &&
|
|
1751
|
+
columnDef.enableColumnOrdering !== false) ||
|
|
1752
|
+
(enableGrouping &&
|
|
1753
|
+
columnDef.enableGrouping !== false &&
|
|
1754
|
+
!grouping.includes(column.id))) && (React.createElement(MRT_TableHeadCellGrabHandle, { column: column, table: table, tableHeadCellRef: tableHeadCellRef })),
|
|
1750
1755
|
(enableColumnActions || columnDef.enableColumnActions) &&
|
|
1751
1756
|
columnDef.enableColumnActions !== false && (React.createElement(MRT_TableHeadCellColumnActionsButton, { header: header, table: table })))),
|
|
1752
1757
|
column.getCanResize() && (React.createElement(MRT_TableHeadCellResizeHandle, { header: header, table: table })))),
|
|
@@ -1929,7 +1934,9 @@ const MRT_TableBodyCell = ({ cell, enableHover, rowIndex, rowRef, table, }) => {
|
|
|
1929
1934
|
: Math.round(Math.random() * (column.getSize() - column.getSize() / 3) +
|
|
1930
1935
|
column.getSize() / 3)
|
|
1931
1936
|
: 100), [isLoading, showSkeletons]);
|
|
1932
|
-
const handleDoubleClick = (
|
|
1937
|
+
const handleDoubleClick = (event) => {
|
|
1938
|
+
var _a;
|
|
1939
|
+
(_a = tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.onDoubleClick) === null || _a === void 0 ? void 0 : _a.call(tableCellProps, event);
|
|
1933
1940
|
if ((enableEditing || columnDef.enableEditing) &&
|
|
1934
1941
|
columnDef.enableEditing !== false &&
|
|
1935
1942
|
editingMode === 'cell') {
|
|
@@ -1953,7 +1960,9 @@ const MRT_TableBodyCell = ({ cell, enableHover, rowIndex, rowRef, table, }) => {
|
|
|
1953
1960
|
const getTotalRight = () => {
|
|
1954
1961
|
return ((table.getRightLeafHeaders().length - 1 - column.getPinnedIndex()) * 150);
|
|
1955
1962
|
};
|
|
1956
|
-
const handleDragEnter = (
|
|
1963
|
+
const handleDragEnter = (e) => {
|
|
1964
|
+
var _a;
|
|
1965
|
+
(_a = tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.onDragEnter) === null || _a === void 0 ? void 0 : _a.call(tableCellProps, e);
|
|
1957
1966
|
if (enableGrouping && (hoveredColumn === null || hoveredColumn === void 0 ? void 0 : hoveredColumn.id) === 'drop-zone') {
|
|
1958
1967
|
setHoveredColumn(null);
|
|
1959
1968
|
}
|
|
@@ -1979,7 +1988,7 @@ const MRT_TableBodyCell = ({ cell, enableHover, rowIndex, rowRef, table, }) => {
|
|
|
1979
1988
|
: undefined,
|
|
1980
1989
|
}
|
|
1981
1990
|
: undefined;
|
|
1982
|
-
return (React.createElement(TableCell, Object.assign({
|
|
1991
|
+
return (React.createElement(TableCell, Object.assign({}, tableCellProps, { onDragEnter: handleDragEnter, onDoubleClick: handleDoubleClick, sx: (theme) => {
|
|
1983
1992
|
var _a;
|
|
1984
1993
|
return (Object.assign(Object.assign(Object.assign({ backgroundColor: column.getIsPinned()
|
|
1985
1994
|
? alpha(lighten(theme.palette.background.default, 0.04), 0.95)
|
|
@@ -2096,7 +2105,7 @@ const MRT_TableBodyRow = ({ row, rowIndex, table, virtualRow, }) => {
|
|
|
2096
2105
|
};
|
|
2097
2106
|
|
|
2098
2107
|
const MRT_TableBody = ({ table, tableContainerRef }) => {
|
|
2099
|
-
const { getRowModel, getPrePaginationRowModel, getState, options: { enableGlobalFilterRankedResults, enablePagination, enableRowVirtualization, muiTableBodyProps, virtualizerProps, }, } = table;
|
|
2108
|
+
const { getRowModel, getPrePaginationRowModel, getState, options: { enableGlobalFilterRankedResults, enablePagination, enableRowVirtualization, muiTableBodyProps, virtualizerProps, virtualizerInstanceRef, }, } = table;
|
|
2100
2109
|
const { globalFilter, pagination, sorting } = getState();
|
|
2101
2110
|
const tableBodyProps = muiTableBodyProps instanceof Function
|
|
2102
2111
|
? muiTableBodyProps({ table })
|
|
@@ -2124,10 +2133,15 @@ const MRT_TableBody = ({ table, tableContainerRef }) => {
|
|
|
2124
2133
|
: getRowModel().rows,
|
|
2125
2134
|
globalFilter,
|
|
2126
2135
|
]);
|
|
2127
|
-
const
|
|
2136
|
+
const virtualizer = enableRowVirtualization
|
|
2128
2137
|
? useVirtual(Object.assign({ size: rows.length, parentRef: tableContainerRef, overscan: 15 }, vProps))
|
|
2129
2138
|
: {};
|
|
2130
|
-
|
|
2139
|
+
useEffect(() => {
|
|
2140
|
+
if (virtualizerInstanceRef) {
|
|
2141
|
+
virtualizerInstanceRef.current = virtualizer;
|
|
2142
|
+
}
|
|
2143
|
+
}, [virtualizer]);
|
|
2144
|
+
// const virtualizer: Virtualizer = enableRowVirtualization
|
|
2131
2145
|
// ? useVirtualizer({
|
|
2132
2146
|
// count: rows.length,
|
|
2133
2147
|
// estimateSize: () => (density === 'compact' ? 25 : 50),
|
|
@@ -2136,24 +2150,22 @@ const MRT_TableBody = ({ table, tableContainerRef }) => {
|
|
|
2136
2150
|
// ...vProps,
|
|
2137
2151
|
// })
|
|
2138
2152
|
// : ({} as any);
|
|
2139
|
-
const virtualRows = enableRowVirtualization
|
|
2140
|
-
? rowVirtualizer.virtualItems
|
|
2141
|
-
: [];
|
|
2153
|
+
const virtualRows = enableRowVirtualization ? virtualizer.virtualItems : [];
|
|
2142
2154
|
// const virtualRows = enableRowVirtualization
|
|
2143
|
-
// ?
|
|
2155
|
+
// ? virtualizer.getVirtualItems()
|
|
2144
2156
|
// : [];
|
|
2145
2157
|
let paddingTop = 0;
|
|
2146
2158
|
let paddingBottom = 0;
|
|
2147
2159
|
if (enableRowVirtualization) {
|
|
2148
2160
|
paddingTop = !!virtualRows.length ? virtualRows[0].start : 0;
|
|
2149
2161
|
paddingBottom = !!virtualRows.length
|
|
2150
|
-
?
|
|
2162
|
+
? virtualizer.totalSize - virtualRows[virtualRows.length - 1].end
|
|
2151
2163
|
: 0;
|
|
2152
2164
|
}
|
|
2153
2165
|
// if (enableRowVirtualization) {
|
|
2154
2166
|
// paddingTop = !!virtualRows.length ? virtualRows[0].start : 0;
|
|
2155
2167
|
// paddingBottom = !!virtualRows.length
|
|
2156
|
-
// ?
|
|
2168
|
+
// ? virtualizer.getTotalSize() - virtualRows[virtualRows.length - 1].end
|
|
2157
2169
|
// : 0;
|
|
2158
2170
|
// }
|
|
2159
2171
|
return (React.createElement(TableBody, Object.assign({}, tableBodyProps),
|
|
@@ -2435,6 +2447,11 @@ const MRT_TableRoot = (props) => {
|
|
|
2435
2447
|
tableContainerRef,
|
|
2436
2448
|
topToolbarRef,
|
|
2437
2449
|
}, setColumnFilterFns: (_w = props.onFilterFnsChange) !== null && _w !== void 0 ? _w : setColumnFilterFns, setDensity: (_x = props.onDensityChange) !== null && _x !== void 0 ? _x : setDensity, setDraggingColumn: (_y = props.onDraggingColumnChange) !== null && _y !== void 0 ? _y : setDraggingColumn, setDraggingRow: (_z = props.onDraggingRowChange) !== null && _z !== void 0 ? _z : setDraggingRow, setEditingCell: (_0 = props.onEditingCellChange) !== null && _0 !== void 0 ? _0 : setEditingCell, setEditingRow: (_1 = props.onEditingRowChange) !== null && _1 !== void 0 ? _1 : setEditingRow, setGlobalFilterFn: (_2 = props.onGlobalFilterFnChange) !== null && _2 !== void 0 ? _2 : setGlobalFilterFn, setHoveredColumn: (_3 = props.onHoveredColumnChange) !== null && _3 !== void 0 ? _3 : setHoveredColumn, setHoveredRow: (_4 = props.onHoveredRowChange) !== null && _4 !== void 0 ? _4 : setHoveredRow, setIsFullScreen: (_5 = props.onIsFullScreenChange) !== null && _5 !== void 0 ? _5 : setIsFullScreen, setShowAlertBanner: (_6 = props.onShowAlertBannerChange) !== null && _6 !== void 0 ? _6 : setShowAlertBanner, setShowFilters: (_7 = props.onShowFiltersChange) !== null && _7 !== void 0 ? _7 : setShowFilters, setShowGlobalFilter: (_8 = props.onShowGlobalFilterChange) !== null && _8 !== void 0 ? _8 : setShowGlobalFilter });
|
|
2450
|
+
useEffect(() => {
|
|
2451
|
+
if (props.tableInstanceRef) {
|
|
2452
|
+
props.tableInstanceRef.current = table;
|
|
2453
|
+
}
|
|
2454
|
+
}, [table]);
|
|
2438
2455
|
return (React.createElement(React.Fragment, null,
|
|
2439
2456
|
React.createElement(Dialog, { PaperComponent: Box, TransitionComponent: Grow, disablePortal: true, fullScreen: true, keepMounted: false, onClose: () => setIsFullScreen(false), open: isFullScreen, transitionDuration: 400 },
|
|
2440
2457
|
React.createElement(MRT_TablePaper, { table: table })),
|
|
@@ -2443,8 +2460,8 @@ const MRT_TableRoot = (props) => {
|
|
|
2443
2460
|
};
|
|
2444
2461
|
|
|
2445
2462
|
var MaterialReactTable = (_a) => {
|
|
2446
|
-
var { aggregationFns, autoResetExpanded = false, columnResizeMode = 'onEnd', defaultColumn = { minSize: 40, maxSize: 1000, size: 180 }, editingMode = 'modal', enableBottomToolbar = true, enableColumnActions = true,
|
|
2447
|
-
return (React.createElement(MRT_TableRoot, Object.assign({ aggregationFns: Object.assign(Object.assign({}, MRT_AggregationFns), aggregationFns), autoResetExpanded: autoResetExpanded, columnResizeMode: columnResizeMode, defaultColumn: defaultColumn, editingMode: editingMode, enableBottomToolbar: enableBottomToolbar, enableColumnActions: enableColumnActions,
|
|
2463
|
+
var { aggregationFns, autoResetExpanded = false, columnResizeMode = 'onEnd', defaultColumn = { minSize: 40, maxSize: 1000, size: 180 }, editingMode = 'modal', enableBottomToolbar = true, enableColumnActions = true, enableColumnFilters = true, enableColumnOrdering = false, enableColumnResizing = false, enableDensityToggle = true, enableExpandAll = true, enableFilters = true, enableFullScreenToggle = true, enableGlobalFilter = true, enableGlobalFilterRankedResults = true, enableGrouping = false, enableHiding = true, enableMultiRowSelection = true, enableMultiSort = true, enablePagination = true, enablePinning = false, enableRowSelection = false, enableSelectAll = true, enableSorting = true, enableStickyHeader = false, enableTableFooter = true, enableTableHead = true, enableToolbarInternalActions = true, enableTopToolbar = true, filterFns, icons, localization, positionActionsColumn = 'first', positionExpandColumn = 'first', positionGlobalFilter = 'right', positionPagination = 'bottom', positionToolbarAlertBanner = 'top', positionToolbarDropZone = 'top', rowNumberMode = 'original', selectAllMode = 'all', sortingFns } = _a, rest = __rest(_a, ["aggregationFns", "autoResetExpanded", "columnResizeMode", "defaultColumn", "editingMode", "enableBottomToolbar", "enableColumnActions", "enableColumnFilters", "enableColumnOrdering", "enableColumnResizing", "enableDensityToggle", "enableExpandAll", "enableFilters", "enableFullScreenToggle", "enableGlobalFilter", "enableGlobalFilterRankedResults", "enableGrouping", "enableHiding", "enableMultiRowSelection", "enableMultiSort", "enablePagination", "enablePinning", "enableRowSelection", "enableSelectAll", "enableSorting", "enableStickyHeader", "enableTableFooter", "enableTableHead", "enableToolbarInternalActions", "enableTopToolbar", "filterFns", "icons", "localization", "positionActionsColumn", "positionExpandColumn", "positionGlobalFilter", "positionPagination", "positionToolbarAlertBanner", "positionToolbarDropZone", "rowNumberMode", "selectAllMode", "sortingFns"]);
|
|
2464
|
+
return (React.createElement(MRT_TableRoot, Object.assign({ aggregationFns: Object.assign(Object.assign({}, MRT_AggregationFns), aggregationFns), autoResetExpanded: autoResetExpanded, columnResizeMode: columnResizeMode, defaultColumn: defaultColumn, editingMode: editingMode, enableBottomToolbar: enableBottomToolbar, enableColumnActions: enableColumnActions, enableColumnFilters: enableColumnFilters, enableColumnOrdering: enableColumnOrdering, enableColumnResizing: enableColumnResizing, enableDensityToggle: enableDensityToggle, enableExpandAll: enableExpandAll, enableFilters: enableFilters, enableFullScreenToggle: enableFullScreenToggle, enableGlobalFilter: enableGlobalFilter, enableGlobalFilterRankedResults: enableGlobalFilterRankedResults, enableGrouping: enableGrouping, enableHiding: enableHiding, enableMultiRowSelection: enableMultiRowSelection, enableMultiSort: enableMultiSort, enablePagination: enablePagination, enablePinning: enablePinning, enableRowSelection: enableRowSelection, enableSelectAll: enableSelectAll, enableSorting: enableSorting, enableStickyHeader: enableStickyHeader, enableTableFooter: enableTableFooter, enableTableHead: enableTableHead, enableToolbarInternalActions: enableToolbarInternalActions, enableTopToolbar: enableTopToolbar, filterFns: Object.assign(Object.assign({}, MRT_FilterFns), filterFns), icons: Object.assign(Object.assign({}, MRT_Default_Icons), icons), localization: Object.assign(Object.assign({}, MRT_DefaultLocalization_EN), localization), positionActionsColumn: positionActionsColumn, positionExpandColumn: positionExpandColumn, positionGlobalFilter: positionGlobalFilter, positionPagination: positionPagination, positionToolbarAlertBanner: positionToolbarAlertBanner, positionToolbarDropZone: positionToolbarDropZone, rowNumberMode: rowNumberMode, selectAllMode: selectAllMode, sortingFns: Object.assign(Object.assign({}, MRT_SortingFns), sortingFns) }, rest)));
|
|
2448
2465
|
};
|
|
2449
2466
|
|
|
2450
2467
|
export { MRT_CopyButton, MRT_FullScreenToggleButton, MRT_GlobalFilterTextField, MRT_ShowHideColumnsButton, MRT_ToggleDensePaddingButton, MRT_ToggleFiltersButton, MRT_ToggleGlobalFilterButton, MaterialReactTable as default };
|