@mui/x-data-grid 7.7.1 → 7.8.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.
Files changed (119) hide show
  1. package/CHANGELOG.md +100 -1
  2. package/DataGrid/useDataGridComponent.d.ts +0 -1
  3. package/components/GridFooter.d.ts +1 -1
  4. package/components/GridLoadingOverlay.d.ts +1 -1
  5. package/components/GridNoResultsOverlay.d.ts +1 -1
  6. package/components/GridNoRowsOverlay.d.ts +1 -1
  7. package/components/GridRowCount.d.ts +1 -1
  8. package/components/GridSelectedRowCount.d.ts +1 -1
  9. package/components/cell/GridActionsCellItem.d.ts +3 -3
  10. package/components/columnHeaders/GridColumnHeaderItem.js +3 -3
  11. package/components/columnHeaders/GridColumnHeaderSortIcon.d.ts +1 -0
  12. package/components/columnHeaders/GridColumnHeaderSortIcon.js +11 -6
  13. package/components/containers/GridFooterContainer.d.ts +1 -1
  14. package/components/containers/GridOverlay.d.ts +1 -1
  15. package/components/containers/GridRootStyles.d.ts +0 -1
  16. package/components/containers/GridRootStyles.js +8 -0
  17. package/components/containers/GridToolbarContainer.d.ts +1 -1
  18. package/components/panel/GridPanel.d.ts +1 -1
  19. package/components/toolbar/GridToolbarExportContainer.d.ts +1 -1
  20. package/components/virtualization/GridMainContainer.d.ts +1 -1
  21. package/components/virtualization/GridVirtualScrollerContent.d.ts +1 -1
  22. package/components/virtualization/GridVirtualScrollerRenderZone.d.ts +1 -1
  23. package/constants/defaultGridSlotsComponents.js +2 -1
  24. package/constants/gridClasses.d.ts +5 -0
  25. package/constants/gridClasses.js +1 -1
  26. package/hooks/core/pipeProcessing/useGridRegisterPipeApplier.d.ts +2 -1
  27. package/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.d.ts +2 -2
  28. package/hooks/core/strategyProcessing/useGridRegisterStrategyProcessor.d.ts +2 -2
  29. package/hooks/core/useGridInitialization.d.ts +1 -1
  30. package/hooks/core/useGridLocaleText.d.ts +1 -1
  31. package/hooks/core/useGridLoggerFactory.d.ts +1 -1
  32. package/hooks/features/clipboard/useGridClipboard.d.ts +1 -1
  33. package/hooks/features/columnGrouping/useGridColumnGrouping.d.ts +1 -1
  34. package/hooks/features/columnResize/useGridColumnResize.d.ts +1 -1
  35. package/hooks/features/density/useGridDensity.d.ts +1 -1
  36. package/hooks/features/dimensions/useGridDimensions.js +15 -15
  37. package/hooks/features/editing/useGridCellEditing.d.ts +1 -1
  38. package/hooks/features/editing/useGridEditing.d.ts +1 -1
  39. package/hooks/features/editing/useGridRowEditing.d.ts +1 -1
  40. package/hooks/features/export/serializers/csvSerializer.d.ts +0 -1
  41. package/hooks/features/export/useGridCsvExport.d.ts +1 -1
  42. package/hooks/features/export/useGridPrintExport.d.ts +1 -1
  43. package/hooks/features/export/useGridPrintExport.js +9 -8
  44. package/hooks/features/filter/gridFilterUtils.d.ts +1 -1
  45. package/hooks/features/filter/useGridFilter.d.ts +1 -1
  46. package/hooks/features/focus/useGridFocus.d.ts +1 -1
  47. package/hooks/features/headerFiltering/useGridHeaderFiltering.d.ts +1 -1
  48. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.d.ts +1 -1
  49. package/hooks/features/pagination/gridPaginationUtils.d.ts +1 -1
  50. package/hooks/features/pagination/index.d.ts +1 -1
  51. package/hooks/features/pagination/useGridPaginationMeta.d.ts +1 -1
  52. package/hooks/features/pagination/useGridPaginationModel.d.ts +2 -2
  53. package/hooks/features/pagination/useGridRowCount.d.ts +1 -1
  54. package/hooks/features/preferencesPanel/useGridPreferencesPanel.d.ts +1 -1
  55. package/hooks/features/rowSelection/useGridRowSelection.d.ts +1 -1
  56. package/hooks/features/rows/gridRowsInterfaces.d.ts +10 -2
  57. package/hooks/features/rows/gridRowsSelector.d.ts +2 -1
  58. package/hooks/features/rows/gridRowsSelector.js +1 -0
  59. package/hooks/features/rows/gridRowsUtils.d.ts +8 -6
  60. package/hooks/features/rows/gridRowsUtils.js +30 -6
  61. package/hooks/features/rows/useGridRows.d.ts +2 -2
  62. package/hooks/features/rows/useGridRows.js +39 -21
  63. package/hooks/features/rows/useGridRowsMeta.d.ts +1 -1
  64. package/hooks/features/scroll/useGridScroll.d.ts +1 -1
  65. package/hooks/features/sorting/useGridSorting.d.ts +1 -1
  66. package/hooks/utils/useGridApiEventHandler.d.ts +2 -2
  67. package/hooks/utils/useGridApiRef.d.ts +1 -1
  68. package/hooks/utils/useGridInitializeState.d.ts +1 -1
  69. package/hooks/utils/useGridRootProps.d.ts +1 -1
  70. package/hooks/utils/useGridSelector.d.ts +1 -1
  71. package/hooks/utils/useGridVisibleRows.d.ts +2 -2
  72. package/index.js +1 -1
  73. package/internals/index.d.ts +2 -0
  74. package/internals/index.js +1 -0
  75. package/internals/utils/propValidation.js +1 -1
  76. package/models/api/gridApiCommon.d.ts +2 -2
  77. package/models/api/gridInfiniteLoaderApi.d.ts +0 -1
  78. package/models/api/gridRowApi.d.ts +14 -0
  79. package/models/gridColumnGrouping.d.ts +0 -1
  80. package/models/gridDataSource.d.ts +87 -0
  81. package/models/gridDataSource.js +1 -0
  82. package/models/gridRows.d.ts +10 -0
  83. package/models/gridSlotsComponent.d.ts +5 -0
  84. package/models/gridSlotsComponentsProps.d.ts +5 -1
  85. package/models/props/DataGridProps.d.ts +2 -0
  86. package/modern/components/columnHeaders/GridColumnHeaderItem.js +3 -3
  87. package/modern/components/columnHeaders/GridColumnHeaderSortIcon.js +11 -6
  88. package/modern/components/containers/GridRootStyles.js +8 -0
  89. package/modern/constants/defaultGridSlotsComponents.js +2 -1
  90. package/modern/constants/gridClasses.js +1 -1
  91. package/modern/hooks/features/dimensions/useGridDimensions.js +15 -15
  92. package/modern/hooks/features/export/useGridPrintExport.js +9 -8
  93. package/modern/hooks/features/rows/gridRowsSelector.js +1 -0
  94. package/modern/hooks/features/rows/gridRowsUtils.js +30 -6
  95. package/modern/hooks/features/rows/useGridRows.js +39 -21
  96. package/modern/index.js +1 -1
  97. package/modern/internals/index.js +1 -0
  98. package/modern/internals/utils/propValidation.js +1 -1
  99. package/modern/models/gridDataSource.js +1 -0
  100. package/node/components/columnHeaders/GridColumnHeaderItem.js +3 -3
  101. package/node/components/columnHeaders/GridColumnHeaderSortIcon.js +11 -6
  102. package/node/components/containers/GridRootStyles.js +8 -0
  103. package/node/constants/defaultGridSlotsComponents.js +1 -0
  104. package/node/constants/gridClasses.js +1 -1
  105. package/node/hooks/features/dimensions/useGridDimensions.js +15 -15
  106. package/node/hooks/features/export/useGridPrintExport.js +9 -8
  107. package/node/hooks/features/rows/gridRowsSelector.js +2 -1
  108. package/node/hooks/features/rows/gridRowsUtils.js +31 -6
  109. package/node/hooks/features/rows/useGridRows.js +37 -19
  110. package/node/index.js +1 -1
  111. package/node/internals/index.js +7 -0
  112. package/node/internals/utils/propValidation.js +1 -1
  113. package/node/models/gridDataSource.js +5 -0
  114. package/package.json +1 -1
  115. package/utils/cleanupTracking/TimerBasedCleanupTracking.d.ts +0 -1
  116. package/utils/domUtils.d.ts +0 -1
  117. package/utils/getPublicApiRef.d.ts +1 -2
  118. package/utils/keyboardUtils.d.ts +1 -1
  119. package/utils/warning.d.ts +1 -1
