@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.
Files changed (74) hide show
  1. package/CHANGELOG.md +138 -1
  2. package/DataGridPro/DataGridPro.js +17 -0
  3. package/DataGridPro/useDataGridProComponent.js +4 -0
  4. package/DataGridPro/useDataGridProProps.js +2 -1
  5. package/components/DataGridProVirtualScroller.js +18 -15
  6. package/components/GridDetailPanelToggleCell.js +2 -1
  7. package/components/GridTreeDataGroupingCell.js +2 -1
  8. package/hooks/features/detailPanel/useGridDetailPanelPreProcessors.js +15 -0
  9. package/hooks/features/infiniteLoader/useGridInfiniteLoader.d.ts +1 -1
  10. package/hooks/features/infiniteLoader/useGridInfiniteLoader.js +4 -4
  11. package/hooks/features/lazyLoader/useGridLazyLoader.d.ts +10 -0
  12. package/hooks/features/lazyLoader/useGridLazyLoader.js +178 -0
  13. package/hooks/features/lazyLoader/useGridLazyLoaderPreProcessors.d.ts +5 -0
  14. package/hooks/features/lazyLoader/useGridLazyLoaderPreProcessors.js +32 -0
  15. package/hooks/features/treeData/gridTreeDataUtils.d.ts +3 -1
  16. package/hooks/features/treeData/gridTreeDataUtils.js +1 -1
  17. package/hooks/features/treeData/useGridTreeDataPreProcessors.js +2 -1
  18. package/index.js +1 -1
  19. package/legacy/DataGridPro/DataGridPro.js +17 -0
  20. package/legacy/DataGridPro/useDataGridProComponent.js +4 -0
  21. package/legacy/DataGridPro/useDataGridProProps.js +2 -1
  22. package/legacy/components/DataGridProVirtualScroller.js +18 -15
  23. package/legacy/components/GridDetailPanelToggleCell.js +2 -1
  24. package/legacy/components/GridTreeDataGroupingCell.js +2 -1
  25. package/legacy/hooks/features/detailPanel/useGridDetailPanelPreProcessors.js +15 -0
  26. package/legacy/hooks/features/infiniteLoader/useGridInfiniteLoader.js +4 -4
  27. package/legacy/hooks/features/lazyLoader/useGridLazyLoader.js +185 -0
  28. package/legacy/hooks/features/lazyLoader/useGridLazyLoaderPreProcessors.js +35 -0
  29. package/legacy/hooks/features/treeData/gridTreeDataUtils.js +1 -1
  30. package/legacy/hooks/features/treeData/useGridTreeDataPreProcessors.js +2 -1
  31. package/legacy/index.js +1 -1
  32. package/legacy/models/gridFetchRowsParams.js +1 -0
  33. package/legacy/models/index.js +2 -1
  34. package/legacy/utils/releaseInfo.js +1 -1
  35. package/models/dataGridProProps.d.ts +22 -1
  36. package/models/gridFetchRowsParams.d.ts +22 -0
  37. package/models/gridFetchRowsParams.js +1 -0
  38. package/models/index.d.ts +1 -0
  39. package/models/index.js +2 -1
  40. package/modern/DataGridPro/DataGridPro.js +17 -0
  41. package/modern/DataGridPro/useDataGridProComponent.js +4 -0
  42. package/modern/DataGridPro/useDataGridProProps.js +2 -1
  43. package/modern/components/DataGridProVirtualScroller.js +18 -15
  44. package/modern/components/GridDetailPanelToggleCell.js +2 -1
  45. package/modern/components/GridTreeDataGroupingCell.js +2 -1
  46. package/modern/hooks/features/detailPanel/useGridDetailPanelPreProcessors.js +15 -0
  47. package/modern/hooks/features/infiniteLoader/useGridInfiniteLoader.js +4 -4
  48. package/modern/hooks/features/lazyLoader/useGridLazyLoader.js +176 -0
  49. package/modern/hooks/features/lazyLoader/useGridLazyLoaderPreProcessors.js +30 -0
  50. package/modern/hooks/features/treeData/gridTreeDataUtils.js +1 -1
  51. package/modern/hooks/features/treeData/useGridTreeDataPreProcessors.js +2 -1
  52. package/modern/index.js +1 -1
  53. package/modern/models/gridFetchRowsParams.js +1 -0
  54. package/modern/models/index.js +2 -1
  55. package/modern/utils/releaseInfo.js +1 -1
  56. package/node/DataGridPro/DataGridPro.js +17 -0
  57. package/node/DataGridPro/useDataGridProComponent.js +6 -0
  58. package/node/DataGridPro/useDataGridProProps.js +1 -0
  59. package/node/components/DataGridProVirtualScroller.js +18 -15
  60. package/node/components/GridDetailPanelToggleCell.js +2 -1
  61. package/node/components/GridTreeDataGroupingCell.js +2 -1
  62. package/node/hooks/features/detailPanel/useGridDetailPanelPreProcessors.js +16 -0
  63. package/node/hooks/features/infiniteLoader/useGridInfiniteLoader.js +3 -3
  64. package/node/hooks/features/lazyLoader/useGridLazyLoader.js +193 -0
  65. package/node/hooks/features/lazyLoader/useGridLazyLoaderPreProcessors.js +52 -0
  66. package/node/hooks/features/treeData/gridTreeDataUtils.js +1 -1
  67. package/node/hooks/features/treeData/useGridTreeDataPreProcessors.js +2 -1
  68. package/node/index.js +1 -1
  69. package/node/models/gridFetchRowsParams.js +5 -0
  70. package/node/models/index.js +13 -0
  71. package/node/utils/releaseInfo.js +1 -1
  72. package/package.json +3 -3
  73. package/typeOverloads/modules.d.ts +7 -1
  74. 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
