material-react-table 1.4.2 → 1.5.0-beta.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/cjs/index.js +178 -73
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/MaterialReactTable.d.ts +18 -5
- package/dist/cjs/types/body/MRT_TableBody.d.ts +5 -0
- package/dist/cjs/types/body/MRT_TableBodyCell.d.ts +3 -0
- package/dist/cjs/types/body/MRT_TableBodyRow.d.ts +5 -1
- package/dist/cjs/types/footer/MRT_TableFooter.d.ts +4 -0
- package/dist/cjs/types/footer/MRT_TableFooterRow.d.ts +4 -0
- package/dist/cjs/types/head/MRT_TableHead.d.ts +4 -0
- package/dist/cjs/types/head/MRT_TableHeadRow.d.ts +4 -0
- package/dist/cjs/types/table/MRT_TableRoot.d.ts +12 -5
- package/dist/cjs/types/toolbar/MRT_TablePagination.d.ts +1 -1
- package/dist/esm/material-react-table.esm.js +172 -66
- package/dist/esm/material-react-table.esm.js.map +1 -1
- package/dist/esm/types/MaterialReactTable.d.ts +18 -5
- package/dist/esm/types/body/MRT_TableBody.d.ts +5 -0
- package/dist/esm/types/body/MRT_TableBodyCell.d.ts +3 -0
- package/dist/esm/types/body/MRT_TableBodyRow.d.ts +5 -1
- package/dist/esm/types/footer/MRT_TableFooter.d.ts +4 -0
- package/dist/esm/types/footer/MRT_TableFooterRow.d.ts +4 -0
- package/dist/esm/types/head/MRT_TableHead.d.ts +4 -0
- package/dist/esm/types/head/MRT_TableHeadRow.d.ts +4 -0
- package/dist/esm/types/table/MRT_TableRoot.d.ts +12 -5
- package/dist/esm/types/toolbar/MRT_TablePagination.d.ts +1 -1
- package/dist/index.d.ts +20 -7
- package/locales/ru.esm.js +1 -1
- package/locales/ru.js +1 -1
- package/package.json +6 -6
- package/src/MaterialReactTable.tsx +30 -8
- package/src/_locales/ru.ts +1 -1
- package/src/body/MRT_TableBody.tsx +42 -13
- package/src/body/MRT_TableBodyCell.tsx +17 -1
- package/src/body/MRT_TableBodyRow.tsx +24 -3
- package/src/footer/MRT_TableFooter.tsx +13 -1
- package/src/footer/MRT_TableFooterCell.tsx +10 -2
- package/src/footer/MRT_TableFooterRow.tsx +31 -4
- package/src/head/MRT_TableHead.tsx +13 -1
- package/src/head/MRT_TableHeadCell.tsx +6 -3
- package/src/head/MRT_TableHeadRow.tsx +30 -4
- package/src/inputs/MRT_FilterTextField.tsx +3 -2
- package/src/inputs/MRT_GlobalFilterTextField.tsx +1 -1
- package/src/table/MRT_Table.tsx +105 -7
- package/src/toolbar/MRT_TablePagination.tsx +2 -2
package/dist/cjs/index.js
CHANGED
@@ -58,7 +58,7 @@ var useMediaQuery = require('@mui/material/useMediaQuery');
|
|
58
58
|
var Collapse = require('@mui/material/Collapse');
|
59
59
|
var InputAdornment = require('@mui/material/InputAdornment');
|
60
60
|
var TextField = require('@mui/material/TextField');
|
61
|
-
var
|
61
|
+
var utils = require('@mui/material/utils');
|
62
62
|
var LinearProgress = require('@mui/material/LinearProgress');
|
63
63
|
var TablePagination = require('@mui/material/TablePagination');
|
64
64
|
var Alert = require('@mui/material/Alert');
|
@@ -66,12 +66,12 @@ var AlertTitle = require('@mui/material/AlertTitle');
|
|
66
66
|
var Chip = require('@mui/material/Chip');
|
67
67
|
var Fade = require('@mui/material/Fade');
|
68
68
|
var TableContainer = require('@mui/material/TableContainer');
|
69
|
+
var reactVirtual = require('@tanstack/react-virtual');
|
69
70
|
var Table = require('@mui/material/Table');
|
70
71
|
var TableHead = require('@mui/material/TableHead');
|
71
72
|
var TableRow = require('@mui/material/TableRow');
|
72
73
|
var TableCell = require('@mui/material/TableCell');
|
73
74
|
var TableSortLabel = require('@mui/material/TableSortLabel');
|
74
|
-
var reactVirtual = require('@tanstack/react-virtual');
|
75
75
|
var TableBody = require('@mui/material/TableBody');
|
76
76
|
var Skeleton = require('@mui/material/Skeleton');
|
77
77
|
var TableFooter = require('@mui/material/TableFooter');
|
@@ -135,7 +135,6 @@ var useMediaQuery__default = /*#__PURE__*/_interopDefaultLegacy(useMediaQuery);
|
|
135
135
|
var Collapse__default = /*#__PURE__*/_interopDefaultLegacy(Collapse);
|
136
136
|
var InputAdornment__default = /*#__PURE__*/_interopDefaultLegacy(InputAdornment);
|
137
137
|
var TextField__default = /*#__PURE__*/_interopDefaultLegacy(TextField);
|
138
|
-
var debounce__default = /*#__PURE__*/_interopDefaultLegacy(debounce);
|
139
138
|
var LinearProgress__default = /*#__PURE__*/_interopDefaultLegacy(LinearProgress);
|
140
139
|
var TablePagination__default = /*#__PURE__*/_interopDefaultLegacy(TablePagination);
|
141
140
|
var Alert__default = /*#__PURE__*/_interopDefaultLegacy(Alert);
|
@@ -1156,7 +1155,7 @@ const MRT_GlobalFilterTextField = ({ table, }) => {
|
|
1156
1155
|
: muiSearchTextFieldProps;
|
1157
1156
|
const [anchorEl, setAnchorEl] = React.useState(null);
|
1158
1157
|
const [searchValue, setSearchValue] = React.useState(globalFilter !== null && globalFilter !== void 0 ? globalFilter : '');
|
1159
|
-
const handleChangeDebounced = React.useCallback(
|
1158
|
+
const handleChangeDebounced = React.useCallback(utils.debounce((event) => {
|
1160
1159
|
var _a;
|
1161
1160
|
setGlobalFilter((_a = event.target.value) !== null && _a !== void 0 ? _a : undefined);
|
1162
1161
|
}, manualFiltering ? 500 : 250), []);
|
@@ -1211,7 +1210,7 @@ const MRT_LinearProgressBar = ({ isTopToolbar, table }) => {
|
|
1211
1210
|
React__default["default"].createElement(LinearProgress__default["default"], Object.assign({ "aria-label": "Loading", "aria-busy": "true", sx: { position: 'relative' } }, linearProgressProps))));
|
1212
1211
|
};
|
1213
1212
|
|
1214
|
-
const MRT_TablePagination = ({ table, position, }) => {
|
1213
|
+
const MRT_TablePagination = ({ table, position = 'bottom', }) => {
|
1215
1214
|
const { getPrePaginationRowModel, getState, setPageIndex, setPageSize, options: { muiTablePaginationProps, enableToolbarInternalActions, localization, rowCount, }, } = table;
|
1216
1215
|
const { pagination: { pageSize = 10, pageIndex = 0 }, showGlobalFilter, } = getState();
|
1217
1216
|
const totalRowCount = rowCount !== null && rowCount !== void 0 ? rowCount : getPrePaginationRowModel().rows.length;
|
@@ -1527,7 +1526,7 @@ const MRT_TableHeadCellColumnActionsButton = ({ header, table, }) => {
|
|
1527
1526
|
};
|
1528
1527
|
|
1529
1528
|
const MRT_FilterTextField = ({ header, rangeFilterIndex, table, }) => {
|
1530
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
1529
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
1531
1530
|
const { options: { enableColumnFilterModes, columnFilterModeOptions, icons: { FilterListIcon, CloseIcon }, localization, manualFiltering, muiTableHeadCellFilterTextFieldProps, }, refs: { filterInputRefs }, setColumnFilterFns, } = table;
|
1532
1531
|
const { column } = header;
|
1533
1532
|
const { columnDef } = column;
|
@@ -1558,13 +1557,13 @@ const MRT_FilterTextField = ({ header, rangeFilterIndex, table, }) => {
|
|
1558
1557
|
(currentFilterOption === null || currentFilterOption === void 0 ? void 0 : currentFilterOption.slice(1))}`]
|
1559
1558
|
: '';
|
1560
1559
|
const filterPlaceholder = !isRangeFilter
|
1561
|
-
? (_c = localization.filterByColumn) === null ||
|
1560
|
+
? (_c = textFieldProps === null || textFieldProps === void 0 ? void 0 : textFieldProps.placeholder) !== null && _c !== void 0 ? _c : (_d = localization.filterByColumn) === null || _d === void 0 ? void 0 : _d.replace('{column}', String(columnDef.header))
|
1562
1561
|
: rangeFilterIndex === 0
|
1563
1562
|
? localization.min
|
1564
1563
|
: rangeFilterIndex === 1
|
1565
1564
|
? localization.max
|
1566
1565
|
: '';
|
1567
|
-
const allowedColumnFilterOptions = (
|
1566
|
+
const allowedColumnFilterOptions = (_e = columnDef === null || columnDef === void 0 ? void 0 : columnDef.columnFilterModeOptions) !== null && _e !== void 0 ? _e : columnFilterModeOptions;
|
1568
1567
|
const showChangeModeButton = enableColumnFilterModes &&
|
1569
1568
|
columnDef.enableColumnFilterModes !== false &&
|
1570
1569
|
!rangeFilterIndex &&
|
@@ -1579,7 +1578,7 @@ const MRT_FilterTextField = ({ header, rangeFilterIndex, table, }) => {
|
|
1579
1578
|
? ((_a = column.getFilterValue()) === null || _a === void 0 ? void 0 : _a[rangeFilterIndex]) || []
|
1580
1579
|
: (_b = column.getFilterValue()) !== null && _b !== void 0 ? _b : '';
|
1581
1580
|
});
|
1582
|
-
const handleChangeDebounced = React.useCallback(
|
1581
|
+
const handleChangeDebounced = React.useCallback(utils.debounce((event) => {
|
1583
1582
|
const value = textFieldProps.type === 'date'
|
1584
1583
|
? event.target.valueAsDate
|
1585
1584
|
: textFieldProps.type === 'number'
|
@@ -1634,7 +1633,7 @@ const MRT_FilterTextField = ({ header, rangeFilterIndex, table, }) => {
|
|
1634
1633
|
isMounted.current = true;
|
1635
1634
|
}, [column.getFilterValue()]);
|
1636
1635
|
if (columnDef.Filter) {
|
1637
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null, (
|
1636
|
+
return (React__default["default"].createElement(React__default["default"].Fragment, null, (_f = columnDef.Filter) === null || _f === void 0 ? void 0 : _f.call(columnDef, { column, header, rangeFilterIndex, table })));
|
1638
1637
|
}
|
1639
1638
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
1640
1639
|
React__default["default"].createElement(TextField__default["default"], Object.assign({ fullWidth: true, inputProps: {
|
@@ -1646,7 +1645,7 @@ const MRT_FilterTextField = ({ header, rangeFilterIndex, table, }) => {
|
|
1646
1645
|
title: filterPlaceholder,
|
1647
1646
|
}, helperText: showChangeModeButton ? (React__default["default"].createElement("label", null, localization.filterMode.replace('{filterType}',
|
1648
1647
|
// @ts-ignore
|
1649
|
-
localization[`filter${((
|
1648
|
+
localization[`filter${((_g = currentFilterOption === null || currentFilterOption === void 0 ? void 0 : currentFilterOption.charAt(0)) === null || _g === void 0 ? void 0 : _g.toUpperCase()) +
|
1650
1649
|
(currentFilterOption === null || currentFilterOption === void 0 ? void 0 : currentFilterOption.slice(1))}`]))) : null, FormHelperTextProps: {
|
1651
1650
|
sx: {
|
1652
1651
|
fontSize: '0.75rem',
|
@@ -1663,7 +1662,7 @@ const MRT_FilterTextField = ({ header, rangeFilterIndex, table, }) => {
|
|
1663
1662
|
React__default["default"].createElement(FilterListIcon, null)))),
|
1664
1663
|
filterChipLabel && (React__default["default"].createElement(Chip__default["default"], { onDelete: handleClearEmptyFilterChip, label: filterChipLabel })))) : null,
|
1665
1664
|
endAdornment: !filterChipLabel && (React__default["default"].createElement(InputAdornment__default["default"], { position: "end" },
|
1666
|
-
React__default["default"].createElement(Tooltip__default["default"], { arrow: true, placement: "right", title: (
|
1665
|
+
React__default["default"].createElement(Tooltip__default["default"], { arrow: true, placement: "right", title: (_h = localization.clearFilter) !== null && _h !== void 0 ? _h : '' },
|
1667
1666
|
React__default["default"].createElement("span", null,
|
1668
1667
|
React__default["default"].createElement(IconButton__default["default"], { "aria-label": localization.clearFilter, disabled: !(filterValue === null || filterValue === void 0 ? void 0 : filterValue.length), onClick: handleClear, size: "small", sx: {
|
1669
1668
|
height: '1.75rem',
|
@@ -1700,8 +1699,8 @@ const MRT_FilterTextField = ({ header, rangeFilterIndex, table, }) => {
|
|
1700
1699
|
? textFieldProps.sx(theme)
|
1701
1700
|
: textFieldProps === null || textFieldProps === void 0 ? void 0 : textFieldProps.sx))) }),
|
1702
1701
|
(isSelectFilter || isMultiSelectFilter) && (React__default["default"].createElement(MenuItem__default["default"], { divider: true, disabled: true, hidden: true, value: "" },
|
1703
|
-
React__default["default"].createElement(Box__default["default"], { sx: { opacity: 0.5 } }, filterPlaceholder))), (
|
1704
|
-
|
1702
|
+
React__default["default"].createElement(Box__default["default"], { sx: { opacity: 0.5 } }, filterPlaceholder))), (_j = columnDef === null || columnDef === void 0 ? void 0 : columnDef.filterSelectOptions) === null || _j === void 0 ? void 0 :
|
1703
|
+
_j.map((option) => {
|
1705
1704
|
var _a;
|
1706
1705
|
let value;
|
1707
1706
|
let text;
|
@@ -1910,7 +1909,7 @@ const MRT_TableHeadCellSortLabel = ({ header, table, tableCellProps, }) => {
|
|
1910
1909
|
}, IconComponent: ArrowDownwardIcon })));
|
1911
1910
|
};
|
1912
1911
|
|
1913
|
-
const MRT_TableHeadCell = ({ header, table }) => {
|
1912
|
+
const MRT_TableHeadCell = ({ header, table, }) => {
|
1914
1913
|
var _a, _b, _c, _d;
|
1915
1914
|
const theme = styles.useTheme();
|
1916
1915
|
const { getState, options: { enableColumnActions, enableColumnDragging, enableColumnOrdering, enableGrouping, enableMultiSort, layoutMode, muiTableHeadCellProps, }, refs: { tableHeadCellRefs }, setHoveredColumn, } = table;
|
@@ -2042,17 +2041,25 @@ const MRT_TableHeadCell = ({ header, table }) => {
|
|
2042
2041
|
column.getCanFilter() && (React__default["default"].createElement(MRT_TableHeadCellFilterContainer, { header: header, table: table }))));
|
2043
2042
|
};
|
2044
2043
|
|
2045
|
-
const MRT_TableHeadRow = ({ headerGroup, table }) => {
|
2044
|
+
const MRT_TableHeadRow = ({ headerGroup, table, virtualColumns, virtualPaddingLeft, virtualPaddingRight, }) => {
|
2046
2045
|
const { options: { layoutMode, muiTableHeadRowProps }, } = table;
|
2047
2046
|
const tableRowProps = muiTableHeadRowProps instanceof Function
|
2048
2047
|
? muiTableHeadRowProps({ headerGroup, table })
|
2049
2048
|
: muiTableHeadRowProps;
|
2050
2049
|
return (React__default["default"].createElement(TableRow__default["default"], Object.assign({}, tableRowProps, { sx: (theme) => (Object.assign({ backgroundColor: styles.lighten(theme.palette.background.default, 0.04), boxShadow: `4px 0 8px ${styles.alpha(theme.palette.common.black, 0.1)}`, display: layoutMode === 'grid' ? 'flex' : 'table-row', top: 0 }, ((tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx) instanceof Function
|
2051
2050
|
? tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx(theme)
|
2052
|
-
: tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx))) }),
|
2053
|
-
}
|
2054
|
-
|
2055
|
-
const
|
2051
|
+
: tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx))) }),
|
2052
|
+
virtualPaddingLeft ? (React__default["default"].createElement("th", { style: { display: 'flex', width: virtualPaddingLeft } })) : null,
|
2053
|
+
(virtualColumns !== null && virtualColumns !== void 0 ? virtualColumns : headerGroup.headers).map((headerOrVirtualHeader) => {
|
2054
|
+
const header = virtualColumns
|
2055
|
+
? headerGroup.headers[headerOrVirtualHeader.index]
|
2056
|
+
: headerOrVirtualHeader;
|
2057
|
+
return (React__default["default"].createElement(MRT_TableHeadCell, { header: header, key: header.id, table: table }));
|
2058
|
+
}),
|
2059
|
+
virtualPaddingRight ? (React__default["default"].createElement("th", { style: { display: 'flex', width: virtualPaddingRight } })) : null));
|
2060
|
+
};
|
2061
|
+
|
2062
|
+
const MRT_TableHead = ({ table, virtualColumns, virtualPaddingLeft, virtualPaddingRight, }) => {
|
2056
2063
|
const { getHeaderGroups, getState, options: { enableStickyHeader, layoutMode, muiTableHeadProps }, } = table;
|
2057
2064
|
const { isFullScreen } = getState();
|
2058
2065
|
const tableHeadProps = muiTableHeadProps instanceof Function
|
@@ -2061,7 +2068,7 @@ const MRT_TableHead = ({ table }) => {
|
|
2061
2068
|
const stickyHeader = enableStickyHeader || isFullScreen;
|
2062
2069
|
return (React__default["default"].createElement(TableHead__default["default"], Object.assign({}, tableHeadProps, { sx: (theme) => (Object.assign({ display: layoutMode === 'grid' ? 'grid' : 'table-row-group', opacity: 0.97, position: stickyHeader ? 'sticky' : 'relative', top: stickyHeader && layoutMode === 'grid' ? 0 : undefined, zIndex: stickyHeader ? 2 : undefined }, ((tableHeadProps === null || tableHeadProps === void 0 ? void 0 : tableHeadProps.sx) instanceof Function
|
2063
2070
|
? tableHeadProps === null || tableHeadProps === void 0 ? void 0 : tableHeadProps.sx(theme)
|
2064
|
-
: tableHeadProps === null || tableHeadProps === void 0 ? void 0 : tableHeadProps.sx))) }), getHeaderGroups().map((headerGroup) => (React__default["default"].createElement(MRT_TableHeadRow, { headerGroup: headerGroup, key: headerGroup.id, table: table })))));
|
2071
|
+
: tableHeadProps === null || tableHeadProps === void 0 ? void 0 : tableHeadProps.sx))) }), getHeaderGroups().map((headerGroup) => (React__default["default"].createElement(MRT_TableHeadRow, { headerGroup: headerGroup, key: headerGroup.id, table: table, virtualColumns: virtualColumns, virtualPaddingLeft: virtualPaddingLeft, virtualPaddingRight: virtualPaddingRight })))));
|
2065
2072
|
};
|
2066
2073
|
|
2067
2074
|
const MRT_EditCellTextField = ({ cell, showLabel, table, }) => {
|
@@ -2200,7 +2207,7 @@ const MRT_TableBodyCellValue = ({ cell, table }) => {
|
|
2200
2207
|
: (_b = (_a = columnDef === null || columnDef === void 0 ? void 0 : columnDef.Cell) === null || _a === void 0 ? void 0 : _a.call(columnDef, { cell, column, row, table })) !== null && _b !== void 0 ? _b : cell.renderValue()));
|
2201
2208
|
};
|
2202
2209
|
|
2203
|
-
const MRT_TableBodyCell = ({ cell, enableHover, numRows, rowIndex, rowRef, table, }) => {
|
2210
|
+
const MRT_TableBodyCell = ({ cell, enableHover, measureElement, numRows, rowIndex, rowRef, table, virtualCell, }) => {
|
2204
2211
|
var _a, _b;
|
2205
2212
|
const theme = styles.useTheme();
|
2206
2213
|
const { getState, options: { editingMode, enableClickToCopy, enableColumnOrdering, enableEditing, enableGrouping, enableRowNumbers, layoutMode, muiTableBodyCellProps, muiTableBodyCellSkeletonProps, rowNumberMode, }, refs: { editInputRefs }, setEditingCell, setHoveredColumn, } = table;
|
@@ -2272,7 +2279,11 @@ const MRT_TableBodyCell = ({ cell, enableHover, numRows, rowIndex, rowRef, table
|
|
2272
2279
|
setHoveredColumn(columnDef.enableColumnOrdering !== false ? column : null);
|
2273
2280
|
}
|
2274
2281
|
};
|
2275
|
-
return (React__default["default"].createElement(TableCell__default["default"], Object.assign({
|
2282
|
+
return (React__default["default"].createElement(TableCell__default["default"], Object.assign({ "data-index": virtualCell === null || virtualCell === void 0 ? void 0 : virtualCell.index, ref: (node) => {
|
2283
|
+
if (node) {
|
2284
|
+
measureElement === null || measureElement === void 0 ? void 0 : measureElement(node);
|
2285
|
+
}
|
2286
|
+
} }, tableCellProps, { onDragEnter: handleDragEnter, onDoubleClick: handleDoubleClick, sx: (theme) => (Object.assign(Object.assign({ alignItems: layoutMode === 'grid' ? 'center' : undefined, cursor: isEditable && editingMode === 'cell' ? 'pointer' : 'inherit', overflow: 'hidden', p: density === 'compact'
|
2276
2287
|
? columnDefType === 'display'
|
2277
2288
|
? '0 0.5rem'
|
2278
2289
|
: '0.5rem'
|
@@ -2298,7 +2309,12 @@ const MRT_TableBodyCell = ({ cell, enableHover, numRows, rowIndex, rowRef, table
|
|
2298
2309
|
? `${styles.lighten(theme.palette.background.default, 0.2)} !important`
|
2299
2310
|
: `${styles.darken(theme.palette.background.default, 0.1)} !important`
|
2300
2311
|
: undefined,
|
2301
|
-
} }, getCommonCellStyles({
|
2312
|
+
} }, getCommonCellStyles({
|
2313
|
+
column,
|
2314
|
+
table,
|
2315
|
+
theme,
|
2316
|
+
tableCellProps,
|
2317
|
+
})), draggingBorders)) }),
|
2302
2318
|
React__default["default"].createElement(React__default["default"].Fragment, null, cell.getIsPlaceholder() ? null : isLoading || showSkeletons ? (React__default["default"].createElement(Skeleton__default["default"], Object.assign({ animation: "wave", height: 20, width: skeletonWidth }, skeletonProps))) : enableRowNumbers &&
|
2303
2319
|
rowNumberMode === 'static' &&
|
2304
2320
|
column.id === 'mrt-row-numbers' ? (rowIndex + 1) : column.id === 'mrt-row-drag' ? (React__default["default"].createElement(MRT_TableBodyRowGrabHandle, { cell: cell, rowRef: rowRef, table: table })) : columnDefType === 'display' &&
|
@@ -2340,7 +2356,7 @@ const MRT_TableDetailPanel = ({ parentRowRef, row, table, virtualRow, }) => {
|
|
2340
2356
|
: tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.sx))) }), renderDetailPanel && (React__default["default"].createElement(Collapse__default["default"], { in: row.getIsExpanded(), mountOnEnter: true, unmountOnExit: true }, !isLoading && renderDetailPanel({ row, table }))))));
|
2341
2357
|
};
|
2342
2358
|
|
2343
|
-
const MRT_TableBodyRow = ({ measureElement, numRows, row, rowIndex, table, virtualRow, }) => {
|
2359
|
+
const MRT_TableBodyRow = ({ columnVirtualizer, measureElement, numRows, row, rowIndex, table, virtualColumns, virtualPaddingLeft, virtualPaddingRight, virtualRow, }) => {
|
2344
2360
|
const theme = styles.useTheme();
|
2345
2361
|
const { getIsSomeColumnsPinned, getState, options: { enableRowOrdering, layoutMode, memoMode, muiTableBodyRowProps, renderDetailPanel, }, setHoveredRow, } = table;
|
2346
2362
|
const { draggingColumn, draggingRow, editingCell, editingRow, hoveredRow } = getState();
|
@@ -2379,37 +2395,50 @@ const MRT_TableBodyRow = ({ measureElement, numRows, row, rowIndex, table, virtu
|
|
2379
2395
|
: undefined,
|
2380
2396
|
} }, ((tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx) instanceof Function
|
2381
2397
|
? tableRowProps.sx(theme)
|
2382
|
-
: tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx)), draggingBorders)) }),
|
2383
|
-
|
2384
|
-
|
2385
|
-
|
2386
|
-
|
2387
|
-
|
2388
|
-
|
2389
|
-
|
2390
|
-
|
2391
|
-
|
2392
|
-
|
2393
|
-
|
2394
|
-
|
2395
|
-
|
2396
|
-
|
2397
|
-
|
2398
|
-
|
2398
|
+
: tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx)), draggingBorders)) }),
|
2399
|
+
virtualPaddingLeft ? (React__default["default"].createElement("td", { style: { display: 'flex', width: virtualPaddingLeft } })) : null,
|
2400
|
+
(virtualColumns !== null && virtualColumns !== void 0 ? virtualColumns : row.getVisibleCells()).map((cellOrVirtualCell) => {
|
2401
|
+
const cell = columnVirtualizer
|
2402
|
+
? row.getVisibleCells()[cellOrVirtualCell.index]
|
2403
|
+
: cellOrVirtualCell;
|
2404
|
+
const props = {
|
2405
|
+
cell,
|
2406
|
+
enableHover: (tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.hover) !== false,
|
2407
|
+
key: cell.id,
|
2408
|
+
measureElement: columnVirtualizer === null || columnVirtualizer === void 0 ? void 0 : columnVirtualizer.measureElement,
|
2409
|
+
numRows,
|
2410
|
+
rowIndex,
|
2411
|
+
rowRef,
|
2412
|
+
table,
|
2413
|
+
virtualCell: columnVirtualizer
|
2414
|
+
? cellOrVirtualCell
|
2415
|
+
: undefined,
|
2416
|
+
};
|
2417
|
+
return memoMode === 'cells' &&
|
2418
|
+
cell.column.columnDef.columnDefType === 'data' &&
|
2419
|
+
!draggingColumn &&
|
2420
|
+
!draggingRow &&
|
2421
|
+
(editingCell === null || editingCell === void 0 ? void 0 : editingCell.id) !== cell.id &&
|
2422
|
+
(editingRow === null || editingRow === void 0 ? void 0 : editingRow.id) !== row.id ? (React__default["default"].createElement(Memo_MRT_TableBodyCell, Object.assign({}, props))) : (React__default["default"].createElement(MRT_TableBodyCell, Object.assign({}, props)));
|
2423
|
+
}),
|
2424
|
+
virtualPaddingRight ? (React__default["default"].createElement("td", { style: { display: 'flex', width: virtualPaddingRight } })) : null),
|
2399
2425
|
renderDetailPanel && !row.getIsGrouped() && (React__default["default"].createElement(MRT_TableDetailPanel, { parentRowRef: rowRef, row: row, table: table, virtualRow: virtualRow }))));
|
2400
2426
|
};
|
2401
2427
|
const Memo_MRT_TableBodyRow = React.memo(MRT_TableBodyRow, (prev, next) => prev.row === next.row);
|
2402
2428
|
|
2403
|
-
const MRT_TableBody = ({ table }) => {
|
2429
|
+
const MRT_TableBody = ({ columnVirtualizer, table, virtualColumns, virtualPaddingLeft, virtualPaddingRight, }) => {
|
2404
2430
|
var _a, _b, _c;
|
2405
|
-
const { getRowModel, getPrePaginationRowModel, getState, options: { enableGlobalFilterRankedResults, enablePagination, enableRowVirtualization, layoutMode, localization, manualFiltering, manualSorting, memoMode, muiTableBodyProps, virtualizerInstanceRef, virtualizerProps, }, refs: { tableContainerRef, tablePaperRef }, } = table;
|
2431
|
+
const { getRowModel, getPrePaginationRowModel, getState, options: { enableGlobalFilterRankedResults, enablePagination, enableRowVirtualization, layoutMode, localization, manualFiltering, manualSorting, memoMode, muiTableBodyProps, rowVirtualizerInstanceRef, rowVirtualizerProps, virtualizerInstanceRef, virtualizerProps, }, refs: { tableContainerRef, tablePaperRef }, } = table;
|
2406
2432
|
const { columnFilters, density, globalFilter, pagination, sorting } = getState();
|
2407
2433
|
const tableBodyProps = muiTableBodyProps instanceof Function
|
2408
2434
|
? muiTableBodyProps({ table })
|
2409
2435
|
: muiTableBodyProps;
|
2410
|
-
const
|
2436
|
+
const vProps_old = virtualizerProps instanceof Function
|
2411
2437
|
? virtualizerProps({ table })
|
2412
2438
|
: virtualizerProps;
|
2439
|
+
const vProps = rowVirtualizerProps instanceof Function
|
2440
|
+
? rowVirtualizerProps({ table })
|
2441
|
+
: rowVirtualizerProps;
|
2413
2442
|
const rows = React.useMemo(() => {
|
2414
2443
|
if (enableGlobalFilterRankedResults &&
|
2415
2444
|
globalFilter &&
|
@@ -2435,14 +2464,22 @@ const MRT_TableBody = ({ table }) => {
|
|
2435
2464
|
pagination.pageIndex,
|
2436
2465
|
pagination.pageSize,
|
2437
2466
|
]);
|
2438
|
-
const
|
2439
|
-
? reactVirtual.useVirtualizer(Object.assign({ count: rows.length, estimateSize: () => density === 'compact' ? 37 : density === 'comfortable' ? 58 : 73, getScrollElement: () => tableContainerRef.current, measureElement: (element) => element === null || element === void 0 ? void 0 : element.getBoundingClientRect().height, overscan: 4 }, vProps))
|
2467
|
+
const rowVirtualizer = enableRowVirtualization
|
2468
|
+
? reactVirtual.useVirtualizer(Object.assign(Object.assign({ count: rows.length, estimateSize: () => density === 'compact' ? 37 : density === 'comfortable' ? 58 : 73, getScrollElement: () => tableContainerRef.current, measureElement: (element) => element === null || element === void 0 ? void 0 : element.getBoundingClientRect().height, overscan: 4 }, vProps_old), vProps))
|
2440
2469
|
: undefined;
|
2441
|
-
if (
|
2442
|
-
|
2470
|
+
if (rowVirtualizerInstanceRef && rowVirtualizer) {
|
2471
|
+
rowVirtualizerInstanceRef.current = rowVirtualizer;
|
2472
|
+
}
|
2473
|
+
//deprecated
|
2474
|
+
if (virtualizerInstanceRef && rowVirtualizer) {
|
2475
|
+
virtualizerInstanceRef.current = rowVirtualizer;
|
2443
2476
|
}
|
2444
|
-
const virtualRows =
|
2445
|
-
|
2477
|
+
const virtualRows = rowVirtualizer
|
2478
|
+
? rowVirtualizer.getVirtualItems()
|
2479
|
+
: undefined;
|
2480
|
+
return (React__default["default"].createElement(TableBody__default["default"], Object.assign({}, tableBodyProps, { sx: (theme) => (Object.assign({ display: layoutMode === 'grid' ? 'grid' : 'table-row-group', height: rowVirtualizer
|
2481
|
+
? `${rowVirtualizer.getTotalSize()}px`
|
2482
|
+
: 'inherit', minHeight: !rows.length ? '100px' : undefined, position: 'relative' }, ((tableBodyProps === null || tableBodyProps === void 0 ? void 0 : tableBodyProps.sx) instanceof Function
|
2446
2483
|
? tableBodyProps === null || tableBodyProps === void 0 ? void 0 : tableBodyProps.sx(theme)
|
2447
2484
|
: tableBodyProps === null || tableBodyProps === void 0 ? void 0 : tableBodyProps.sx))) }), (_a = tableBodyProps === null || tableBodyProps === void 0 ? void 0 : tableBodyProps.children) !== null && _a !== void 0 ? _a : (!rows.length ? (React__default["default"].createElement("tr", { style: { display: layoutMode === 'grid' ? 'grid' : 'table-row' } },
|
2448
2485
|
React__default["default"].createElement("td", { colSpan: table.getVisibleLeafColumns().length, style: { display: layoutMode === 'grid' ? 'grid' : 'table-cell' } },
|
@@ -2456,19 +2493,21 @@ const MRT_TableBody = ({ table }) => {
|
|
2456
2493
|
} }, globalFilter || columnFilters.length
|
2457
2494
|
? localization.noResultsFound
|
2458
2495
|
: localization.noRecordsToDisplay)))) : (React__default["default"].createElement(React__default["default"].Fragment, null, (virtualRows !== null && virtualRows !== void 0 ? virtualRows : rows).map((rowOrVirtualRow, rowIndex) => {
|
2459
|
-
const row =
|
2496
|
+
const row = rowVirtualizer
|
2460
2497
|
? rows[rowOrVirtualRow.index]
|
2461
2498
|
: rowOrVirtualRow;
|
2462
2499
|
const props = {
|
2500
|
+
columnVirtualizer,
|
2463
2501
|
key: row.id,
|
2464
|
-
measureElement:
|
2465
|
-
? virtualizer.measureElement
|
2466
|
-
: undefined,
|
2502
|
+
measureElement: rowVirtualizer === null || rowVirtualizer === void 0 ? void 0 : rowVirtualizer.measureElement,
|
2467
2503
|
numRows: rows.length,
|
2468
2504
|
row,
|
2469
|
-
rowIndex:
|
2505
|
+
rowIndex: rowVirtualizer ? rowOrVirtualRow.index : rowIndex,
|
2470
2506
|
table,
|
2471
|
-
|
2507
|
+
virtualColumns,
|
2508
|
+
virtualPaddingLeft,
|
2509
|
+
virtualPaddingRight,
|
2510
|
+
virtualRow: rowVirtualizer
|
2472
2511
|
? rowOrVirtualRow
|
2473
2512
|
: undefined,
|
2474
2513
|
};
|
@@ -2477,7 +2516,7 @@ const MRT_TableBody = ({ table }) => {
|
|
2477
2516
|
};
|
2478
2517
|
const Memo_MRT_TableBody = React.memo(MRT_TableBody, (prev, next) => prev.table.options.data === next.table.options.data);
|
2479
2518
|
|
2480
|
-
const MRT_TableFooterCell = ({ footer, table }) => {
|
2519
|
+
const MRT_TableFooterCell = ({ footer, table, }) => {
|
2481
2520
|
var _a, _b, _c;
|
2482
2521
|
const { getState, options: { layoutMode, muiTableFooterCellProps }, } = table;
|
2483
2522
|
const { density } = getState();
|
@@ -2495,7 +2534,12 @@ const MRT_TableFooterCell = ({ footer, table }) => {
|
|
2495
2534
|
? '0.5rem'
|
2496
2535
|
: density === 'comfortable'
|
2497
2536
|
? '1rem'
|
2498
|
-
: '1.5rem', verticalAlign: 'top', zIndex: column.getIsPinned() && columnDefType !== 'group' ? 2 : 1 }, getCommonCellStyles({
|
2537
|
+
: '1.5rem', verticalAlign: 'top', zIndex: column.getIsPinned() && columnDefType !== 'group' ? 2 : 1 }, getCommonCellStyles({
|
2538
|
+
column,
|
2539
|
+
table,
|
2540
|
+
theme,
|
2541
|
+
tableCellProps,
|
2542
|
+
}))) }),
|
2499
2543
|
React__default["default"].createElement(React__default["default"].Fragment, null, footer.isPlaceholder
|
2500
2544
|
? null
|
2501
2545
|
: (_c = (_b = (columnDef.Footer instanceof Function
|
@@ -2507,7 +2551,7 @@ const MRT_TableFooterCell = ({ footer, table }) => {
|
|
2507
2551
|
: columnDef.Footer)) !== null && _b !== void 0 ? _b : columnDef.footer) !== null && _c !== void 0 ? _c : null)));
|
2508
2552
|
};
|
2509
2553
|
|
2510
|
-
const MRT_TableFooterRow = ({ footerGroup, table }) => {
|
2554
|
+
const MRT_TableFooterRow = ({ footerGroup, table, virtualColumns, virtualPaddingLeft, virtualPaddingRight, }) => {
|
2511
2555
|
var _a;
|
2512
2556
|
const { options: { layoutMode, muiTableFooterRowProps }, } = table;
|
2513
2557
|
// if no content in row, skip row
|
@@ -2518,12 +2562,20 @@ const MRT_TableFooterRow = ({ footerGroup, table }) => {
|
|
2518
2562
|
const tableRowProps = muiTableFooterRowProps instanceof Function
|
2519
2563
|
? muiTableFooterRowProps({ footerGroup, table })
|
2520
2564
|
: muiTableFooterRowProps;
|
2521
|
-
return (React__default["default"].createElement(TableRow__default["default"], Object.assign({}, tableRowProps, { sx: (theme) => (Object.assign({ display: layoutMode === 'grid' ? 'flex' : 'table-row' }, ((tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx) instanceof Function
|
2565
|
+
return (React__default["default"].createElement(TableRow__default["default"], Object.assign({}, tableRowProps, { sx: (theme) => (Object.assign({ display: layoutMode === 'grid' ? 'flex' : 'table-row', width: '100%' }, ((tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx) instanceof Function
|
2522
2566
|
? tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx(theme)
|
2523
|
-
: tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx))) }),
|
2524
|
-
}
|
2525
|
-
|
2526
|
-
const
|
2567
|
+
: tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx))) }),
|
2568
|
+
virtualPaddingLeft ? (React__default["default"].createElement("th", { style: { display: 'flex', width: virtualPaddingLeft } })) : null,
|
2569
|
+
(virtualColumns !== null && virtualColumns !== void 0 ? virtualColumns : footerGroup.headers).map((footerOrVirtualFooter) => {
|
2570
|
+
const footer = virtualColumns
|
2571
|
+
? footerGroup.headers[footerOrVirtualFooter.index]
|
2572
|
+
: footerOrVirtualFooter;
|
2573
|
+
return (React__default["default"].createElement(MRT_TableFooterCell, { footer: footer, key: footer.id, table: table }));
|
2574
|
+
}),
|
2575
|
+
virtualPaddingRight ? (React__default["default"].createElement("th", { style: { display: 'flex', width: virtualPaddingRight } })) : null));
|
2576
|
+
};
|
2577
|
+
|
2578
|
+
const MRT_TableFooter = ({ table, virtualColumns, virtualPaddingLeft, virtualPaddingRight, }) => {
|
2527
2579
|
const { getFooterGroups, getState, options: { enableStickyFooter, layoutMode, muiTableFooterProps }, } = table;
|
2528
2580
|
const { isFullScreen } = getState();
|
2529
2581
|
const tableFooterProps = muiTableFooterProps instanceof Function
|
@@ -2536,21 +2588,74 @@ const MRT_TableFooter = ({ table }) => {
|
|
2536
2588
|
: `1px solid ${theme.palette.grey[700]}`
|
2537
2589
|
: undefined, position: stickFooter ? 'sticky' : undefined }, ((tableFooterProps === null || tableFooterProps === void 0 ? void 0 : tableFooterProps.sx) instanceof Function
|
2538
2590
|
? tableFooterProps === null || tableFooterProps === void 0 ? void 0 : tableFooterProps.sx(theme)
|
2539
|
-
: tableFooterProps === null || tableFooterProps === void 0 ? void 0 : tableFooterProps.sx))) }), getFooterGroups().map((footerGroup) => (React__default["default"].createElement(MRT_TableFooterRow, { footerGroup: footerGroup, key: footerGroup.id, table: table })))));
|
2591
|
+
: tableFooterProps === null || tableFooterProps === void 0 ? void 0 : tableFooterProps.sx))) }), getFooterGroups().map((footerGroup) => (React__default["default"].createElement(MRT_TableFooterRow, { footerGroup: footerGroup, key: footerGroup.id, table: table, virtualColumns: virtualColumns, virtualPaddingLeft: virtualPaddingLeft, virtualPaddingRight: virtualPaddingRight })))));
|
2540
2592
|
};
|
2541
2593
|
|
2542
2594
|
const MRT_Table = ({ table }) => {
|
2543
|
-
|
2544
|
-
const {
|
2595
|
+
var _a, _b;
|
2596
|
+
const { getState, options: { columnVirtualizerInstanceRef, columnVirtualizerProps, enableColumnResizing, enableColumnVirtualization, enablePinning, enableStickyHeader, enableTableFooter, enableTableHead, layoutMode, memoMode, muiTableProps, }, refs: { tableContainerRef }, } = table;
|
2597
|
+
const { isFullScreen, columnPinning, columnVisibility } = getState();
|
2545
2598
|
const tableProps = muiTableProps instanceof Function
|
2546
2599
|
? muiTableProps({ table })
|
2547
2600
|
: muiTableProps;
|
2548
|
-
|
2601
|
+
const vProps = columnVirtualizerProps instanceof Function
|
2602
|
+
? columnVirtualizerProps({ table })
|
2603
|
+
: columnVirtualizerProps;
|
2604
|
+
//get first 16 column widths and average them
|
2605
|
+
const averageColumnWidth = React.useMemo(() => {
|
2606
|
+
var _a, _b, _c, _d;
|
2607
|
+
const columnsWidths = (_d = (_c = (_b = (_a = table
|
2608
|
+
.getRowModel()
|
2609
|
+
.rows[0]) === null || _a === void 0 ? void 0 : _a.getCenterVisibleCells()) === null || _b === void 0 ? void 0 : _b.slice(0, 16)) === null || _c === void 0 ? void 0 : _c.map((cell) => cell.column.getSize() * 1.25)) !== null && _d !== void 0 ? _d : [];
|
2610
|
+
return columnsWidths.reduce((a, b) => a + b, 0) / columnsWidths.length;
|
2611
|
+
}, [table.getRowModel().rows, columnPinning, columnVisibility]);
|
2612
|
+
const pinnedColumnIndexes = React.useMemo(() => enableColumnVirtualization && enablePinning
|
2613
|
+
? [
|
2614
|
+
...table.getLeftFlatHeaders().map((h) => h.column.getPinnedIndex()),
|
2615
|
+
...table
|
2616
|
+
.getRightFlatHeaders()
|
2617
|
+
.map((h) => table.getVisibleFlatColumns().length -
|
2618
|
+
h.column.getPinnedIndex() -
|
2619
|
+
1),
|
2620
|
+
]
|
2621
|
+
: [], [columnPinning, enableColumnVirtualization, enablePinning]);
|
2622
|
+
const columnVirtualizer = enableColumnVirtualization
|
2623
|
+
? reactVirtual.useVirtualizer(Object.assign({ count: table.getRowModel().rows[0].getVisibleCells().length, estimateSize: () => averageColumnWidth, getScrollElement: () => tableContainerRef.current, horizontal: true, measureElement: (element) => element === null || element === void 0 ? void 0 : element.getBoundingClientRect().width, overscan: 3, rangeExtractor: React.useCallback((range) => [
|
2624
|
+
...new Set([
|
2625
|
+
...pinnedColumnIndexes,
|
2626
|
+
...reactVirtual.defaultRangeExtractor(range),
|
2627
|
+
]),
|
2628
|
+
].sort((a, b) => a - b), [pinnedColumnIndexes]) }, vProps))
|
2629
|
+
: undefined;
|
2630
|
+
if (columnVirtualizerInstanceRef && columnVirtualizer) {
|
2631
|
+
columnVirtualizerInstanceRef.current = columnVirtualizer;
|
2632
|
+
}
|
2633
|
+
const virtualColumns = columnVirtualizer
|
2634
|
+
? columnVirtualizer.getVirtualItems()
|
2635
|
+
: undefined;
|
2636
|
+
let virtualPaddingLeft;
|
2637
|
+
let virtualPaddingRight;
|
2638
|
+
if (columnVirtualizer && (virtualColumns === null || virtualColumns === void 0 ? void 0 : virtualColumns.length)) {
|
2639
|
+
virtualPaddingLeft = (virtualColumns === null || virtualColumns === void 0 ? void 0 : virtualColumns.length)
|
2640
|
+
? ((_a = virtualColumns[0]) === null || _a === void 0 ? void 0 : _a.start) || 0
|
2641
|
+
: 0;
|
2642
|
+
virtualPaddingRight = (virtualColumns === null || virtualColumns === void 0 ? void 0 : virtualColumns.length)
|
2643
|
+
? columnVirtualizer.getTotalSize() -
|
2644
|
+
(((_b = virtualColumns[virtualColumns.length - 1]) === null || _b === void 0 ? void 0 : _b.end) || 0)
|
2645
|
+
: 0;
|
2646
|
+
}
|
2647
|
+
const props = {
|
2648
|
+
table,
|
2649
|
+
virtualColumns,
|
2650
|
+
virtualPaddingLeft,
|
2651
|
+
virtualPaddingRight,
|
2652
|
+
};
|
2653
|
+
return (React__default["default"].createElement(Table__default["default"], Object.assign({ stickyHeader: enableStickyHeader || isFullScreen }, tableProps, { sx: (theme) => (Object.assign({ display: layoutMode === 'grid' ? 'grid' : 'table', tableLayout: layoutMode !== 'grid' && enableColumnResizing ? 'fixed' : undefined }, ((tableProps === null || tableProps === void 0 ? void 0 : tableProps.sx) instanceof Function
|
2549
2654
|
? tableProps.sx(theme)
|
2550
2655
|
: tableProps === null || tableProps === void 0 ? void 0 : tableProps.sx))) }),
|
2551
|
-
enableTableHead && React__default["default"].createElement(MRT_TableHead, {
|
2552
|
-
memoMode === 'table-body' ? (React__default["default"].createElement(Memo_MRT_TableBody, {
|
2553
|
-
enableTableFooter && React__default["default"].createElement(MRT_TableFooter, {
|
2656
|
+
enableTableHead && React__default["default"].createElement(MRT_TableHead, Object.assign({}, props)),
|
2657
|
+
memoMode === 'table-body' ? (React__default["default"].createElement(Memo_MRT_TableBody, Object.assign({ columnVirtualizer: columnVirtualizer }, props))) : (React__default["default"].createElement(MRT_TableBody, Object.assign({ columnVirtualizer: columnVirtualizer }, props))),
|
2658
|
+
enableTableFooter && React__default["default"].createElement(MRT_TableFooter, Object.assign({}, props))));
|
2554
2659
|
};
|
2555
2660
|
|
2556
2661
|
const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;
|
@@ -2905,7 +3010,7 @@ const MaterialReactTable = (_a) => {
|
|
2905
3010
|
const _sortingFns = React.useMemo(() => (Object.assign(Object.assign({}, MRT_SortingFns), sortingFns)), []);
|
2906
3011
|
const _defaultColumn = React.useMemo(() => (Object.assign(Object.assign({}, MRT_DefaultColumn), defaultColumn)), []);
|
2907
3012
|
const _defaultDisplayColumn = React.useMemo(() => (Object.assign(Object.assign({}, MRT_DefaultDisplayColumn), defaultDisplayColumn)), []);
|
2908
|
-
if (rest.enableRowVirtualization) {
|
3013
|
+
if (rest.enableRowVirtualization || rest.enableColumnVirtualization) {
|
2909
3014
|
layoutMode = 'grid';
|
2910
3015
|
enableStickyHeader = true;
|
2911
3016
|
}
|