@@ -2,17 +2,18 @@ import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
3
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
4
4
  import { useGridLogger } from '../../utils/useGridLogger';
5
- import { gridRowCountSelector, gridRowsLookupSelector, gridRowTreeSelector, gridRowGroupingNameSelector, gridRowTreeDepthsSelector, gridDataRowIdsSelector, gridRowsDataRowIdToIdLookupSelector, gridRowMaximumTreeDepthSelector } from './gridRowsSelector';
5
+ import { gridRowCountSelector, gridRowsLookupSelector, gridRowTreeSelector, gridRowGroupingNameSelector, gridRowTreeDepthsSelector, gridDataRowIdsSelector, gridRowsDataRowIdToIdLookupSelector, gridRowMaximumTreeDepthSelector, gridRowGroupsToFetchSelector } from './gridRowsSelector';
6
6
  import { useTimeout } from '../../utils/useTimeout';
7
7
  import { GridSignature, useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
8
8
  import { useGridVisibleRows } from '../../utils/useGridVisibleRows';
9
9
  import { gridSortedRowIdsSelector } from '../sorting/gridSortingSelector';
10
10
  import { gridFilteredRowsLookupSelector } from '../filter/gridFilterSelector';
11
- import { getTreeNodeDescendants, createRowsInternalCache, getRowsStateFromCache, isAutoGeneratedRow, GRID_ROOT_GROUP_ID, GRID_ID_AUTOGENERATED, updateCacheWithNewRows, getTopLevelRowCount, getRowIdFromRowModel } from './gridRowsUtils';
11
+ import { getTreeNodeDescendants, createRowsInternalCache, getRowsStateFromCache, isAutoGeneratedRow, GRID_ROOT_GROUP_ID, GRID_ID_AUTOGENERATED, updateCacheWithNewRows, getTopLevelRowCount, getRowIdFromRowModel, computeRowsUpdates } from './gridRowsUtils';
12
12
  import { useGridRegisterPipeApplier } from '../../core/pipeProcessing';
13
13
  export const rowsStateInitializer = (state, props, apiRef) => {
14
+ const isDataSourceAvailable = !!props.unstable_dataSource;
14
15
  apiRef.current.caches.rows = createRowsInternalCache({
15
- rows: props.rows,
16
+ rows: isDataSourceAvailable ? [] : props.rows,
16
17
  getRowId: props.getRowId,
17
18
  loading: props.loading,
18
19
  rowCount: props.rowCount
@@ -21,7 +22,7 @@ export const rowsStateInitializer = (state, props, apiRef) => {
21
22
  rows: getRowsStateFromCache({
22
23
  apiRef,
23
24
  rowCountProp: props.rowCount,
24
- loadingProp: props.loading,
25
+ loadingProp: isDataSourceAvailable ? true : props.loading,
25
26
  previousTree: null,
26
27
  previousTreeDepths: null
27
28
  })
@@ -82,7 +83,8 @@ export const useGridRows = (apiRef, props) => {
82
83
  rowCountProp: props.rowCount,
83
84
  loadingProp: props.loading,
84
85
  previousTree: gridRowTreeSelector(apiRef),
85
- previousTreeDepths: gridRowTreeDepthsSelector(apiRef)
86
+ previousTreeDepths: gridRowTreeDepthsSelector(apiRef),
87
+ previousGroupsToFetch: gridRowGroupsToFetchSelector(apiRef)
86
88
  })
87
89
  }));
88
90
  apiRef.current.publishEvent('rowsSet');
@@ -124,21 +126,7 @@ export const useGridRows = (apiRef, props) => {
124
126
  if (props.signature === GridSignature.DataGrid && updates.length > 1) {
125
127
  throw new Error(['MUI X: You cannot update several rows at once in `apiRef.current.updateRows` on the DataGrid.', 'You need to upgrade to DataGridPro or DataGridPremium component to unlock this feature.'].join('\n'));
126
128
  }
127
- const nonPinnedRowsUpdates = [];
128
- updates.forEach(update => {
129
- const id = getRowIdFromRowModel(update, props.getRowId, 'A row was provided without id when calling updateRows():');
130
- const rowNode = apiRef.current.getRowNode(id);
131
- if (rowNode?.type === 'pinnedRow') {
132
- // @ts-ignore because otherwise `release:build` doesn't work
133
- const pinnedRowsCache = apiRef.current.caches.pinnedRows;
134
- const prevModel = pinnedRowsCache.idLookup[id];
135
- if (prevModel) {
136
- pinnedRowsCache.idLookup[id] = _extends({}, prevModel, update);
137
- }
138
- } else {
139
- nonPinnedRowsUpdates.push(update);
140
- }
141
- });
129
+ const nonPinnedRowsUpdates = computeRowsUpdates(apiRef, updates, props.getRowId);
142
130
  const cache = updateCacheWithNewRows({
143
131
  updates: nonPinnedRowsUpdates,
144
132
  getRowId: props.getRowId,
@@ -149,6 +137,31 @@ export const useGridRows = (apiRef, props) => {
149
137
  throttle: true
150
138
  });
151
139
  }, [props.signature, props.getRowId, throttledRowsChange, apiRef]);
140
+ const updateServerRows = React.useCallback((updates, groupKeys) => {
141
+ const nonPinnedRowsUpdates = computeRowsUpdates(apiRef, updates, props.getRowId);
142
+ const cache = updateCacheWithNewRows({
143
+ updates: nonPinnedRowsUpdates,
144
+ getRowId: props.getRowId,
145
+ previousCache: apiRef.current.caches.rows,
146
+ groupKeys: groupKeys ?? []
147
+ });
148
+ throttledRowsChange({
149
+ cache,
150
+ throttle: false
151
+ });
152
+ }, [props.getRowId, throttledRowsChange, apiRef]);
153
+ const setLoading = React.useCallback(loading => {
154
+ if (loading === props.loading) {
155
+ return;
156
+ }
157
+ logger.debug(`Setting loading to ${loading}`);
158
+ apiRef.current.setState(state => _extends({}, state, {
159
+ rows: _extends({}, state.rows, {
160
+ loading
161
+ })
162
+ }));
163
+ apiRef.current.caches.rows.loadingPropBeforePartialUpdates = loading;
164
+ }, [props.loading, apiRef, logger]);
152
165
  const getRowModels = React.useCallback(() => {
153
166
  const dataRows = gridDataRowIdsSelector(apiRef);
154
167
  const idRowsLookup = gridRowsLookupSelector(apiRef);
@@ -303,6 +316,7 @@ export const useGridRows = (apiRef, props) => {
303
316
  }, [apiRef, props.signature, props.getRowId]);
304
317
  const rowApi = {
305
318
  getRow,
319
+ setLoading,
306
320
  getRowId,
307
321
  getRowModels,
308
322
  getRowsCount,
@@ -318,6 +332,9 @@ export const useGridRows = (apiRef, props) => {
318
332
  setRowChildrenExpansion,
319
333
  getRowGroupChildren
320
334
  };
335
+ const rowProPrivateApi = {
336
+ updateServerRows
337
+ };
321
338
 
322
339
  /**
323
340
  * EVENTS
@@ -392,6 +409,7 @@ export const useGridRows = (apiRef, props) => {
392
409
  useGridRegisterPipeApplier(apiRef, 'hydrateRows', applyHydrateRowsProcessor);
393
410
  useGridApiMethod(apiRef, rowApi, 'public');
394
411
  useGridApiMethod(apiRef, rowProApi, props.signature === GridSignature.DataGrid ? 'private' : 'public');
412
+ useGridApiMethod(apiRef, rowProPrivateApi, 'private');
395
413
 
396
414
  // The effect do not track any value defined synchronously during the 1st render by hooks called after `useGridRows`
397
415
  // As a consequence, the state generated by the 1st run of this useEffect will always be equal to the initialization one
@@ -436,7 +454,7 @@ export const useGridRows = (apiRef, props) => {
436
454
  return;
437
455
  }
438
456
  }
439
- logger.debug(`Updating all rows, new length ${props.rows.length}`);
457
+ logger.debug(`Updating all rows, new length ${props.rows?.length}`);
440
458
  throttledRowsChange({
441
459
  cache: createRowsInternalCache({
442
460
  rows: props.rows,
package/modern/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid v7.7.1
2
+ * @mui/x-data-grid v7.8.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -55,6 +55,7 @@ export { useGridInitializeState } from '../hooks/utils/useGridInitializeState';
55
55
  export { getColumnsToExport, defaultGetRowsToExport } from '../hooks/features/export/utils';
56
56
  export * from '../utils/createControllablePromise';
57
57
  export { createSelector, createSelectorMemoized } from '../utils/createSelector';
58
+ export { gridRowGroupsToFetchSelector } from '../hooks/features/rows/gridRowsSelector';
58
59
  export { findParentElementFromClassName, getActiveElement, isEventTargetInPortal } from '../utils/domUtils';
59
60
  export { isNavigationKey, isPasteShortcut } from '../utils/keyboardUtils';
60
61
  export * from '../utils/utils';
@@ -1,6 +1,6 @@
1
1
  import { isNumber } from '../../utils/utils';
2
2
  import { GridSignature } from '../../hooks/utils/useGridApiEventHandler';
3
- export const propValidatorsDataGrid = [props => props.autoPageSize && props.autoHeight && ['MUI X: `<DataGrid autoPageSize={true} autoHeight={true} />` are not valid props.', 'You cannot use both the `autoPageSize` and `autoHeight` props at the same time because `autoHeight` scales the height of the Data Grid according to the `pageSize`.', '', 'Please remove one of these two props.'].join('\n') || undefined, props => props.paginationMode === 'client' && props.paginationMeta != null && ['MUI X: Usage of the `paginationMeta` prop with client-side pagination (`paginationMode="client"`) has no effect.', '`paginationMeta` is only meant to be used with `paginationMode="server"`.'].join('\n') || undefined, props => props.signature === GridSignature.DataGrid && props.paginationMode === 'client' && isNumber(props.rowCount) && ['MUI X: Usage of the `rowCount` prop with client side pagination (`paginationMode="client"`) has no effect.', '`rowCount` is only meant to be used with `paginationMode="server"`.'].join('\n') || undefined, props => props.paginationMode === 'server' && props.rowCount == null && ["MUI X: The `rowCount` prop must be passed using `paginationMode='server'`", 'For more detail, see http://mui.com/components/data-grid/pagination/#index-based-pagination'].join('\n') || undefined];
3
+ export const propValidatorsDataGrid = [props => props.autoPageSize && props.autoHeight && ['MUI X: `<DataGrid autoPageSize={true} autoHeight={true} />` are not valid props.', 'You cannot use both the `autoPageSize` and `autoHeight` props at the same time because `autoHeight` scales the height of the Data Grid according to the `pageSize`.', '', 'Please remove one of these two props.'].join('\n') || undefined, props => props.paginationMode === 'client' && props.paginationMeta != null && ['MUI X: Usage of the `paginationMeta` prop with client-side pagination (`paginationMode="client"`) has no effect.', '`paginationMeta` is only meant to be used with `paginationMode="server"`.'].join('\n') || undefined, props => props.signature === GridSignature.DataGrid && props.paginationMode === 'client' && isNumber(props.rowCount) && ['MUI X: Usage of the `rowCount` prop with client side pagination (`paginationMode="client"`) has no effect.', '`rowCount` is only meant to be used with `paginationMode="server"`.'].join('\n') || undefined, props => props.paginationMode === 'server' && props.rowCount == null && !props.unstable_dataSource && ["MUI X: The `rowCount` prop must be passed using `paginationMode='server'`", 'For more detail, see http://mui.com/components/data-grid/pagination/#index-based-pagination'].join('\n') || undefined];
4
4
  const warnedOnceCache = new Set();
5
5
  function warnOnce(message) {
6
6
  if (!warnedOnceCache.has(message)) {
@@ -0,0 +1 @@
1
+ export {};
@@ -12,7 +12,6 @@ var _clsx = _interopRequireDefault(require("clsx"));
12
12
  var _utils = require("@mui/utils");
13
13
  var _fastMemo = require("../../utils/fastMemo");
14
14
  var _useGridPrivateApiContext = require("../../hooks/utils/useGridPrivateApiContext");
15
- var _GridColumnHeaderSortIcon = require("./GridColumnHeaderSortIcon");
16
15
  var _ColumnHeaderMenuIcon = require("./ColumnHeaderMenuIcon");
17
16
  var _GridColumnHeaderMenu = require("../menu/columnMenu/GridColumnHeaderMenu");
18
17
  var _gridClasses = require("../../constants/gridClasses");
@@ -151,12 +150,13 @@ function GridColumnHeaderItem(props) {
151
150
  children: [!rootProps.disableColumnFilter && /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.columnHeaderFilterIconButton, (0, _extends2.default)({
152
151
  field: colDef.field,
153
152
  counter: filterItemsCounter
154
- }, rootProps.slotProps?.columnHeaderFilterIconButton)), showSortIcon && /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridColumnHeaderSortIcon.GridColumnHeaderSortIcon, {
153
+ }, rootProps.slotProps?.columnHeaderFilterIconButton)), showSortIcon && /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.columnHeaderSortIcon, (0, _extends2.default)({
154
+ field: colDef.field,
155
155
  direction: sortDirection,
156
156
  index: sortIndex,
157
157
  sortingOrder: sortingOrder,
158
158
  disabled: !colDef.sortable
159
- })]
159
+ }, rootProps.slotProps?.columnHeaderSortIcon))]
160
160
  });
161
161
  React.useLayoutEffect(() => {
162
162
  const columnMenuState = apiRef.current.state.columnMenu;
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.GridColumnHeaderSortIcon = void 0;
8
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
8
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
10
  var React = _interopRequireWildcard(require("react"));
10
11
  var _propTypes = _interopRequireDefault(require("prop-types"));
@@ -15,6 +16,7 @@ var _gridClasses = require("../../constants/gridClasses");
15
16
  var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
16
17
  var _GridIconButtonContainer = require("./GridIconButtonContainer");
17
18
  var _jsxRuntime = require("react/jsx-runtime");
19
+ const _excluded = ["direction", "index", "sortingOrder", "disabled"];
18
20
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
19
21
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
20
22
  const useUtilityClasses = ownerState => {
@@ -44,11 +46,12 @@ function getIcon(icons, direction, className, sortingOrder) {
44
46
  }
45
47
  function GridColumnHeaderSortIconRaw(props) {
46
48
  const {
47
- direction,
48
- index,
49
- sortingOrder,
50
- disabled
51
- } = props;
49
+ direction,
50
+ index,
51
+ sortingOrder,
52
+ disabled
53
+ } = props,
54
+ other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
52
55
  const apiRef = (0, _useGridApiContext.useGridApiContext)();
53
56
  const rootProps = (0, _useGridRootProps.useGridRootProps)();
54
57
  const ownerState = (0, _extends2.default)({}, props, {
@@ -65,13 +68,14 @@ function GridColumnHeaderSortIconRaw(props) {
65
68
  title: apiRef.current.getLocaleText('columnHeaderSortIconLabel'),
66
69
  size: "small",
67
70
  disabled: disabled
68
- }, rootProps.slotProps?.baseIconButton, {
71
+ }, rootProps.slotProps?.baseIconButton, other, {
69
72
  children: iconElement
70
73
  }));
71
74
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridIconButtonContainer.GridIconButtonContainer, {
72
75
  children: [index != null && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Badge.default, {
73
76
  badgeContent: index,
74
77
  color: "default",
78
+ overlap: "circular",
75
79
  children: iconButton
76
80
  }), index == null && iconButton]
77
81
  });
@@ -84,6 +88,7 @@ process.env.NODE_ENV !== "production" ? GridColumnHeaderSortIconRaw.propTypes =
84
88
  // ----------------------------------------------------------------------
85
89
  direction: _propTypes.default.oneOf(['asc', 'desc']),
86
90
  disabled: _propTypes.default.bool,
91
+ field: _propTypes.default.string.isRequired,
87
92
  index: _propTypes.default.number,
88
93
  sortingOrder: _propTypes.default.arrayOf(_propTypes.default.oneOf(['asc', 'desc'])).isRequired
89
94
  } : void 0;
@@ -148,6 +148,8 @@ const GridRootStyles = exports.GridRootStyles = (0, _styles.styled)('div', {
148
148
  [`& .${_gridClasses.gridClasses.treeDataGroupingCell}`]: styles.treeDataGroupingCell
149
149
  }, {
150
150
  [`& .${_gridClasses.gridClasses.treeDataGroupingCellToggle}`]: styles.treeDataGroupingCellToggle
151
+ }, {
152
+ [`& .${_gridClasses.gridClasses.treeDataGroupingCellLoadingContainer}`]: styles.treeDataGroupingCellLoadingContainer
151
153
  }, {
152
154
  [`& .${_gridClasses.gridClasses.detailPanelToggleCell}`]: styles.detailPanelToggleCell
153
155
  }, {
@@ -615,6 +617,12 @@ const GridRootStyles = exports.GridRootStyles = (0, _styles.styled)('div', {
615
617
  alignSelf: 'stretch',
616
618
  marginRight: t.spacing(2)
617
619
  },
620
+ [`& .${_gridClasses.gridClasses.treeDataGroupingCellLoadingContainer}`]: {
621
+ display: 'flex',
622
+ alignItems: 'center',
623
+ justifyContent: 'center',
624
+ height: '100%'
625
+ },
618
626
  [`& .${_gridClasses.gridClasses.groupingCriteriaCell}`]: {
619
627
  display: 'flex',
620
628
  alignItems: 'center',
@@ -20,6 +20,7 @@ const DATA_GRID_DEFAULT_SLOTS_COMPONENTS = exports.DATA_GRID_DEFAULT_SLOTS_COMPO
20
20
  cell: _GridCell.GridCell,
21
21
  skeletonCell: _components.GridSkeletonCell,
22
22
  columnHeaderFilterIconButton: _components.GridColumnHeaderFilterIconButton,
23
+ columnHeaderSortIcon: _components.GridColumnHeaderSortIcon,
23
24
  columnMenu: _GridColumnMenu.GridColumnMenu,
24
25
  columnHeaders: _GridColumnHeaders.GridColumnHeaders,
25
26
  detailPanels: _GridDetailPanels.GridDetailPanels,
@@ -9,4 +9,4 @@ var _utils = require("@mui/utils");
9
9
  function getDataGridUtilityClass(slot) {
10
10
  return (0, _utils.unstable_generateUtilityClass)('MuiDataGrid', slot);
11
11
  }
12
- const gridClasses = exports.gridClasses = (0, _utils.unstable_generateUtilityClasses)('MuiDataGrid', ['actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'autoHeight', 'autosizing', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--flex', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--rangeTop', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell--pinnedLeft', 'cell--pinnedRight', 'cell--selectionMode', 'cell', 'cellCheckbox', 'cellEmpty', 'cellSkeleton', 'cellOffsetLeft', 'checkboxInput', 'columnHeader', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader--pinnedLeft', 'columnHeader--pinnedRight', 'columnHeader--last', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnHeader--filledGroup', 'columnHeader--emptyGroup', 'columnHeaders', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsManagement', 'columnsManagementRow', 'columnsManagementHeader', 'columnsManagementFooter', 'container--top', 'container--bottom', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filler', 'filler--borderTop', 'filler--pinnedLeft', 'filler--pinnedRight', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'headerFilterRow', 'iconButtonContainer', 'iconSeparator', 'main', 'main--hasPinnedRight', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'overlayWrapper', 'overlayWrapperInner', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'row', 'row--editable', 'row--editing', 'row--firstVisible', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'row--detailPanelExpanded', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'scrollbar', 'scrollbar--vertical', 'scrollbar--horizontal', 'scrollbarFiller', 'scrollbarFiller--header', 'scrollbarFiller--borderTop', 'scrollbarFiller--pinnedRight', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'withVerticalBorder', 'withBorderColor', 'cell--withRightBorder', 'cell--withLeftBorder', 'columnHeader--withRightBorder', 'columnHeader--withLeftBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pinnedRowsRenderZone']);
12
+ const gridClasses = exports.gridClasses = (0, _utils.unstable_generateUtilityClasses)('MuiDataGrid', ['actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'autoHeight', 'autosizing', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--flex', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--rangeTop', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell--pinnedLeft', 'cell--pinnedRight', 'cell--selectionMode', 'cell', 'cellCheckbox', 'cellEmpty', 'cellSkeleton', 'cellOffsetLeft', 'checkboxInput', 'columnHeader', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader--pinnedLeft', 'columnHeader--pinnedRight', 'columnHeader--last', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnHeader--filledGroup', 'columnHeader--emptyGroup', 'columnHeaders', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsManagement', 'columnsManagementRow', 'columnsManagementHeader', 'columnsManagementFooter', 'container--top', 'container--bottom', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filler', 'filler--borderTop', 'filler--pinnedLeft', 'filler--pinnedRight', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'headerFilterRow', 'iconButtonContainer', 'iconSeparator', 'main', 'main--hasPinnedRight', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'overlayWrapper', 'overlayWrapperInner', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'row', 'row--editable', 'row--editing', 'row--firstVisible', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'row--detailPanelExpanded', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'scrollbar', 'scrollbar--vertical', 'scrollbar--horizontal', 'scrollbarFiller', 'scrollbarFiller--header', 'scrollbarFiller--borderTop', 'scrollbarFiller--pinnedRight', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'withVerticalBorder', 'withBorderColor', 'cell--withRightBorder', 'cell--withLeftBorder', 'columnHeader--withRightBorder', 'columnHeader--withLeftBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'treeDataGroupingCellLoadingContainer', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pinnedRowsRenderZone']);
@@ -60,6 +60,7 @@ function useGridDimensions(apiRef, props) {
60
60
  const logger = (0, _useGridLogger.useGridLogger)(apiRef, 'useResizeContainer');
61
61
  const errorShown = React.useRef(false);
62
62
  const rootDimensionsRef = React.useRef(EMPTY_SIZE);
63
+ const dimensionsState = (0, _utils2.useGridSelector)(apiRef, _gridDimensionsSelectors.gridDimensionsSelector);
63
64
  const rowsMeta = (0, _utils2.useGridSelector)(apiRef, _gridRowsMetaSelector.gridRowsMetaSelector);
64
65
  const pinnedColumns = (0, _utils2.useGridSelector)(apiRef, _columns.gridVisiblePinnedColumnDefinitionsSelector);
65
66
  const densityFactor = (0, _utils2.useGridSelector)(apiRef, _density.gridDensityFactorSelector);
@@ -219,26 +220,25 @@ function useGridDimensions(apiRef, props) {
219
220
  }
220
221
  }, [apiRef, savedSize, updateDimensions]);
221
222
  const root = apiRef.current.rootElementRef.current;
222
- const dimensions = apiRef.current.state.dimensions;
223
223
  (0, _utils.unstable_useEnhancedEffect)(() => {
224
224
  if (!root) {
225
225
  return;
226
226
  }
227
227
  const set = (k, v) => root.style.setProperty(k, v);
228
- set('--DataGrid-width', `${dimensions.viewportOuterSize.width}px`);
229
- set('--DataGrid-hasScrollX', `${Number(dimensions.hasScrollX)}`);
230
- set('--DataGrid-hasScrollY', `${Number(dimensions.hasScrollY)}`);
231
- set('--DataGrid-scrollbarSize', `${dimensions.scrollbarSize}px`);
232
- set('--DataGrid-rowWidth', `${dimensions.rowWidth}px`);
233
- set('--DataGrid-columnsTotalWidth', `${dimensions.columnsTotalWidth}px`);
234
- set('--DataGrid-leftPinnedWidth', `${dimensions.leftPinnedWidth}px`);
235
- set('--DataGrid-rightPinnedWidth', `${dimensions.rightPinnedWidth}px`);
236
- set('--DataGrid-headerHeight', `${dimensions.headerHeight}px`);
237
- set('--DataGrid-headersTotalHeight', `${dimensions.headersTotalHeight}px`);
238
- set('--DataGrid-topContainerHeight', `${dimensions.topContainerHeight}px`);
239
- set('--DataGrid-bottomContainerHeight', `${dimensions.bottomContainerHeight}px`);
240
- set('--height', `${dimensions.rowHeight}px`);
241
- }, [root, dimensions]);
228
+ set('--DataGrid-width', `${dimensionsState.viewportOuterSize.width}px`);
229
+ set('--DataGrid-hasScrollX', `${Number(dimensionsState.hasScrollX)}`);
230
+ set('--DataGrid-hasScrollY', `${Number(dimensionsState.hasScrollY)}`);
231
+ set('--DataGrid-scrollbarSize', `${dimensionsState.scrollbarSize}px`);
232
+ set('--DataGrid-rowWidth', `${dimensionsState.rowWidth}px`);
233
+ set('--DataGrid-columnsTotalWidth', `${dimensionsState.columnsTotalWidth}px`);
234
+ set('--DataGrid-leftPinnedWidth', `${dimensionsState.leftPinnedWidth}px`);
235
+ set('--DataGrid-rightPinnedWidth', `${dimensionsState.rightPinnedWidth}px`);
236
+ set('--DataGrid-headerHeight', `${dimensionsState.headerHeight}px`);
237
+ set('--DataGrid-headersTotalHeight', `${dimensionsState.headersTotalHeight}px`);
238
+ set('--DataGrid-topContainerHeight', `${dimensionsState.topContainerHeight}px`);
239
+ set('--DataGrid-bottomContainerHeight', `${dimensionsState.bottomContainerHeight}px`);
240
+ set('--height', `${dimensionsState.rowHeight}px`);
241
+ }, [root, dimensionsState]);
242
242
  const isFirstSizing = React.useRef(true);
243
243
  const handleResize = React.useCallback(size => {
244
244
  rootDimensionsRef.current = size;
@@ -128,14 +128,15 @@ const useGridPrintExport = (apiRef, props) => {
128
128
  gridClone.style.height = `${computedTotalHeight}px`;
129
129
  // The height above does not include grid border width, so we need to exclude it
130
130
  gridClone.style.boxSizing = 'content-box';
131
-
132
- // the footer is always being placed at the bottom of the page as if all rows are exported
133
- // so if getRowsToExport is being used to only export a subset of rows then we need to
134
- // adjust the footer position to be correctly placed at the bottom of the grid
135
- const gridFooterElement = gridClone.querySelector(`.${_gridClasses.gridClasses.footerContainer}`);
136
- gridFooterElement.style.position = 'absolute';
137
- gridFooterElement.style.width = '100%';
138
- gridFooterElement.style.top = `${computedTotalHeight - gridFooterElementHeight}px`;
131
+ if (!normalizeOptions.hideFooter) {
132
+ // the footer is always being placed at the bottom of the page as if all rows are exported
133
+ // so if getRowsToExport is being used to only export a subset of rows then we need to
134
+ // adjust the footer position to be correctly placed at the bottom of the grid
135
+ const gridFooterElement = gridClone.querySelector(`.${_gridClasses.gridClasses.footerContainer}`);
136
+ gridFooterElement.style.position = 'absolute';
137
+ gridFooterElement.style.width = '100%';
138
+ gridFooterElement.style.top = `${computedTotalHeight - gridFooterElementHeight}px`;
139
+ }
139
140
 
140
141
  // printDoc.body.appendChild(gridClone); should be enough but a clone isolation bug in Safari
141
142
  // prevents us to do it
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.gridTopLevelRowCountSelector = exports.gridRowsLookupSelector = exports.gridRowsLoadingSelector = exports.gridRowsDataRowIdToIdLookupSelector = exports.gridRowTreeSelector = exports.gridRowTreeDepthsSelector = exports.gridRowMaximumTreeDepthSelector = exports.gridRowGroupingNameSelector = exports.gridRowCountSelector = exports.gridPinnedRowsSelector = exports.gridPinnedRowsCountSelector = exports.gridDataRowIdsSelector = exports.gridAdditionalRowGroupsSelector = void 0;
6
+ exports.gridTopLevelRowCountSelector = exports.gridRowsLookupSelector = exports.gridRowsLoadingSelector = exports.gridRowsDataRowIdToIdLookupSelector = exports.gridRowTreeSelector = exports.gridRowTreeDepthsSelector = exports.gridRowMaximumTreeDepthSelector = exports.gridRowGroupsToFetchSelector = exports.gridRowGroupingNameSelector = exports.gridRowCountSelector = exports.gridPinnedRowsSelector = exports.gridPinnedRowsCountSelector = exports.gridDataRowIdsSelector = exports.gridAdditionalRowGroupsSelector = void 0;
7
7
  var _createSelector = require("../../../utils/createSelector");
8
8
  const gridRowsStateSelector = state => state.rows;
9
9
  const gridRowCountSelector = exports.gridRowCountSelector = (0, _createSelector.createSelector)(gridRowsStateSelector, rows => rows.totalRowCount);
@@ -14,6 +14,7 @@ const gridTopLevelRowCountSelector = exports.gridTopLevelRowCountSelector = (0,
14
14
  const gridRowsLookupSelector = exports.gridRowsLookupSelector = (0, _createSelector.createSelector)(gridRowsStateSelector, rows => rows.dataRowIdToModelLookup);
15
15
  const gridRowsDataRowIdToIdLookupSelector = exports.gridRowsDataRowIdToIdLookupSelector = (0, _createSelector.createSelector)(gridRowsStateSelector, rows => rows.dataRowIdToIdLookup);
16
16
  const gridRowTreeSelector = exports.gridRowTreeSelector = (0, _createSelector.createSelector)(gridRowsStateSelector, rows => rows.tree);
17
+ const gridRowGroupsToFetchSelector = exports.gridRowGroupsToFetchSelector = (0, _createSelector.createSelector)(gridRowsStateSelector, rows => rows.groupsToFetch);
17
18
  const gridRowGroupingNameSelector = exports.gridRowGroupingNameSelector = (0, _createSelector.createSelector)(gridRowsStateSelector, rows => rows.groupingName);
18
19
  const gridRowTreeDepthsSelector = exports.gridRowTreeDepthsSelector = (0, _createSelector.createSelector)(gridRowsStateSelector, rows => rows.treeDepths);
19
20
  const gridRowMaximumTreeDepthSelector = exports.gridRowMaximumTreeDepthSelector = (0, _createSelector.createSelectorMemoized)(gridRowsStateSelector, rows => {
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.buildRootGroup = exports.GRID_ROOT_GROUP_ID = exports.GRID_ID_AUTOGENERATED = void 0;
8
8
  exports.calculatePinnedRowsHeight = calculatePinnedRowsHeight;
9
9
  exports.checkGridRowIdIsValid = checkGridRowIdIsValid;
10
+ exports.computeRowsUpdates = computeRowsUpdates;
10
11
  exports.createRowsInternalCache = void 0;
11
12
  exports.getMinimalContentHeight = getMinimalContentHeight;
12
13
  exports.updateCacheWithNewRows = exports.isAutoGeneratedRow = exports.getTreeNodeDescendants = exports.getTopLevelRowCount = exports.getRowsStateFromCache = exports.getRowIdFromRowModel = void 0;
@@ -88,7 +89,8 @@ const getRowsStateFromCache = ({
88
89
  rowCountProp = 0,
89
90
  loadingProp,
90
91
  previousTree,
91
- previousTreeDepths
92
+ previousTreeDepths,
93
+ previousGroupsToFetch
92
94
  }) => {
93
95
  const cache = apiRef.current.caches.rows;
94
96
 
@@ -97,13 +99,15 @@ const getRowsStateFromCache = ({
97
99
  tree: unProcessedTree,
98
100
  treeDepths: unProcessedTreeDepths,
99
101
  dataRowIds: unProcessedDataRowIds,
100
- groupingName
102
+ groupingName,
103
+ groupsToFetch = []
101
104
  } = apiRef.current.applyStrategyProcessor('rowTreeCreation', {
102
105
  previousTree,
103
106
  previousTreeDepths,
104
107
  updates: cache.updates,
105
108
  dataRowIdToIdLookup: cache.dataRowIdToIdLookup,
106
- dataRowIdToModelLookup: cache.dataRowIdToModelLookup
109
+ dataRowIdToModelLookup: cache.dataRowIdToModelLookup,
110
+ previousGroupsToFetch
107
111
  });
108
112
 
109
113
  // 2. Apply the "hydrateRows" pipe-processing.
@@ -132,7 +136,8 @@ const getRowsStateFromCache = ({
132
136
  rowCountProp
133
137
  }),
134
138
  groupingName,
135
- loading: loadingProp
139
+ loading: loadingProp,
140
+ groupsToFetch
136
141
  });
137
142
  };
138
143
  exports.getRowsStateFromCache = getRowsStateFromCache;
@@ -163,7 +168,8 @@ exports.getTreeNodeDescendants = getTreeNodeDescendants;
163
168
  const updateCacheWithNewRows = ({
164
169
  previousCache,
165
170
  getRowId,
166
- updates
171
+ updates,
172
+ groupKeys
167
173
  }) => {
168
174
  if (previousCache.updates.type === 'full') {
169
175
  throw new Error('MUI X: Unable to prepare a partial update if a full update is not applied yet.');
@@ -187,7 +193,8 @@ const updateCacheWithNewRows = ({
187
193
  modify: [...(previousCache.updates.actions.modify ?? [])],
188
194
  remove: [...(previousCache.updates.actions.remove ?? [])]
189
195
  },
190
- idToActionLookup: (0, _extends2.default)({}, previousCache.updates.idToActionLookup)
196
+ idToActionLookup: (0, _extends2.default)({}, previousCache.updates.idToActionLookup),
197
+ groupKeys
191
198
  };
192
199
  const dataRowIdToModelLookup = (0, _extends2.default)({}, previousCache.dataRowIdToModelLookup);
193
200
  const dataRowIdToIdLookup = (0, _extends2.default)({}, previousCache.dataRowIdToIdLookup);
@@ -301,4 +308,22 @@ function calculatePinnedRowsHeight(apiRef) {
301
308
  function getMinimalContentHeight(apiRef) {
302
309
  const dimensions = (0, _gridDimensionsSelectors.gridDimensionsSelector)(apiRef.current.state);
303
310
  return `var(--DataGrid-overlayHeight, ${2 * dimensions.rowHeight}px)`;
311
+ }
312
+ function computeRowsUpdates(apiRef, updates, getRowId) {
313
+ const nonPinnedRowsUpdates = [];
314
+ updates.forEach(update => {
315
+ const id = getRowIdFromRowModel(update, getRowId, 'A row was provided without id when calling updateRows():');
316
+ const rowNode = apiRef.current.getRowNode(id);
317
+ if (rowNode?.type === 'pinnedRow') {
318
+ // @ts-ignore because otherwise `release:build` doesn't work
319
+ const pinnedRowsCache = apiRef.current.caches.pinnedRows;
320
+ const prevModel = pinnedRowsCache.idLookup[id];
321
+ if (prevModel) {
322
+ pinnedRowsCache.idLookup[id] = (0, _extends2.default)({}, prevModel, update);
323
+ }
324
+ } else {
325
+ nonPinnedRowsUpdates.push(update);
326
+ }
327
+ });
328
+ return nonPinnedRowsUpdates;
304
329
  }
@@ -20,8 +20,9 @@ var _pipeProcessing = require("../../core/pipeProcessing");
20
20
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
21
21
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
22
22
  const rowsStateInitializer = (state, props, apiRef) => {
23
+ const isDataSourceAvailable = !!props.unstable_dataSource;
23
24
  apiRef.current.caches.rows = (0, _gridRowsUtils.createRowsInternalCache)({
24
- rows: props.rows,
25
+ rows: isDataSourceAvailable ? [] : props.rows,
25
26
  getRowId: props.getRowId,
26
27
  loading: props.loading,
27
28
  rowCount: props.rowCount
@@ -30,7 +31,7 @@ const rowsStateInitializer = (state, props, apiRef) => {
30
31
  rows: (0, _gridRowsUtils.getRowsStateFromCache)({
31
32
  apiRef,
32
33
  rowCountProp: props.rowCount,
33
- loadingProp: props.loading,
34
+ loadingProp: isDataSourceAvailable ? true : props.loading,
34
35
  previousTree: null,
35
36
  previousTreeDepths: null
36
37
  })
@@ -92,7 +93,8 @@ const useGridRows = (apiRef, props) => {
92
93
  rowCountProp: props.rowCount,
93
94
  loadingProp: props.loading,
94
95
  previousTree: (0, _gridRowsSelector.gridRowTreeSelector)(apiRef),
95
- previousTreeDepths: (0, _gridRowsSelector.gridRowTreeDepthsSelector)(apiRef)
96
+ previousTreeDepths: (0, _gridRowsSelector.gridRowTreeDepthsSelector)(apiRef),
97
+ previousGroupsToFetch: (0, _gridRowsSelector.gridRowGroupsToFetchSelector)(apiRef)
96
98
  })
97
99
  }));
98
100
  apiRef.current.publishEvent('rowsSet');
@@ -134,21 +136,7 @@ const useGridRows = (apiRef, props) => {
134
136
  if (props.signature === _useGridApiEventHandler.GridSignature.DataGrid && updates.length > 1) {
135
137
  throw new Error(['MUI X: You cannot update several rows at once in `apiRef.current.updateRows` on the DataGrid.', 'You need to upgrade to DataGridPro or DataGridPremium component to unlock this feature.'].join('\n'));
136
138
  }
137
- const nonPinnedRowsUpdates = [];
138
- updates.forEach(update => {
139
- const id = (0, _gridRowsUtils.getRowIdFromRowModel)(update, props.getRowId, 'A row was provided without id when calling updateRows():');
140
- const rowNode = apiRef.current.getRowNode(id);
141
- if (rowNode?.type === 'pinnedRow') {
142
- // @ts-ignore because otherwise `release:build` doesn't work
143
- const pinnedRowsCache = apiRef.current.caches.pinnedRows;
144
- const prevModel = pinnedRowsCache.idLookup[id];
145
- if (prevModel) {
146
- pinnedRowsCache.idLookup[id] = (0, _extends2.default)({}, prevModel, update);
147
- }
148
- } else {
149
- nonPinnedRowsUpdates.push(update);
150
- }
151
- });
139
+ const nonPinnedRowsUpdates = (0, _gridRowsUtils.computeRowsUpdates)(apiRef, updates, props.getRowId);
152
140
  const cache = (0, _gridRowsUtils.updateCacheWithNewRows)({
153
141
  updates: nonPinnedRowsUpdates,
154
142
  getRowId: props.getRowId,
@@ -159,6 +147,31 @@ const useGridRows = (apiRef, props) => {
159
147
  throttle: true
160
148
  });
161
149
  }, [props.signature, props.getRowId, throttledRowsChange, apiRef]);
150
+ const updateServerRows = React.useCallback((updates, groupKeys) => {
151
+ const nonPinnedRowsUpdates = (0, _gridRowsUtils.computeRowsUpdates)(apiRef, updates, props.getRowId);
152
+ const cache = (0, _gridRowsUtils.updateCacheWithNewRows)({
153
+ updates: nonPinnedRowsUpdates,
154
+ getRowId: props.getRowId,
155
+ previousCache: apiRef.current.caches.rows,
156
+ groupKeys: groupKeys ?? []
157
+ });
158
+ throttledRowsChange({
159
+ cache,
160
+ throttle: false
161
+ });
162
+ }, [props.getRowId, throttledRowsChange, apiRef]);
163
+ const setLoading = React.useCallback(loading => {
164
+ if (loading === props.loading) {
165
+ return;
166
+ }
167
+ logger.debug(`Setting loading to ${loading}`);
168
+ apiRef.current.setState(state => (0, _extends2.default)({}, state, {
169
+ rows: (0, _extends2.default)({}, state.rows, {
170
+ loading
171
+ })
172
+ }));
173
+ apiRef.current.caches.rows.loadingPropBeforePartialUpdates = loading;
174
+ }, [props.loading, apiRef, logger]);
162
175
  const getRowModels = React.useCallback(() => {
163
176
  const dataRows = (0, _gridRowsSelector.gridDataRowIdsSelector)(apiRef);
164
177
  const idRowsLookup = (0, _gridRowsSelector.gridRowsLookupSelector)(apiRef);
@@ -313,6 +326,7 @@ const useGridRows = (apiRef, props) => {
313
326
  }, [apiRef, props.signature, props.getRowId]);
314
327
  const rowApi = {
315
328
  getRow,
329
+ setLoading,
316
330
  getRowId,
317
331
  getRowModels,
318
332
  getRowsCount,
@@ -328,6 +342,9 @@ const useGridRows = (apiRef, props) => {
328
342
  setRowChildrenExpansion,
329
343
  getRowGroupChildren
330
344
  };
345
+ const rowProPrivateApi = {
346
+ updateServerRows
347
+ };
331
348
 
332
349
  /**
333
350
  * EVENTS
@@ -402,6 +419,7 @@ const useGridRows = (apiRef, props) => {
402
419
  (0, _pipeProcessing.useGridRegisterPipeApplier)(apiRef, 'hydrateRows', applyHydrateRowsProcessor);
403
420
  (0, _useGridApiMethod.useGridApiMethod)(apiRef, rowApi, 'public');
404
421
  (0, _useGridApiMethod.useGridApiMethod)(apiRef, rowProApi, props.signature === _useGridApiEventHandler.GridSignature.DataGrid ? 'private' : 'public');
422
+ (0, _useGridApiMethod.useGridApiMethod)(apiRef, rowProPrivateApi, 'private');
405
423
 
406
424
  // The effect do not track any value defined synchronously during the 1st render by hooks called after `useGridRows`
407
425
  // As a consequence, the state generated by the 1st run of this useEffect will always be equal to the initialization one
@@ -446,7 +464,7 @@ const useGridRows = (apiRef, props) => {
446
464
  return;
447
465
  }
448
466
  }
449
- logger.debug(`Updating all rows, new length ${props.rows.length}`);
467
+ logger.debug(`Updating all rows, new length ${props.rows?.length}`);
450
468
  throttledRowsChange({
451
469
  cache: (0, _gridRowsUtils.createRowsInternalCache)({
452
470
  rows: props.rows,
package/node/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid v7.7.1
2
+ * @mui/x-data-grid v7.8.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -57,6 +57,7 @@ var _exportNames = {
57
57
  useGridParamsApi: true,
58
58
  gridAdditionalRowGroupsSelector: true,
59
59
  gridPinnedRowsSelector: true,
60
+ gridRowGroupsToFetchSelector: true,
60
61
  headerFilteringStateInitializer: true,
61
62
  useGridHeaderFiltering: true,
62
63
  useGridRowSelection: true,
@@ -313,6 +314,12 @@ Object.defineProperty(exports, "gridPinnedRowsSelector", {
313
314
  return _gridRowsSelector.gridPinnedRowsSelector;
314
315
  }
315
316
  });
317
+ Object.defineProperty(exports, "gridRowGroupsToFetchSelector", {
318
+ enumerable: true,
319
+ get: function () {
320
+ return _gridRowsSelector.gridRowGroupsToFetchSelector;
321
+ }
322
+ });
316
323
  Object.defineProperty(exports, "headerFilteringStateInitializer", {
317
324
  enumerable: true,
318
325
  get: function () {