@@ -1,4 +1,4 @@
1
- /** @license MUI v5.16.0
1
+ /** @license MUI v5.17.2
2
2
  *
3
3
  * This source code is licensed under the MIT license found in the
4
4
  * LICENSE file in the root directory of this source tree.
@@ -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
- ignoreAutoHeight: true,
333
- rows: topPinnedRowsData
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
- ignoreAutoHeight: true,
368
- rowIndexOffset: topPinnedRowsData.length
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
- ignoreAutoHeight: true,
385
- rowIndexOffset: topPinnedRowsData.length
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, but if the column has valueGetter, use getValue.
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, but if the column has valueGetter, use getValue.
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
@@ -1,4 +1,4 @@
1
- /** @license MUI v5.16.0
1
+ /** @license MUI v5.17.2
2
2
  *
3
3
  * This source code is licensed under the MIT license found in the
4
4
  * LICENSE file in the root directory of this source tree.
@@ -0,0 +1 @@
1
+ export {};
@@ -1,3 +1,4 @@
1
1
  export * from './gridGroupingColDefOverride';
2
2
  export * from './gridRowScrollEndParams';
3
- export * from './gridRowOrderChangeParams';
3
+ export * from './gridRowOrderChangeParams';
4
+ export * from './gridFetchRowsParams';
@@ -1,6 +1,6 @@
1
1
  import { ponyfillGlobal } from '@mui/utils';
2
2
  export var getReleaseInfo = function getReleaseInfo() {
3
- var releaseInfo = "MTY2MTM3ODQwMDAwMA==";
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
@@ -1,3 +1,4 @@
1
1
  export * from './gridGroupingColDefOverride';
2
2
  export * from './gridRowScrollEndParams';
3
3
  export * from './gridRowOrderChangeParams';
4
+ export * from './gridFetchRowsParams';
package/models/index.js CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from './gridGroupingColDefOverride';
2
2
  export * from './gridRowScrollEndParams';
3
- export * from './gridRowOrderChangeParams';
3
+ export * from './gridRowOrderChangeParams';
4
+ export * from './gridFetchRowsParams';