@mui/x-data-grid-pro 5.16.0 → 5.17.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/CHANGELOG.md +138 -1
- package/DataGridPro/DataGridPro.js +17 -0
- package/DataGridPro/useDataGridProComponent.js +4 -0
- package/DataGridPro/useDataGridProProps.js +2 -1
- package/components/DataGridProVirtualScroller.js +18 -15
- package/components/GridDetailPanelToggleCell.js +2 -1
- package/components/GridTreeDataGroupingCell.js +2 -1
- package/hooks/features/detailPanel/useGridDetailPanelPreProcessors.js +15 -0
- package/hooks/features/infiniteLoader/useGridInfiniteLoader.d.ts +1 -1
- package/hooks/features/infiniteLoader/useGridInfiniteLoader.js +4 -4
- package/hooks/features/lazyLoader/useGridLazyLoader.d.ts +10 -0
- package/hooks/features/lazyLoader/useGridLazyLoader.js +178 -0
- package/hooks/features/lazyLoader/useGridLazyLoaderPreProcessors.d.ts +5 -0
- package/hooks/features/lazyLoader/useGridLazyLoaderPreProcessors.js +32 -0
- package/hooks/features/treeData/gridTreeDataUtils.d.ts +3 -1
- package/hooks/features/treeData/gridTreeDataUtils.js +1 -1
- package/hooks/features/treeData/useGridTreeDataPreProcessors.js +2 -1
- package/index.js +1 -1
- package/legacy/DataGridPro/DataGridPro.js +17 -0
- package/legacy/DataGridPro/useDataGridProComponent.js +4 -0
- package/legacy/DataGridPro/useDataGridProProps.js +2 -1
- package/legacy/components/DataGridProVirtualScroller.js +18 -15
- package/legacy/components/GridDetailPanelToggleCell.js +2 -1
- package/legacy/components/GridTreeDataGroupingCell.js +2 -1
- package/legacy/hooks/features/detailPanel/useGridDetailPanelPreProcessors.js +15 -0
- package/legacy/hooks/features/infiniteLoader/useGridInfiniteLoader.js +4 -4
- package/legacy/hooks/features/lazyLoader/useGridLazyLoader.js +185 -0
- package/legacy/hooks/features/lazyLoader/useGridLazyLoaderPreProcessors.js +35 -0
- package/legacy/hooks/features/treeData/gridTreeDataUtils.js +1 -1
- package/legacy/hooks/features/treeData/useGridTreeDataPreProcessors.js +2 -1
- package/legacy/index.js +1 -1
- package/legacy/models/gridFetchRowsParams.js +1 -0
- package/legacy/models/index.js +2 -1
- package/legacy/utils/releaseInfo.js +1 -1
- package/models/dataGridProProps.d.ts +22 -1
- package/models/gridFetchRowsParams.d.ts +22 -0
- package/models/gridFetchRowsParams.js +1 -0
- package/models/index.d.ts +1 -0
- package/models/index.js +2 -1
- package/modern/DataGridPro/DataGridPro.js +17 -0
- package/modern/DataGridPro/useDataGridProComponent.js +4 -0
- package/modern/DataGridPro/useDataGridProProps.js +2 -1
- package/modern/components/DataGridProVirtualScroller.js +18 -15
- package/modern/components/GridDetailPanelToggleCell.js +2 -1
- package/modern/components/GridTreeDataGroupingCell.js +2 -1
- package/modern/hooks/features/detailPanel/useGridDetailPanelPreProcessors.js +15 -0
- package/modern/hooks/features/infiniteLoader/useGridInfiniteLoader.js +4 -4
- package/modern/hooks/features/lazyLoader/useGridLazyLoader.js +176 -0
- package/modern/hooks/features/lazyLoader/useGridLazyLoaderPreProcessors.js +30 -0
- package/modern/hooks/features/treeData/gridTreeDataUtils.js +1 -1
- package/modern/hooks/features/treeData/useGridTreeDataPreProcessors.js +2 -1
- package/modern/index.js +1 -1
- package/modern/models/gridFetchRowsParams.js +1 -0
- package/modern/models/index.js +2 -1
- package/modern/utils/releaseInfo.js +1 -1
- package/node/DataGridPro/DataGridPro.js +17 -0
- package/node/DataGridPro/useDataGridProComponent.js +6 -0
- package/node/DataGridPro/useDataGridProProps.js +1 -0
- package/node/components/DataGridProVirtualScroller.js +18 -15
- package/node/components/GridDetailPanelToggleCell.js +2 -1
- package/node/components/GridTreeDataGroupingCell.js +2 -1
- package/node/hooks/features/detailPanel/useGridDetailPanelPreProcessors.js +16 -0
- package/node/hooks/features/infiniteLoader/useGridInfiniteLoader.js +3 -3
- package/node/hooks/features/lazyLoader/useGridLazyLoader.js +193 -0
- package/node/hooks/features/lazyLoader/useGridLazyLoaderPreProcessors.js +52 -0
- package/node/hooks/features/treeData/gridTreeDataUtils.js +1 -1
- package/node/hooks/features/treeData/useGridTreeDataPreProcessors.js +2 -1
- package/node/index.js +1 -1
- package/node/models/gridFetchRowsParams.js +5 -0
- package/node/models/index.js +13 -0
- package/node/utils/releaseInfo.js +1 -1
- package/package.json +3 -3
- package/typeOverloads/modules.d.ts +7 -1
- package/utils/releaseInfo.js +1 -1
|
@@ -100,7 +100,8 @@ export const useGridTreeDataPreProcessors = (apiRef, props) => {
|
|
|
100
100
|
rowTree,
|
|
101
101
|
isRowMatchingFilters: params.isRowMatchingFilters,
|
|
102
102
|
disableChildrenFiltering: props.disableChildrenFiltering,
|
|
103
|
-
filterModel: params.filterModel
|
|
103
|
+
filterModel: params.filterModel,
|
|
104
|
+
apiRef
|
|
104
105
|
});
|
|
105
106
|
}, [apiRef, props.disableChildrenFiltering]);
|
|
106
107
|
const sortRows = React.useCallback(params => {
|
package/index.js
CHANGED
|
@@ -276,6 +276,7 @@ DataGridProRaw.propTypes = {
|
|
|
276
276
|
*/
|
|
277
277
|
experimentalFeatures: PropTypes.shape({
|
|
278
278
|
columnGrouping: PropTypes.bool,
|
|
279
|
+
lazyLoading: PropTypes.bool,
|
|
279
280
|
newEditingApi: PropTypes.bool,
|
|
280
281
|
preventCommitWhileValidating: PropTypes.bool,
|
|
281
282
|
rowPinning: PropTypes.bool,
|
|
@@ -670,6 +671,14 @@ DataGridProRaw.propTypes = {
|
|
|
670
671
|
*/
|
|
671
672
|
onError: PropTypes.func,
|
|
672
673
|
|
|
674
|
+
/**
|
|
675
|
+
* Callback fired when rowCount is set and the next batch of virtualized rows is rendered.
|
|
676
|
+
* @param {GridFetchRowsParams} params With all properties from [[GridFetchRowsParams]].
|
|
677
|
+
* @param {MuiEvent<{}>} event The event object.
|
|
678
|
+
* @param {GridCallbackDetails} details Additional details for this callback.
|
|
679
|
+
*/
|
|
680
|
+
onFetchRows: PropTypes.func,
|
|
681
|
+
|
|
673
682
|
/**
|
|
674
683
|
* Callback fired when the Filter model changes before the filters are applied.
|
|
675
684
|
* @param {GridFilterModel} model With all properties from [[GridFilterModel]].
|
|
@@ -915,6 +924,14 @@ DataGridProRaw.propTypes = {
|
|
|
915
924
|
*/
|
|
916
925
|
rows: PropTypes.array.isRequired,
|
|
917
926
|
|
|
927
|
+
/**
|
|
928
|
+
* Loading rows can be processed on the server or client-side.
|
|
929
|
+
* Set it to 'client' if you would like enable infnite loading.
|
|
930
|
+
* Set it to 'server' if you would like to enable lazy loading.
|
|
931
|
+
* * @default "client"
|
|
932
|
+
*/
|
|
933
|
+
rowsLoadingMode: PropTypes.oneOf(['client', 'server']),
|
|
934
|
+
|
|
918
935
|
/**
|
|
919
936
|
* Sets the type of space between rows added by `getRowSpacing`.
|
|
920
937
|
* @default "margin"
|
|
@@ -11,6 +11,8 @@ import { useGridDetailPanel, detailPanelStateInitializer } from '../hooks/featur
|
|
|
11
11
|
import { useGridDetailPanelPreProcessors } from '../hooks/features/detailPanel/useGridDetailPanelPreProcessors';
|
|
12
12
|
import { useGridRowReorder } from '../hooks/features/rowReorder/useGridRowReorder';
|
|
13
13
|
import { useGridRowReorderPreProcessors } from '../hooks/features/rowReorder/useGridRowReorderPreProcessors';
|
|
14
|
+
import { useGridLazyLoader } from '../hooks/features/lazyLoader/useGridLazyLoader';
|
|
15
|
+
import { useGridLazyLoaderPreProcessors } from '../hooks/features/lazyLoader/useGridLazyLoaderPreProcessors';
|
|
14
16
|
import { useGridRowPinning, rowPinningStateInitializer } from '../hooks/features/rowPinning/useGridRowPinning';
|
|
15
17
|
import { useGridRowPinningPreProcessors } from '../hooks/features/rowPinning/useGridRowPinningPreProcessors';
|
|
16
18
|
export var useDataGridProComponent = function useDataGridProComponent(inputApiRef, props) {
|
|
@@ -25,6 +27,7 @@ export var useDataGridProComponent = function useDataGridProComponent(inputApiRe
|
|
|
25
27
|
useGridSelectionPreProcessors(apiRef, props);
|
|
26
28
|
useGridRowReorderPreProcessors(apiRef, props);
|
|
27
29
|
useGridTreeDataPreProcessors(apiRef, props);
|
|
30
|
+
useGridLazyLoaderPreProcessors(apiRef, props);
|
|
28
31
|
useGridRowPinningPreProcessors(apiRef);
|
|
29
32
|
useGridDetailPanelPreProcessors(apiRef, props); // The column pinning `hydrateColumns` pre-processor must be after every other `hydrateColumns` pre-processors
|
|
30
33
|
// Because it changes the order of the columns.
|
|
@@ -78,6 +81,7 @@ export var useDataGridProComponent = function useDataGridProComponent(inputApiRe
|
|
|
78
81
|
useGridRowReorder(apiRef, props);
|
|
79
82
|
useGridScroll(apiRef, props);
|
|
80
83
|
useGridInfiniteLoader(apiRef, props);
|
|
84
|
+
useGridLazyLoader(apiRef, props);
|
|
81
85
|
useGridColumnMenu(apiRef);
|
|
82
86
|
useGridCsvExport(apiRef);
|
|
83
87
|
useGridPrintExport(apiRef, props);
|
|
@@ -2,7 +2,7 @@ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
|
2
2
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { useThemeProps } from '@mui/material/styles';
|
|
5
|
-
import { DATA_GRID_DEFAULT_SLOTS_COMPONENTS, GRID_DEFAULT_LOCALE_TEXT, DATA_GRID_PROPS_DEFAULT_VALUES } from '@mui/x-data-grid';
|
|
5
|
+
import { DATA_GRID_DEFAULT_SLOTS_COMPONENTS, GRID_DEFAULT_LOCALE_TEXT, DATA_GRID_PROPS_DEFAULT_VALUES, GridFeatureModeConstant } from '@mui/x-data-grid';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* The default values of `DataGridProPropsWithDefaultValue` to inject in the props of DataGridPro.
|
|
@@ -15,6 +15,7 @@ export var DATA_GRID_PRO_PROPS_DEFAULT_VALUES = _extends({}, DATA_GRID_PROPS_DEF
|
|
|
15
15
|
disableChildrenFiltering: false,
|
|
16
16
|
disableChildrenSorting: false,
|
|
17
17
|
rowReordering: false,
|
|
18
|
+
rowsLoadingMode: GridFeatureModeConstant.client,
|
|
18
19
|
getDetailPanelHeight: function getDetailPanelHeight() {
|
|
19
20
|
return 500;
|
|
20
21
|
}
|
|
@@ -287,17 +287,20 @@ var DataGridProVirtualScroller = /*#__PURE__*/React.forwardRef(function DataGrid
|
|
|
287
287
|
var detailPanels = getDetailPanels();
|
|
288
288
|
var topPinnedRows = getRows({
|
|
289
289
|
renderContext: renderContext,
|
|
290
|
-
rows: topPinnedRowsData
|
|
290
|
+
rows: topPinnedRowsData,
|
|
291
|
+
position: 'center'
|
|
291
292
|
});
|
|
292
293
|
var pinnedRowsHeight = calculatePinnedRowsHeight(apiRef);
|
|
293
294
|
var mainRows = getRows({
|
|
294
295
|
renderContext: renderContext,
|
|
295
|
-
rowIndexOffset: topPinnedRowsData.length
|
|
296
|
+
rowIndexOffset: topPinnedRowsData.length,
|
|
297
|
+
position: 'center'
|
|
296
298
|
});
|
|
297
299
|
var bottomPinnedRows = getRows({
|
|
298
300
|
renderContext: renderContext,
|
|
299
301
|
rows: bottomPinnedRowsData,
|
|
300
|
-
rowIndexOffset: topPinnedRowsData.length + (mainRows ? mainRows.length : 0)
|
|
302
|
+
rowIndexOffset: topPinnedRowsData.length + (mainRows ? mainRows.length : 0),
|
|
303
|
+
position: 'center'
|
|
301
304
|
});
|
|
302
305
|
var contentProps = getContentProps();
|
|
303
306
|
var pinnedColumnsStyle = {
|
|
@@ -329,8 +332,8 @@ var DataGridProVirtualScroller = /*#__PURE__*/React.forwardRef(function DataGrid
|
|
|
329
332
|
minFirstColumn: leftRenderContext.firstColumnIndex,
|
|
330
333
|
maxLastColumn: leftRenderContext.lastColumnIndex,
|
|
331
334
|
availableSpace: 0,
|
|
332
|
-
|
|
333
|
-
|
|
335
|
+
rows: topPinnedRowsData,
|
|
336
|
+
position: 'left'
|
|
334
337
|
})
|
|
335
338
|
}), /*#__PURE__*/_jsx(VirtualScrollerPinnedRowsRenderZone, {
|
|
336
339
|
className: classes.pinnedRowsRenderZone,
|
|
@@ -346,9 +349,9 @@ var DataGridProVirtualScroller = /*#__PURE__*/React.forwardRef(function DataGrid
|
|
|
346
349
|
renderContext: rightRenderContext,
|
|
347
350
|
minFirstColumn: rightRenderContext.firstColumnIndex,
|
|
348
351
|
maxLastColumn: rightRenderContext.lastColumnIndex,
|
|
349
|
-
ignoreAutoHeight: true,
|
|
350
352
|
availableSpace: 0,
|
|
351
|
-
rows: topPinnedRowsData
|
|
353
|
+
rows: topPinnedRowsData,
|
|
354
|
+
position: 'right'
|
|
352
355
|
})
|
|
353
356
|
})]
|
|
354
357
|
}) : null, /*#__PURE__*/_jsxs(GridVirtualScrollerContent, _extends({}, contentProps, {
|
|
@@ -364,8 +367,8 @@ var DataGridProVirtualScroller = /*#__PURE__*/React.forwardRef(function DataGrid
|
|
|
364
367
|
minFirstColumn: leftRenderContext.firstColumnIndex,
|
|
365
368
|
maxLastColumn: leftRenderContext.lastColumnIndex,
|
|
366
369
|
availableSpace: 0,
|
|
367
|
-
|
|
368
|
-
|
|
370
|
+
rowIndexOffset: topPinnedRowsData.length,
|
|
371
|
+
position: 'left'
|
|
369
372
|
})
|
|
370
373
|
}), /*#__PURE__*/_jsx(GridVirtualScrollerRenderZone, _extends({}, getRenderZoneProps(), {
|
|
371
374
|
children: mainRows
|
|
@@ -381,8 +384,8 @@ var DataGridProVirtualScroller = /*#__PURE__*/React.forwardRef(function DataGrid
|
|
|
381
384
|
minFirstColumn: rightRenderContext.firstColumnIndex,
|
|
382
385
|
maxLastColumn: rightRenderContext.lastColumnIndex,
|
|
383
386
|
availableSpace: 0,
|
|
384
|
-
|
|
385
|
-
|
|
387
|
+
rowIndexOffset: topPinnedRowsData.length,
|
|
388
|
+
position: 'right'
|
|
386
389
|
})
|
|
387
390
|
}), detailPanels.length > 0 && /*#__PURE__*/_jsx(VirtualScrollerDetailPanels, {
|
|
388
391
|
className: classes.detailPanels,
|
|
@@ -408,9 +411,9 @@ var DataGridProVirtualScroller = /*#__PURE__*/React.forwardRef(function DataGrid
|
|
|
408
411
|
minFirstColumn: leftRenderContext.firstColumnIndex,
|
|
409
412
|
maxLastColumn: leftRenderContext.lastColumnIndex,
|
|
410
413
|
availableSpace: 0,
|
|
411
|
-
ignoreAutoHeight: true,
|
|
412
414
|
rows: bottomPinnedRowsData,
|
|
413
|
-
rowIndexOffset: topPinnedRowsData.length + (mainRows ? mainRows.length : 0)
|
|
415
|
+
rowIndexOffset: topPinnedRowsData.length + (mainRows ? mainRows.length : 0),
|
|
416
|
+
position: 'left'
|
|
414
417
|
})
|
|
415
418
|
}), /*#__PURE__*/_jsx(VirtualScrollerPinnedRowsRenderZone, {
|
|
416
419
|
className: classes.pinnedRowsRenderZone,
|
|
@@ -427,9 +430,9 @@ var DataGridProVirtualScroller = /*#__PURE__*/React.forwardRef(function DataGrid
|
|
|
427
430
|
minFirstColumn: rightRenderContext.firstColumnIndex,
|
|
428
431
|
maxLastColumn: rightRenderContext.lastColumnIndex,
|
|
429
432
|
availableSpace: 0,
|
|
430
|
-
ignoreAutoHeight: true,
|
|
431
433
|
rows: bottomPinnedRowsData,
|
|
432
|
-
rowIndexOffset: topPinnedRowsData.length + (mainRows ? mainRows.length : 0)
|
|
434
|
+
rowIndexOffset: topPinnedRowsData.length + (mainRows ? mainRows.length : 0),
|
|
435
|
+
position: 'right'
|
|
433
436
|
})
|
|
434
437
|
})]
|
|
435
438
|
}) : null]
|
|
@@ -125,7 +125,8 @@ process.env.NODE_ENV !== "production" ? GridDetailPanelToggleCell.propTypes = {
|
|
|
125
125
|
tabIndex: PropTypes.oneOf([-1, 0]).isRequired,
|
|
126
126
|
|
|
127
127
|
/**
|
|
128
|
-
* The cell value
|
|
128
|
+
* The cell value.
|
|
129
|
+
* If the column has `valueGetter`, use `params.row` to directly access the fields.
|
|
129
130
|
*/
|
|
130
131
|
value: PropTypes.any
|
|
131
132
|
} : void 0;
|
|
@@ -160,7 +160,8 @@ process.env.NODE_ENV !== "production" ? GridTreeDataGroupingCell.propTypes = {
|
|
|
160
160
|
tabIndex: PropTypes.oneOf([-1, 0]).isRequired,
|
|
161
161
|
|
|
162
162
|
/**
|
|
163
|
-
* The cell value
|
|
163
|
+
* The cell value.
|
|
164
|
+
* If the column has `valueGetter`, use `params.row` to directly access the fields.
|
|
164
165
|
*/
|
|
165
166
|
value: PropTypes.any
|
|
166
167
|
} : void 0;
|
|
@@ -3,6 +3,7 @@ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { useGridRegisterPipeProcessor } from '@mui/x-data-grid/internals';
|
|
5
5
|
import { GRID_DETAIL_PANEL_TOGGLE_FIELD, GRID_DETAIL_PANEL_TOGGLE_COL_DEF } from './gridDetailPanelToggleColDef';
|
|
6
|
+
import { gridDetailPanelExpandedRowIdsSelector } from './gridDetailPanelSelector';
|
|
6
7
|
export var useGridDetailPanelPreProcessors = function useGridDetailPanelPreProcessors(apiRef, props) {
|
|
7
8
|
var addToggleColumn = React.useCallback(function (columnsState) {
|
|
8
9
|
if (props.getDetailPanelContent == null) {
|
|
@@ -30,5 +31,19 @@ export var useGridDetailPanelPreProcessors = function useGridDetailPanelPreProce
|
|
|
30
31
|
});
|
|
31
32
|
return columnsState;
|
|
32
33
|
}, [apiRef, props.getDetailPanelContent]);
|
|
34
|
+
var addExpandedClassToRow = React.useCallback(function (classes, id) {
|
|
35
|
+
if (props.getDetailPanelContent == null) {
|
|
36
|
+
return classes;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
var expandedRowIds = gridDetailPanelExpandedRowIdsSelector(apiRef.current.state);
|
|
40
|
+
|
|
41
|
+
if (!expandedRowIds.includes(id)) {
|
|
42
|
+
return classes;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return [].concat(_toConsumableArray(classes), ['MuiDataGrid-row--detailPanelExpanded']);
|
|
46
|
+
}, [apiRef, props.getDetailPanelContent]);
|
|
33
47
|
useGridRegisterPipeProcessor(apiRef, 'hydrateColumns', addToggleColumn);
|
|
48
|
+
useGridRegisterPipeProcessor(apiRef, 'rowClassName', addExpandedClassToRow);
|
|
34
49
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { useGridSelector, useGridApiEventHandler, useGridApiOptionHandler, gridVisibleColumnDefinitionsSelector, gridRowsMetaSelector } from '@mui/x-data-grid';
|
|
2
|
+
import { useGridSelector, useGridApiEventHandler, useGridApiOptionHandler, gridVisibleColumnDefinitionsSelector, gridRowsMetaSelector, GridFeatureModeConstant } from '@mui/x-data-grid';
|
|
3
3
|
import { useGridVisibleRows } from '@mui/x-data-grid/internals';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -14,9 +14,9 @@ export var useGridInfiniteLoader = function useGridInfiniteLoader(apiRef, props)
|
|
|
14
14
|
var contentHeight = Math.max(rowsMeta.currentPageTotalHeight, 1);
|
|
15
15
|
var isInScrollBottomArea = React.useRef(false);
|
|
16
16
|
var handleRowsScrollEnd = React.useCallback(function (scrollPosition) {
|
|
17
|
-
var dimensions = apiRef.current.getRootDimensions();
|
|
17
|
+
var dimensions = apiRef.current.getRootDimensions(); // Prevent the infite loading working in combination with lazy loading
|
|
18
18
|
|
|
19
|
-
if (!dimensions) {
|
|
19
|
+
if (!dimensions || props.rowsLoadingMode !== GridFeatureModeConstant.client) {
|
|
20
20
|
return;
|
|
21
21
|
}
|
|
22
22
|
|
|
@@ -36,7 +36,7 @@ export var useGridInfiniteLoader = function useGridInfiniteLoader(apiRef, props)
|
|
|
36
36
|
apiRef.current.publishEvent('rowsScrollEnd', rowScrollEndParam);
|
|
37
37
|
isInScrollBottomArea.current = true;
|
|
38
38
|
}
|
|
39
|
-
}, [contentHeight, props.scrollEndThreshold, visibleColumns, apiRef, currentPage.rows.length]);
|
|
39
|
+
}, [contentHeight, props.scrollEndThreshold, props.rowsLoadingMode, visibleColumns, apiRef, currentPage.rows.length]);
|
|
40
40
|
var handleGridScroll = React.useCallback(function (_ref) {
|
|
41
41
|
var left = _ref.left,
|
|
42
42
|
top = _ref.top;
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { useGridApiEventHandler, GridFeatureModeConstant, useGridSelector, gridSortModelSelector, gridFilterModelSelector, useGridApiOptionHandler } from '@mui/x-data-grid';
|
|
4
|
+
import { useGridVisibleRows, getRenderableIndexes } from '@mui/x-data-grid/internals';
|
|
5
|
+
|
|
6
|
+
function findSkeletonRowsSection(visibleRows, range) {
|
|
7
|
+
var firstRowIndex = range.firstRowIndex,
|
|
8
|
+
lastRowIndex = range.lastRowIndex;
|
|
9
|
+
var visibleRowsSection = visibleRows.slice(range.firstRowIndex, range.lastRowIndex);
|
|
10
|
+
var startIndex = 0;
|
|
11
|
+
var endIndex = visibleRowsSection.length - 1;
|
|
12
|
+
var isSkeletonSectionFound = false;
|
|
13
|
+
|
|
14
|
+
while (!isSkeletonSectionFound && firstRowIndex < lastRowIndex) {
|
|
15
|
+
if (!visibleRowsSection[startIndex].model && !visibleRowsSection[endIndex].model) {
|
|
16
|
+
isSkeletonSectionFound = true;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (visibleRowsSection[startIndex].model) {
|
|
20
|
+
startIndex += 1;
|
|
21
|
+
firstRowIndex += 1;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (visibleRowsSection[endIndex].model) {
|
|
25
|
+
endIndex -= 1;
|
|
26
|
+
lastRowIndex -= 1;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return isSkeletonSectionFound ? {
|
|
31
|
+
firstRowIndex: firstRowIndex,
|
|
32
|
+
lastRowIndex: lastRowIndex
|
|
33
|
+
} : undefined;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function isLazyLoadingDisabled(_ref) {
|
|
37
|
+
var lazyLoadingFeatureFlag = _ref.lazyLoadingFeatureFlag,
|
|
38
|
+
rowsLoadingMode = _ref.rowsLoadingMode,
|
|
39
|
+
gridDimensions = _ref.gridDimensions;
|
|
40
|
+
|
|
41
|
+
if (!lazyLoadingFeatureFlag || !gridDimensions) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (rowsLoadingMode !== GridFeatureModeConstant.server) {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* @requires useGridRows (state)
|
|
53
|
+
* @requires useGridPagination (state)
|
|
54
|
+
* @requires useGridDimensions (method) - can be after
|
|
55
|
+
* @requires useGridScroll (method
|
|
56
|
+
*/
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
export var useGridLazyLoader = function useGridLazyLoader(apiRef, props) {
|
|
60
|
+
var _props$experimentalFe;
|
|
61
|
+
|
|
62
|
+
var visibleRows = useGridVisibleRows(apiRef, props);
|
|
63
|
+
var sortModel = useGridSelector(apiRef, gridSortModelSelector);
|
|
64
|
+
var filterModel = useGridSelector(apiRef, gridFilterModelSelector);
|
|
65
|
+
var renderedRowsIntervalCache = React.useRef({
|
|
66
|
+
firstRowToRender: 0,
|
|
67
|
+
lastRowToRender: 0
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
var _ref2 = (_props$experimentalFe = props.experimentalFeatures) != null ? _props$experimentalFe : {},
|
|
71
|
+
lazyLoading = _ref2.lazyLoading;
|
|
72
|
+
|
|
73
|
+
var getCurrentIntervalToRender = React.useCallback(function () {
|
|
74
|
+
var currentRenderContext = apiRef.current.unstable_getRenderContext();
|
|
75
|
+
|
|
76
|
+
var _getRenderableIndexes = getRenderableIndexes({
|
|
77
|
+
firstIndex: currentRenderContext.firstRowIndex,
|
|
78
|
+
lastIndex: currentRenderContext.lastRowIndex,
|
|
79
|
+
minFirstIndex: 0,
|
|
80
|
+
maxLastIndex: visibleRows.rows.length,
|
|
81
|
+
buffer: props.rowBuffer
|
|
82
|
+
}),
|
|
83
|
+
_getRenderableIndexes2 = _slicedToArray(_getRenderableIndexes, 2),
|
|
84
|
+
firstRowToRender = _getRenderableIndexes2[0],
|
|
85
|
+
lastRowToRender = _getRenderableIndexes2[1];
|
|
86
|
+
|
|
87
|
+
return {
|
|
88
|
+
firstRowToRender: firstRowToRender,
|
|
89
|
+
lastRowToRender: lastRowToRender
|
|
90
|
+
};
|
|
91
|
+
}, [apiRef, props.rowBuffer, visibleRows.rows.length]);
|
|
92
|
+
var handleRenderedRowsIntervalChange = React.useCallback(function (params) {
|
|
93
|
+
var dimensions = apiRef.current.getRootDimensions();
|
|
94
|
+
|
|
95
|
+
if (isLazyLoadingDisabled({
|
|
96
|
+
lazyLoadingFeatureFlag: lazyLoading,
|
|
97
|
+
rowsLoadingMode: props.rowsLoadingMode,
|
|
98
|
+
gridDimensions: dimensions
|
|
99
|
+
})) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
var fetchRowsParams = {
|
|
104
|
+
firstRowToRender: params.firstRowToRender,
|
|
105
|
+
lastRowToRender: params.lastRowToRender,
|
|
106
|
+
sortModel: sortModel,
|
|
107
|
+
filterModel: filterModel
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
if (renderedRowsIntervalCache.current.firstRowToRender === params.firstRowToRender && renderedRowsIntervalCache.current.lastRowToRender === params.lastRowToRender) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (sortModel.length === 0 && filterModel.items.length === 0) {
|
|
115
|
+
var skeletonRowsSection = findSkeletonRowsSection(visibleRows.rows, {
|
|
116
|
+
firstRowIndex: params.firstRowToRender,
|
|
117
|
+
lastRowIndex: params.lastRowToRender
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
if (!skeletonRowsSection) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
fetchRowsParams.firstRowToRender = skeletonRowsSection.firstRowIndex;
|
|
125
|
+
fetchRowsParams.lastRowToRender = skeletonRowsSection.lastRowIndex;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
renderedRowsIntervalCache.current = params;
|
|
129
|
+
apiRef.current.publishEvent('fetchRows', fetchRowsParams);
|
|
130
|
+
}, [apiRef, props.rowsLoadingMode, sortModel, filterModel, visibleRows.rows, lazyLoading]);
|
|
131
|
+
var handleGridSortModelChange = React.useCallback(function (newSortModel) {
|
|
132
|
+
var dimensions = apiRef.current.getRootDimensions();
|
|
133
|
+
|
|
134
|
+
if (isLazyLoadingDisabled({
|
|
135
|
+
lazyLoadingFeatureFlag: lazyLoading,
|
|
136
|
+
rowsLoadingMode: props.rowsLoadingMode,
|
|
137
|
+
gridDimensions: dimensions
|
|
138
|
+
})) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
apiRef.current.unstable_requestPipeProcessorsApplication('hydrateRows');
|
|
143
|
+
|
|
144
|
+
var _getCurrentIntervalTo = getCurrentIntervalToRender(),
|
|
145
|
+
firstRowToRender = _getCurrentIntervalTo.firstRowToRender,
|
|
146
|
+
lastRowToRender = _getCurrentIntervalTo.lastRowToRender;
|
|
147
|
+
|
|
148
|
+
var fetchRowsParams = {
|
|
149
|
+
firstRowToRender: firstRowToRender,
|
|
150
|
+
lastRowToRender: lastRowToRender,
|
|
151
|
+
sortModel: newSortModel,
|
|
152
|
+
filterModel: filterModel
|
|
153
|
+
};
|
|
154
|
+
apiRef.current.publishEvent('fetchRows', fetchRowsParams);
|
|
155
|
+
}, [apiRef, props.rowsLoadingMode, filterModel, lazyLoading, getCurrentIntervalToRender]);
|
|
156
|
+
var handleGridFilterModelChange = React.useCallback(function (newFilterModel) {
|
|
157
|
+
var dimensions = apiRef.current.getRootDimensions();
|
|
158
|
+
|
|
159
|
+
if (isLazyLoadingDisabled({
|
|
160
|
+
lazyLoadingFeatureFlag: lazyLoading,
|
|
161
|
+
rowsLoadingMode: props.rowsLoadingMode,
|
|
162
|
+
gridDimensions: dimensions
|
|
163
|
+
})) {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
apiRef.current.unstable_requestPipeProcessorsApplication('hydrateRows');
|
|
168
|
+
|
|
169
|
+
var _getCurrentIntervalTo2 = getCurrentIntervalToRender(),
|
|
170
|
+
firstRowToRender = _getCurrentIntervalTo2.firstRowToRender,
|
|
171
|
+
lastRowToRender = _getCurrentIntervalTo2.lastRowToRender;
|
|
172
|
+
|
|
173
|
+
var fetchRowsParams = {
|
|
174
|
+
firstRowToRender: firstRowToRender,
|
|
175
|
+
lastRowToRender: lastRowToRender,
|
|
176
|
+
sortModel: sortModel,
|
|
177
|
+
filterModel: newFilterModel
|
|
178
|
+
};
|
|
179
|
+
apiRef.current.publishEvent('fetchRows', fetchRowsParams);
|
|
180
|
+
}, [apiRef, props.rowsLoadingMode, sortModel, lazyLoading, getCurrentIntervalToRender]);
|
|
181
|
+
useGridApiEventHandler(apiRef, 'renderedRowsIntervalChange', handleRenderedRowsIntervalChange);
|
|
182
|
+
useGridApiEventHandler(apiRef, 'sortModelChange', handleGridSortModelChange);
|
|
183
|
+
useGridApiEventHandler(apiRef, 'filterModelChange', handleGridFilterModelChange);
|
|
184
|
+
useGridApiOptionHandler(apiRef, 'fetchRows', props.onFetchRows);
|
|
185
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { useGridRegisterPipeProcessor } from '@mui/x-data-grid/internals';
|
|
5
|
+
import { GridFeatureModeConstant } from '@mui/x-data-grid';
|
|
6
|
+
export var GRID_SKELETON_ROW_ROOT_ID = 'auto-generated-skeleton-row-root';
|
|
7
|
+
|
|
8
|
+
var getSkeletonRowId = function getSkeletonRowId(index) {
|
|
9
|
+
return "".concat(GRID_SKELETON_ROW_ROOT_ID, "-").concat(index);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export var useGridLazyLoaderPreProcessors = function useGridLazyLoaderPreProcessors(apiRef, props) {
|
|
13
|
+
var _props$experimentalFe;
|
|
14
|
+
|
|
15
|
+
var _ref = (_props$experimentalFe = props.experimentalFeatures) != null ? _props$experimentalFe : {},
|
|
16
|
+
lazyLoading = _ref.lazyLoading;
|
|
17
|
+
|
|
18
|
+
var addSkeletonRows = React.useCallback(function (groupingParams) {
|
|
19
|
+
if (!lazyLoading || props.rowsLoadingMode !== GridFeatureModeConstant.server || !props.rowCount || groupingParams.ids.length >= props.rowCount) {
|
|
20
|
+
return groupingParams;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
var newRowsIds = _toConsumableArray(groupingParams.ids);
|
|
24
|
+
|
|
25
|
+
for (var i = 0; i < props.rowCount - groupingParams.ids.length; i += 1) {
|
|
26
|
+
var skeletonId = getSkeletonRowId(i);
|
|
27
|
+
newRowsIds.push(skeletonId);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return _extends({}, groupingParams, {
|
|
31
|
+
ids: newRowsIds
|
|
32
|
+
});
|
|
33
|
+
}, [props.rowCount, props.rowsLoadingMode, lazyLoading]);
|
|
34
|
+
useGridRegisterPipeProcessor(apiRef, 'hydrateRows', addSkeletonRows);
|
|
35
|
+
};
|
|
@@ -29,7 +29,7 @@ export var filterRowTreeFromTreeData = function filterRowTreeFromTreeData(params
|
|
|
29
29
|
passingFilterItems = _isRowMatchingFilters.passingFilterItems,
|
|
30
30
|
passingQuickFilterValues = _isRowMatchingFilters.passingQuickFilterValues;
|
|
31
31
|
|
|
32
|
-
isMatchingFilters = passFilterLogic([passingFilterItems], [passingQuickFilterValues], params.filterModel);
|
|
32
|
+
isMatchingFilters = passFilterLogic([passingFilterItems], [passingQuickFilterValues], params.filterModel, params.apiRef);
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
var filteredDescendantCount = 0;
|
|
@@ -115,7 +115,8 @@ export var useGridTreeDataPreProcessors = function useGridTreeDataPreProcessors(
|
|
|
115
115
|
rowTree: rowTree,
|
|
116
116
|
isRowMatchingFilters: params.isRowMatchingFilters,
|
|
117
117
|
disableChildrenFiltering: props.disableChildrenFiltering,
|
|
118
|
-
filterModel: params.filterModel
|
|
118
|
+
filterModel: params.filterModel,
|
|
119
|
+
apiRef: apiRef
|
|
119
120
|
});
|
|
120
121
|
}, [apiRef, props.disableChildrenFiltering]);
|
|
121
122
|
var sortRows = React.useCallback(function (params) {
|
package/legacy/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/legacy/models/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ponyfillGlobal } from '@mui/utils';
|
|
2
2
|
export var getReleaseInfo = function getReleaseInfo() {
|
|
3
|
-
var releaseInfo = "
|
|
3
|
+
var releaseInfo = "MTY2MjY3NDQwMDAwMA==";
|
|
4
4
|
|
|
5
5
|
if (process.env.NODE_ENV !== 'production') {
|
|
6
6
|
// A simple hack to set the value in the test environment (has no build step).
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { GridRowTreeNodeConfig, GridEventListener, GridCallbackDetails, GridRowParams, GridRowId, GridValidRowModel } from '@mui/x-data-grid';
|
|
2
|
+
import { GridRowTreeNodeConfig, GridEventListener, GridCallbackDetails, GridRowParams, GridRowId, GridValidRowModel, GridFeatureMode } from '@mui/x-data-grid';
|
|
3
3
|
import { GridExperimentalFeatures, DataGridPropsWithoutDefaultValue, DataGridPropsWithDefaultValues, DataGridPropsWithComplexDefaultValueAfterProcessing, DataGridPropsWithComplexDefaultValueBeforeProcessing } from '@mui/x-data-grid/internals';
|
|
4
4
|
import type { GridPinnedColumns } from '../hooks/features/columnPinning';
|
|
5
5
|
import type { GridPinnedRowsProp } from '../hooks/features/rowPinning';
|
|
@@ -7,6 +7,13 @@ import { GridApiPro } from './gridApiPro';
|
|
|
7
7
|
import { GridGroupingColDefOverride, GridGroupingColDefOverrideParams } from './gridGroupingColDefOverride';
|
|
8
8
|
import { GridInitialStatePro } from './gridStatePro';
|
|
9
9
|
export interface GridExperimentalProFeatures extends GridExperimentalFeatures {
|
|
10
|
+
/**
|
|
11
|
+
* Enables the data grid to lazy load rows while scrolling.
|
|
12
|
+
*/
|
|
13
|
+
lazyLoading: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Enables the the ability for rows to be pinned in data grid.
|
|
16
|
+
*/
|
|
10
17
|
rowPinning: boolean;
|
|
11
18
|
}
|
|
12
19
|
/**
|
|
@@ -76,6 +83,13 @@ export interface DataGridProPropsWithDefaultValue extends DataGridPropsWithDefau
|
|
|
76
83
|
* @default false
|
|
77
84
|
*/
|
|
78
85
|
rowReordering: boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Loading rows can be processed on the server or client-side.
|
|
88
|
+
* Set it to 'client' if you would like enable infnite loading.
|
|
89
|
+
* Set it to 'server' if you would like to enable lazy loading.
|
|
90
|
+
* * @default "client"
|
|
91
|
+
*/
|
|
92
|
+
rowsLoadingMode: GridFeatureMode;
|
|
79
93
|
}
|
|
80
94
|
export interface DataGridProPropsWithoutDefaultValue<R extends GridValidRowModel = any> extends Omit<DataGridPropsWithoutDefaultValue<R>, 'initialState'> {
|
|
81
95
|
/**
|
|
@@ -160,6 +174,13 @@ export interface DataGridProPropsWithoutDefaultValue<R extends GridValidRowModel
|
|
|
160
174
|
* @param {GridCallbackDetails} details Additional details for this callback.
|
|
161
175
|
*/
|
|
162
176
|
onRowOrderChange?: GridEventListener<'rowOrderChange'>;
|
|
177
|
+
/**
|
|
178
|
+
* Callback fired when rowCount is set and the next batch of virtualized rows is rendered.
|
|
179
|
+
* @param {GridFetchRowsParams} params With all properties from [[GridFetchRowsParams]].
|
|
180
|
+
* @param {MuiEvent<{}>} event The event object.
|
|
181
|
+
* @param {GridCallbackDetails} details Additional details for this callback.
|
|
182
|
+
*/
|
|
183
|
+
onFetchRows?: GridEventListener<'fetchRows'>;
|
|
163
184
|
/**
|
|
164
185
|
* Rows data to pin on top or bottom.
|
|
165
186
|
*/
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { GridFilterModel, GridSortModel } from '@mui/x-data-grid/models';
|
|
2
|
+
/**
|
|
3
|
+
* Object passed as parameter to the [[onFetchRows]] option.
|
|
4
|
+
*/
|
|
5
|
+
export interface GridFetchRowsParams {
|
|
6
|
+
/**
|
|
7
|
+
* The index of the first row to render.
|
|
8
|
+
*/
|
|
9
|
+
firstRowToRender: number;
|
|
10
|
+
/**
|
|
11
|
+
* The index of the last row to render.
|
|
12
|
+
*/
|
|
13
|
+
lastRowToRender: number;
|
|
14
|
+
/**
|
|
15
|
+
* The sort model used to sort the grid.
|
|
16
|
+
*/
|
|
17
|
+
sortModel: GridSortModel;
|
|
18
|
+
/**
|
|
19
|
+
* The filter model.
|
|
20
|
+
*/
|
|
21
|
+
filterModel: GridFilterModel;
|
|
22
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/models/index.d.ts
CHANGED
package/models/index.js
CHANGED