@mui/x-data-grid 8.9.1 → 8.10.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 (156) hide show
  1. package/CHANGELOG.md +217 -8
  2. package/DataGrid/DataGrid.js +5 -0
  3. package/DataGrid/useDataGridComponent.js +2 -0
  4. package/colDef/gridCheckboxSelectionColDef.js +1 -0
  5. package/components/GridDetailPanels.d.ts +2 -2
  6. package/components/GridFooter.js +1 -1
  7. package/components/GridPagination.js +4 -3
  8. package/components/GridPinnedRows.d.ts +2 -2
  9. package/components/GridRow.js +8 -1
  10. package/components/cell/GridCell.js +7 -5
  11. package/components/cell/GridEditSingleSelectCell.js +1 -1
  12. package/components/columnsManagement/GridColumnsManagement.d.ts +6 -0
  13. package/components/columnsManagement/GridColumnsManagement.js +17 -5
  14. package/components/containers/GridRootStyles.d.ts +1 -1
  15. package/components/toolbarV8/Toolbar.d.ts +1 -1
  16. package/components/virtualization/GridVirtualScroller.js +5 -5
  17. package/constants/dataGridPropsDefaultValues.js +1 -0
  18. package/esm/DataGrid/DataGrid.js +5 -0
  19. package/esm/DataGrid/useDataGridComponent.js +2 -0
  20. package/esm/colDef/gridCheckboxSelectionColDef.js +1 -0
  21. package/esm/components/GridDetailPanels.d.ts +2 -2
  22. package/esm/components/GridFooter.js +1 -1
  23. package/esm/components/GridPagination.js +3 -2
  24. package/esm/components/GridPinnedRows.d.ts +2 -2
  25. package/esm/components/GridRow.js +8 -1
  26. package/esm/components/cell/GridCell.js +7 -5
  27. package/esm/components/cell/GridEditSingleSelectCell.js +1 -1
  28. package/esm/components/columnsManagement/GridColumnsManagement.d.ts +6 -0
  29. package/esm/components/columnsManagement/GridColumnsManagement.js +17 -5
  30. package/esm/components/containers/GridRootStyles.d.ts +1 -1
  31. package/esm/components/toolbarV8/Toolbar.d.ts +1 -1
  32. package/esm/components/virtualization/GridVirtualScroller.js +5 -5
  33. package/esm/constants/dataGridPropsDefaultValues.js +1 -0
  34. package/esm/hooks/core/useGridVirtualizer.d.ts +9 -0
  35. package/esm/hooks/core/useGridVirtualizer.js +223 -0
  36. package/esm/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +1 -1
  37. package/esm/hooks/features/columnHeaders/useGridColumnHeaders.js +3 -2
  38. package/esm/hooks/features/columns/useGridColumnSpanning.js +5 -90
  39. package/esm/hooks/features/dataSource/models.d.ts +11 -2
  40. package/esm/hooks/features/dataSource/useGridDataSourceBase.d.ts +1 -1
  41. package/esm/hooks/features/dataSource/useGridDataSourceBase.js +9 -2
  42. package/esm/hooks/features/dimensions/useGridDimensions.js +18 -188
  43. package/esm/hooks/features/editing/useGridRowEditing.js +4 -1
  44. package/esm/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +1 -1
  45. package/esm/hooks/features/keyboardNavigation/utils.d.ts +3 -3
  46. package/esm/hooks/features/keyboardNavigation/utils.js +5 -5
  47. package/esm/hooks/features/pivoting/gridPivotingInterfaces.d.ts +0 -1
  48. package/esm/hooks/features/pivoting/gridPivotingSelectors.d.ts +1 -4
  49. package/esm/hooks/features/pivoting/gridPivotingSelectors.js +1 -2
  50. package/esm/hooks/features/rowReorder/gridRowReorderInterfaces.d.ts +9 -0
  51. package/esm/hooks/features/rowReorder/gridRowReorderInterfaces.js +1 -0
  52. package/esm/hooks/features/rowReorder/gridRowReorderSelector.d.ts +5 -0
  53. package/esm/hooks/features/rowReorder/gridRowReorderSelector.js +3 -0
  54. package/esm/hooks/features/rowSelection/useGridRowSelection.js +2 -2
  55. package/esm/hooks/features/rowSelection/utils.js +5 -0
  56. package/esm/hooks/features/rows/gridRowsMetaInterfaces.d.ts +2 -8
  57. package/esm/hooks/features/rows/gridRowsMetaState.d.ts +2 -18
  58. package/esm/hooks/features/rows/useGridRowAriaAttributes.js +3 -1
  59. package/esm/hooks/features/rows/useGridRowSpanning.d.ts +2 -12
  60. package/esm/hooks/features/rows/useGridRowSpanning.js +54 -85
  61. package/esm/hooks/features/rows/useGridRowsMeta.d.ts +1 -1
  62. package/esm/hooks/features/rows/useGridRowsMeta.js +17 -187
  63. package/esm/hooks/features/virtualization/gridVirtualizationSelectors.d.ts +1 -1
  64. package/esm/hooks/features/virtualization/index.d.ts +1 -0
  65. package/esm/hooks/features/virtualization/index.js +1 -0
  66. package/esm/hooks/features/virtualization/useGridVirtualization.d.ts +5 -16
  67. package/esm/hooks/features/virtualization/useGridVirtualization.js +41 -22
  68. package/esm/hooks/utils/index.d.ts +1 -1
  69. package/esm/hooks/utils/index.js +1 -1
  70. package/esm/hooks/utils/useFirstRender.d.ts +1 -1
  71. package/esm/hooks/utils/useFirstRender.js +1 -8
  72. package/esm/index.js +1 -1
  73. package/esm/internals/index.d.ts +3 -1
  74. package/esm/internals/index.js +2 -1
  75. package/esm/internals/utils/getPinnedCellOffset.js +5 -0
  76. package/esm/locales/frFR.js +18 -21
  77. package/esm/locales/heIL.js +12 -12
  78. package/esm/locales/nnNO.js +96 -107
  79. package/esm/locales/plPL.js +22 -24
  80. package/esm/material/index.js +2 -2
  81. package/esm/models/api/gridApiCommon.d.ts +4 -1
  82. package/esm/models/api/gridColumnSpanning.d.ts +5 -11
  83. package/esm/models/gridStateCommunity.d.ts +2 -0
  84. package/esm/models/props/DataGridProps.d.ts +5 -0
  85. package/esm/utils/roundToDecimalPlaces.d.ts +1 -1
  86. package/esm/utils/roundToDecimalPlaces.js +1 -3
  87. package/hooks/core/useGridVirtualizer.d.ts +9 -0
  88. package/hooks/core/useGridVirtualizer.js +231 -0
  89. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +1 -1
  90. package/hooks/features/columnHeaders/useGridColumnHeaders.js +4 -3
  91. package/hooks/features/columns/useGridColumnSpanning.js +5 -91
  92. package/hooks/features/dataSource/models.d.ts +11 -2
  93. package/hooks/features/dataSource/useGridDataSourceBase.d.ts +1 -1
  94. package/hooks/features/dataSource/useGridDataSourceBase.js +10 -3
  95. package/hooks/features/dimensions/useGridDimensions.js +18 -188
  96. package/hooks/features/editing/useGridRowEditing.js +4 -1
  97. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +1 -1
  98. package/hooks/features/keyboardNavigation/utils.d.ts +3 -3
  99. package/hooks/features/keyboardNavigation/utils.js +5 -5
  100. package/hooks/features/pivoting/gridPivotingInterfaces.d.ts +0 -1
  101. package/hooks/features/pivoting/gridPivotingSelectors.d.ts +1 -4
  102. package/hooks/features/pivoting/gridPivotingSelectors.js +2 -3
  103. package/hooks/features/rowReorder/gridRowReorderInterfaces.d.ts +9 -0
  104. package/hooks/features/rowReorder/gridRowReorderInterfaces.js +5 -0
  105. package/hooks/features/rowReorder/gridRowReorderSelector.d.ts +5 -0
  106. package/hooks/features/rowReorder/gridRowReorderSelector.js +9 -0
  107. package/hooks/features/rowSelection/useGridRowSelection.js +2 -2
  108. package/hooks/features/rowSelection/utils.js +5 -0
  109. package/hooks/features/rows/gridRowsMetaInterfaces.d.ts +2 -8
  110. package/hooks/features/rows/gridRowsMetaState.d.ts +2 -18
  111. package/hooks/features/rows/useGridRowAriaAttributes.js +3 -1
  112. package/hooks/features/rows/useGridRowSpanning.d.ts +2 -12
  113. package/hooks/features/rows/useGridRowSpanning.js +54 -85
  114. package/hooks/features/rows/useGridRowsMeta.d.ts +1 -1
  115. package/hooks/features/rows/useGridRowsMeta.js +15 -186
  116. package/hooks/features/virtualization/gridVirtualizationSelectors.d.ts +1 -1
  117. package/hooks/features/virtualization/index.d.ts +1 -0
  118. package/hooks/features/virtualization/index.js +12 -0
  119. package/hooks/features/virtualization/useGridVirtualization.d.ts +5 -16
  120. package/hooks/features/virtualization/useGridVirtualization.js +42 -24
  121. package/hooks/utils/index.d.ts +1 -1
  122. package/hooks/utils/index.js +12 -12
  123. package/hooks/utils/useFirstRender.d.ts +1 -1
  124. package/hooks/utils/useFirstRender.js +11 -11
  125. package/index.js +1 -1
  126. package/internals/index.d.ts +3 -1
  127. package/internals/index.js +12 -11
  128. package/internals/utils/getPinnedCellOffset.js +5 -0
  129. package/locales/frFR.js +18 -21
  130. package/locales/heIL.js +12 -12
  131. package/locales/nnNO.js +96 -107
  132. package/locales/plPL.js +22 -24
  133. package/material/index.js +2 -2
  134. package/models/api/gridApiCommon.d.ts +4 -1
  135. package/models/api/gridColumnSpanning.d.ts +5 -11
  136. package/models/gridStateCommunity.d.ts +2 -0
  137. package/models/props/DataGridProps.d.ts +5 -0
  138. package/package.json +5 -6
  139. package/utils/roundToDecimalPlaces.d.ts +1 -1
  140. package/utils/roundToDecimalPlaces.js +7 -4
  141. package/esm/hooks/features/rows/gridRowSpanningSelectors.d.ts +0 -10
  142. package/esm/hooks/features/rows/gridRowSpanningSelectors.js +0 -5
  143. package/esm/hooks/features/virtualization/useGridVirtualScroller.d.ts +0 -56
  144. package/esm/hooks/features/virtualization/useGridVirtualScroller.js +0 -843
  145. package/esm/hooks/utils/useRunOnce.d.ts +0 -5
  146. package/esm/hooks/utils/useRunOnce.js +0 -18
  147. package/esm/utils/platform.d.ts +0 -1
  148. package/esm/utils/platform.js +0 -2
  149. package/hooks/features/rows/gridRowSpanningSelectors.d.ts +0 -10
  150. package/hooks/features/rows/gridRowSpanningSelectors.js +0 -11
  151. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +0 -56
  152. package/hooks/features/virtualization/useGridVirtualScroller.js +0 -854
  153. package/hooks/utils/useRunOnce.d.ts +0 -5
  154. package/hooks/utils/useRunOnce.js +0 -27
  155. package/utils/platform.d.ts +0 -1
  156. package/utils/platform.js +0 -8
@@ -196,6 +196,11 @@ export interface DataGridPropsWithDefaultValues<R extends GridValidRowModel = an
196
196
  * @default 150
197
197
  */
198
198
  filterDebounceMs: number;
199
+ /**
200
+ * The milliseconds delay to wait after a keystroke before triggering filtering in the columns menu.
201
+ * @default 150
202
+ */
203
+ columnFilterDebounceMs: number;
199
204
  /**
200
205
  * Sets the height in pixel of the column headers in the Data Grid.
201
206
  * @default 56
@@ -1 +1 @@
1
- export declare function roundToDecimalPlaces(value: number, decimals: number): number;
1
+ export { roundToDecimalPlaces } from '@mui/x-internals/math';
@@ -1,3 +1 @@
1
- export function roundToDecimalPlaces(value, decimals) {
2
- return Math.round(value * 10 ** decimals) / 10 ** decimals;
3
- }
1
+ export { roundToDecimalPlaces } from '@mui/x-internals/math';
@@ -0,0 +1,9 @@
1
+ import { RefObject } from '@mui/x-internals/types';
2
+ import { GridPrivateApiCommunity } from "../../models/api/gridApiCommunity.js";
3
+ import { DataGridProcessedProps } from "../../models/props/DataGridProps.js";
4
+ type RootProps = DataGridProcessedProps;
5
+ /**
6
+ * Virtualizer setup
7
+ */
8
+ export declare function useGridVirtualizer(apiRef: RefObject<GridPrivateApiCommunity>, rootProps: RootProps): void;
9
+ export {};
@@ -0,0 +1,231 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.useGridVirtualizer = useGridVirtualizer;
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
+ var React = _interopRequireWildcard(require("react"));
11
+ var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
12
+ var _RtlProvider = require("@mui/system/RtlProvider");
13
+ var _math = require("@mui/x-internals/math");
14
+ var _store = require("@mui/x-internals/store");
15
+ var _xVirtualizer = require("@mui/x-virtualizer");
16
+ var _useFirstRender = require("../utils/useFirstRender");
17
+ var _createSelector = require("../../utils/createSelector");
18
+ var _useGridSelector = require("../utils/useGridSelector");
19
+ var _gridDimensionsSelectors = require("../features/dimensions/gridDimensionsSelectors");
20
+ var _density = require("../features/density");
21
+ var _gridColumnsSelector = require("../features/columns/gridColumnsSelector");
22
+ var _gridRowsSelector = require("../features/rows/gridRowsSelector");
23
+ var _useGridVisibleRows = require("../utils/useGridVisibleRows");
24
+ var _pagination = require("../features/pagination");
25
+ var _gridFocusedVirtualCellSelector = require("../features/virtualization/gridFocusedVirtualCellSelector");
26
+ var _rowSelection = require("../features/rowSelection");
27
+ var _dataGridPropsDefaultValues = require("../../constants/dataGridPropsDefaultValues");
28
+ var _gridRowsUtils = require("../features/rows/gridRowsUtils");
29
+ var _gridColumnsUtils = require("../features/columns/gridColumnsUtils");
30
+ var _jsxRuntime = require("react/jsx-runtime");
31
+ function identity(x) {
32
+ return x;
33
+ }
34
+ const columnsTotalWidthSelector = (0, _createSelector.createSelector)(_gridColumnsSelector.gridVisibleColumnDefinitionsSelector, _gridColumnsSelector.gridColumnPositionsSelector, (visibleColumns, positions) => {
35
+ const colCount = visibleColumns.length;
36
+ if (colCount === 0) {
37
+ return 0;
38
+ }
39
+ return (0, _math.roundToDecimalPlaces)(positions[colCount - 1] + visibleColumns[colCount - 1].computedWidth, 1);
40
+ });
41
+
42
+ /**
43
+ * Virtualizer setup
44
+ */
45
+ function useGridVirtualizer(apiRef, rootProps) {
46
+ const isRtl = (0, _RtlProvider.useRtl)();
47
+ const {
48
+ listView
49
+ } = rootProps;
50
+ const visibleColumns = (0, _useGridSelector.useGridSelector)(apiRef, _gridColumnsSelector.gridVisibleColumnDefinitionsSelector);
51
+ const pinnedRows = (0, _useGridSelector.useGridSelector)(apiRef, _gridRowsSelector.gridPinnedRowsSelector);
52
+ const pinnedColumns = (0, _gridColumnsSelector.gridVisiblePinnedColumnDefinitionsSelector)(apiRef);
53
+ const rowSelectionManager = (0, _useGridSelector.useGridSelector)(apiRef, _rowSelection.gridRowSelectionManagerSelector);
54
+ const isRowSelected = id => rowSelectionManager.has(id) && apiRef.current.isRowSelectable(id);
55
+ const currentPage = (0, _useGridVisibleRows.useGridVisibleRows)(apiRef);
56
+ const hasColSpan = (0, _useGridSelector.useGridSelector)(apiRef, _gridColumnsSelector.gridHasColSpanSelector);
57
+
58
+ /* TODO: extract dimensions code */
59
+ const contentHeight = (0, _useGridSelector.useGridSelector)(apiRef, _gridDimensionsSelectors.gridContentHeightSelector);
60
+ const verticalScrollbarWidth = (0, _useGridSelector.useGridSelector)(apiRef, _gridDimensionsSelectors.gridVerticalScrollbarWidthSelector);
61
+ const hasFiller = (0, _useGridSelector.useGridSelector)(apiRef, _gridDimensionsSelectors.gridHasFillerSelector);
62
+ const {
63
+ autoHeight
64
+ } = rootProps;
65
+ const scrollReset = listView;
66
+
67
+ // <DIMENSIONS>
68
+ const density = (0, _useGridSelector.useGridSelector)(apiRef, _density.gridDensityFactorSelector);
69
+ const baseRowHeight = (0, _gridRowsUtils.getValidRowHeight)(rootProps.rowHeight, _dataGridPropsDefaultValues.DATA_GRID_PROPS_DEFAULT_VALUES.rowHeight, _gridRowsUtils.rowHeightWarning);
70
+ const rowHeight = Math.floor(baseRowHeight * density);
71
+ const headerHeight = Math.floor(rootProps.columnHeaderHeight * density);
72
+ const groupHeaderHeight = Math.floor((rootProps.columnGroupHeaderHeight ?? rootProps.columnHeaderHeight) * density);
73
+ const headerFilterHeight = Math.floor((rootProps.headerFilterHeight ?? rootProps.columnHeaderHeight) * density);
74
+ const columnsTotalWidth = (0, _useGridSelector.useGridSelector)(apiRef, columnsTotalWidthSelector);
75
+ const headersTotalHeight = (0, _gridColumnsUtils.getTotalHeaderHeight)(apiRef, rootProps);
76
+ const leftPinnedWidth = pinnedColumns.left.reduce((w, col) => w + col.computedWidth, 0);
77
+ const rightPinnedWidth = pinnedColumns.right.reduce((w, col) => w + col.computedWidth, 0);
78
+ const dimensions = {
79
+ rowHeight,
80
+ headerHeight,
81
+ groupHeaderHeight,
82
+ headerFilterHeight,
83
+ columnsTotalWidth,
84
+ headersTotalHeight,
85
+ leftPinnedWidth,
86
+ rightPinnedWidth
87
+ };
88
+
89
+ // </DIMENSIONS>
90
+
91
+ // <ROWS_META>
92
+ const dataRowCount = (0, _useGridSelector.useGridSelector)(apiRef, _gridRowsSelector.gridRowCountSelector);
93
+ const pagination = (0, _useGridSelector.useGridSelector)(apiRef, _pagination.gridPaginationSelector);
94
+ const rowCount = Math.min(pagination.enabled ? pagination.paginationModel.pageSize : dataRowCount, dataRowCount);
95
+ const {
96
+ getRowHeight,
97
+ getEstimatedRowHeight,
98
+ getRowSpacing
99
+ } = rootProps;
100
+ // </ROWS_META>
101
+
102
+ const focusedVirtualCell = (0, _useGridSelector.useGridSelector)(apiRef, _gridFocusedVirtualCellSelector.gridFocusedVirtualCellSelector);
103
+ const virtualizer = (0, _xVirtualizer.useVirtualizer)({
104
+ scrollbarSize: rootProps.scrollbarSize,
105
+ dimensions,
106
+ initialState: {
107
+ scroll: rootProps.initialState?.scroll,
108
+ dimensions: apiRef.current.state.dimensions,
109
+ rowSpanning: apiRef.current.state.rowSpanning,
110
+ virtualization: apiRef.current.state.virtualization
111
+ },
112
+ isRtl,
113
+ rows: currentPage.rows,
114
+ range: currentPage.range,
115
+ rowIdToIndexMap: currentPage.rowIdToIndexMap,
116
+ rowCount,
117
+ columns: visibleColumns,
118
+ pinnedRows,
119
+ pinnedColumns,
120
+ refs: {
121
+ container: apiRef.current.mainElementRef,
122
+ scroller: apiRef.current.virtualScrollerRef,
123
+ scrollbarVertical: apiRef.current.virtualScrollbarVerticalRef,
124
+ scrollbarHorizontal: apiRef.current.virtualScrollbarHorizontalRef
125
+ },
126
+ hasColSpan,
127
+ contentHeight,
128
+ minimalContentHeight: _gridRowsUtils.minimalContentHeight,
129
+ autoHeight,
130
+ getRowHeight: React.useMemo(() => {
131
+ if (!getRowHeight) {
132
+ return undefined;
133
+ }
134
+ return rowEntry => getRowHeight((0, _extends2.default)({}, rowEntry, {
135
+ densityFactor: density
136
+ }));
137
+ }, [getRowHeight, density]),
138
+ getEstimatedRowHeight: React.useMemo(() => getEstimatedRowHeight ? rowEntry => getEstimatedRowHeight((0, _extends2.default)({}, rowEntry, {
139
+ densityFactor: density
140
+ })) : undefined, [getEstimatedRowHeight, density]),
141
+ getRowSpacing: React.useMemo(() => getRowSpacing ? (rowEntry, visibility) => getRowSpacing((0, _extends2.default)({}, rowEntry, visibility, {
142
+ indexRelativeToCurrentPage: apiRef.current.getRowIndexRelativeToVisibleRows(rowEntry.id)
143
+ })) : undefined, [apiRef, getRowSpacing]),
144
+ applyRowHeight: (0, _useEventCallback.default)((entry, row) => apiRef.current.unstable_applyPipeProcessors('rowHeight', entry, row)),
145
+ virtualizeColumnsWithAutoRowHeight: rootProps.virtualizeColumnsWithAutoRowHeight,
146
+ focusedVirtualCell: (0, _useEventCallback.default)(() => focusedVirtualCell),
147
+ rowBufferPx: rootProps.rowBufferPx,
148
+ columnBufferPx: rootProps.columnBufferPx,
149
+ resizeThrottleMs: rootProps.resizeThrottleMs,
150
+ onResize: (0, _useEventCallback.default)(size => apiRef.current.publishEvent('resize', size)),
151
+ onWheel: (0, _useEventCallback.default)(event => {
152
+ apiRef.current.publishEvent('virtualScrollerWheel', {}, event);
153
+ }),
154
+ onTouchMove: (0, _useEventCallback.default)(event => {
155
+ apiRef.current.publishEvent('virtualScrollerTouchMove', {}, event);
156
+ }),
157
+ onRenderContextChange: (0, _useEventCallback.default)(nextRenderContext => {
158
+ apiRef.current.publishEvent('renderedRowsIntervalChange', nextRenderContext);
159
+ }),
160
+ onScrollChange: (scrollPosition, nextRenderContext) => {
161
+ apiRef.current.publishEvent('scrollPositionChange', {
162
+ top: scrollPosition.top,
163
+ left: scrollPosition.left,
164
+ renderContext: nextRenderContext
165
+ });
166
+ },
167
+ scrollReset,
168
+ getColspan: (rowId, column) => {
169
+ if (typeof column.colSpan === 'function') {
170
+ const row = apiRef.current.getRow(rowId);
171
+ const value = apiRef.current.getRowValue(row, column);
172
+ return column.colSpan(value, row, column, apiRef) ?? 0;
173
+ }
174
+ return column.colSpan ?? 0;
175
+ },
176
+ renderRow: params => /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.row, (0, _extends2.default)({
177
+ row: params.model,
178
+ rowId: params.id,
179
+ index: params.rowIndex,
180
+ selected: isRowSelected(params.id),
181
+ offsetLeft: params.offsetLeft,
182
+ columnsTotalWidth: columnsTotalWidth,
183
+ rowHeight: params.baseRowHeight,
184
+ pinnedColumns: pinnedColumns,
185
+ visibleColumns: params.columns,
186
+ firstColumnIndex: params.firstColumnIndex,
187
+ lastColumnIndex: params.lastColumnIndex,
188
+ focusedColumnIndex: params.focusedColumnIndex,
189
+ isFirstVisible: params.isFirstVisible,
190
+ isLastVisible: params.isLastVisible,
191
+ isNotVisible: params.isVirtualFocusRow,
192
+ showBottomBorder: params.showBottomBorder,
193
+ scrollbarWidth: verticalScrollbarWidth,
194
+ gridHasFiller: hasFiller
195
+ }, rootProps.slotProps?.row), params.id),
196
+ renderInfiniteLoadingTrigger: id => apiRef.current.getInfiniteLoadingTriggerElement?.({
197
+ lastRowId: id
198
+ })
199
+ });
200
+
201
+ // HACK: Keep the grid's store in sync with the virtualizer store. We set up the
202
+ // subscription in the render phase rather than in an effect because other grid
203
+ // initialization code runs between those two moments.
204
+ //
205
+ // TODO(v9): Remove this
206
+ (0, _useFirstRender.useFirstRender)(() => {
207
+ apiRef.current.store.state.dimensions = virtualizer.store.state.dimensions;
208
+ apiRef.current.store.state.rowsMeta = virtualizer.store.state.rowsMeta;
209
+ apiRef.current.store.state.virtualization = virtualizer.store.state.virtualization;
210
+ });
211
+ (0, _store.useStoreEffect)(virtualizer.store, identity, (_, state) => {
212
+ if (state.dimensions !== apiRef.current.state.dimensions) {
213
+ apiRef.current.setState(gridState => (0, _extends2.default)({}, gridState, {
214
+ dimensions: state.dimensions
215
+ }));
216
+ }
217
+ if (state.rowsMeta !== apiRef.current.state.rowsMeta) {
218
+ apiRef.current.setState(gridState => (0, _extends2.default)({}, gridState, {
219
+ rowsMeta: state.rowsMeta
220
+ }));
221
+ }
222
+ if (state.virtualization !== apiRef.current.state.virtualization) {
223
+ apiRef.current.setState(gridState => (0, _extends2.default)({}, gridState, {
224
+ virtualization: state.virtualization
225
+ }));
226
+ }
227
+ });
228
+ apiRef.current.register('private', {
229
+ virtualizer
230
+ });
231
+ }
@@ -31,7 +31,7 @@ export interface GetHeadersParams {
31
31
  type OwnerState = DataGridProcessedProps;
32
32
  export declare const GridColumnHeaderRow: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme> & {
33
33
  ownerState: OwnerState;
34
- }, Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.HTMLAttributes<HTMLDivElement> | keyof React.ClassAttributes<HTMLDivElement>>, {}>;
34
+ }, Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.ClassAttributes<HTMLDivElement> | keyof React.HTMLAttributes<HTMLDivElement>>, {}>;
35
35
  export declare const useGridColumnHeaders: (props: UseGridColumnHeadersProps) => {
36
36
  renderContext: GridColumnsRenderContext;
37
37
  leftRenderContext: {
@@ -11,6 +11,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
11
11
  var React = _interopRequireWildcard(require("react"));
12
12
  var _clsx = _interopRequireDefault(require("clsx"));
13
13
  var _styles = require("@mui/material/styles");
14
+ var _xVirtualizer = require("@mui/x-virtualizer");
14
15
  var _utils = require("../../utils");
15
16
  var _useGridRootProps = require("../../utils/useGridRootProps");
16
17
  var _useGridPrivateApiContext = require("../../utils/useGridPrivateApiContext");
@@ -18,7 +19,6 @@ var _useGridEvent = require("../../utils/useGridEvent");
18
19
  var _GridColumnHeaderItem = require("../../../components/columnHeaders/GridColumnHeaderItem");
19
20
  var _gridDimensionsSelectors = require("../dimensions/gridDimensionsSelectors");
20
21
  var _virtualization = require("../virtualization");
21
- var _useGridVirtualScroller = require("../virtualization/useGridVirtualScroller");
22
22
  var _GridColumnGroupHeader = require("../../../components/columnHeaders/GridColumnGroupHeader");
23
23
  var _columns = require("../columns");
24
24
  var _gridColumnGroupsSelector = require("../columnGrouping/gridColumnGroupsSelector");
@@ -59,7 +59,7 @@ const useGridColumnHeaders = props => {
59
59
  const renderContext = (0, _utils.useGridSelector)(apiRef, _virtualization.gridRenderContextColumnsSelector);
60
60
  const pinnedColumns = (0, _utils.useGridSelector)(apiRef, _columns.gridVisiblePinnedColumnDefinitionsSelector);
61
61
  const columnsLookup = (0, _utils.useGridSelector)(apiRef, _columns.gridColumnLookupSelector);
62
- const offsetLeft = (0, _useGridVirtualScroller.computeOffsetLeft)(columnPositions, renderContext, pinnedColumns.left.length);
62
+ const offsetLeft = (0, _xVirtualizer.computeOffsetLeft)(columnPositions, renderContext, pinnedColumns.left.length);
63
63
  const columnsTotalWidth = (0, _utils.useGridSelector)(apiRef, _gridDimensionsSelectors.gridColumnsTotalWidthSelector);
64
64
  const gridHasFiller = (0, _utils.useGridSelector)(apiRef, _gridDimensionsSelectors.gridHasFillerSelector);
65
65
  const headerHeight = (0, _utils.useGridSelector)(apiRef, _gridDimensionsSelectors.gridHeaderHeightSelector);
@@ -92,7 +92,8 @@ const useGridColumnHeaders = props => {
92
92
  renderContext: currentContext = renderContext
93
93
  } = params || {};
94
94
  const firstColumnToRender = currentContext.firstColumnIndex;
95
- const lastColumnToRender = currentContext.lastColumnIndex;
95
+ // HACK: renderContext ins't always synchronized, this should be handled properly.
96
+ const lastColumnToRender = Math.min(currentContext.lastColumnIndex, visibleColumns.length);
96
97
  const renderedColumns = visibleColumns.slice(firstColumnToRender, lastColumnToRender);
97
98
  return {
98
99
  renderedColumns,
@@ -1,11 +1,9 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.useGridColumnSpanning = void 0;
8
- var React = _interopRequireWildcard(require("react"));
9
7
  var _useGridApiMethod = require("../../utils/useGridApiMethod");
10
8
  var _useGridEvent = require("../../utils/useGridEvent");
11
9
  /**
@@ -13,36 +11,10 @@ var _useGridEvent = require("../../utils/useGridEvent");
13
11
  * @requires useGridParamsApi (method)
14
12
  */
15
13
  const useGridColumnSpanning = apiRef => {
16
- const lookup = React.useRef({});
17
- const getCellColSpanInfo = (rowId, columnIndex) => {
18
- return lookup.current[rowId]?.[columnIndex];
19
- };
20
- const resetColSpan = () => {
21
- lookup.current = {};
22
- };
23
-
24
- // Calculate `colSpan` for each cell in the row
25
- const calculateColSpan = React.useCallback(({
26
- rowId,
27
- minFirstColumn,
28
- maxLastColumn,
29
- columns
30
- }) => {
31
- for (let i = minFirstColumn; i < maxLastColumn; i += 1) {
32
- const cellProps = calculateCellColSpan({
33
- apiRef,
34
- lookup: lookup.current,
35
- columnIndex: i,
36
- rowId,
37
- minFirstColumnIndex: minFirstColumn,
38
- maxLastColumnIndex: maxLastColumn,
39
- columns
40
- });
41
- if (cellProps.colSpan > 1) {
42
- i += cellProps.colSpan - 1;
43
- }
44
- }
45
- }, [apiRef]);
14
+ const virtualizer = apiRef.current.virtualizer;
15
+ const resetColSpan = virtualizer.api.resetColSpan;
16
+ const getCellColSpanInfo = virtualizer.api.getCellColSpanInfo;
17
+ const calculateColSpan = virtualizer.api.calculateColSpan;
46
18
  const columnSpanningPublicApi = {
47
19
  unstable_getCellColSpanInfo: getCellColSpanInfo
48
20
  };
@@ -54,62 +26,4 @@ const useGridColumnSpanning = apiRef => {
54
26
  (0, _useGridApiMethod.useGridApiMethod)(apiRef, columnSpanningPrivateApi, 'private');
55
27
  (0, _useGridEvent.useGridEvent)(apiRef, 'columnOrderChange', resetColSpan);
56
28
  };
57
- exports.useGridColumnSpanning = useGridColumnSpanning;
58
- function calculateCellColSpan(params) {
59
- const {
60
- apiRef,
61
- lookup,
62
- columnIndex,
63
- rowId,
64
- minFirstColumnIndex,
65
- maxLastColumnIndex,
66
- columns
67
- } = params;
68
- const columnsLength = columns.length;
69
- const column = columns[columnIndex];
70
- const row = apiRef.current.getRow(rowId);
71
- const value = apiRef.current.getRowValue(row, column);
72
- const colSpan = typeof column.colSpan === 'function' ? column.colSpan(value, row, column, apiRef) : column.colSpan;
73
- if (!colSpan || colSpan === 1) {
74
- setCellColSpanInfo(lookup, rowId, columnIndex, {
75
- spannedByColSpan: false,
76
- cellProps: {
77
- colSpan: 1,
78
- width: column.computedWidth
79
- }
80
- });
81
- return {
82
- colSpan: 1
83
- };
84
- }
85
- let width = column.computedWidth;
86
- for (let j = 1; j < colSpan; j += 1) {
87
- const nextColumnIndex = columnIndex + j;
88
- // Cells should be spanned only within their column section (left-pinned, right-pinned and unpinned).
89
- if (nextColumnIndex >= minFirstColumnIndex && nextColumnIndex < maxLastColumnIndex) {
90
- const nextColumn = columns[nextColumnIndex];
91
- width += nextColumn.computedWidth;
92
- setCellColSpanInfo(lookup, rowId, columnIndex + j, {
93
- spannedByColSpan: true,
94
- rightVisibleCellIndex: Math.min(columnIndex + colSpan, columnsLength - 1),
95
- leftVisibleCellIndex: columnIndex
96
- });
97
- }
98
- setCellColSpanInfo(lookup, rowId, columnIndex, {
99
- spannedByColSpan: false,
100
- cellProps: {
101
- colSpan,
102
- width
103
- }
104
- });
105
- }
106
- return {
107
- colSpan
108
- };
109
- }
110
- function setCellColSpanInfo(lookup, rowId, columnIndex, cellColSpanInfo) {
111
- if (!lookup[rowId]) {
112
- lookup[rowId] = {};
113
- }
114
- lookup[rowId][columnIndex] = cellColSpanInfo;
115
- }
29
+ exports.useGridColumnSpanning = useGridColumnSpanning;
@@ -1,15 +1,24 @@
1
1
  import type { GridDataSourceCache, GridGetRowsParams, GridUpdateRowParams } from "../../../models/gridDataSource.js";
2
2
  import type { GridRowId, GridRowModel } from "../../../models/gridRows.js";
3
3
  import type { GridDataSourceCacheDefaultConfig } from "./cache.js";
4
+ /**
5
+ * The parameters for the `fetchRows` method.
6
+ */
7
+ export interface GridDataSourceFetchRowsParams extends Partial<GridGetRowsParams> {
8
+ /**
9
+ * If `true`, bypasses the cache and forces a refetch of the rows from the server.
10
+ */
11
+ skipCache?: boolean;
12
+ }
4
13
  export interface GridDataSourceApiBase {
5
14
  /**
6
15
  * Fetches the rows from the server.
7
16
  * If no `parentId` option is provided, it fetches the root rows.
8
17
  * Any missing parameter from `params` will be filled from the state (sorting, filtering, etc.).
9
18
  * @param {GridRowId} parentId The id of the parent node (default: `GRID_ROOT_GROUP_ID`).
10
- * @param {Partial<GridGetRowsParams>} params Request parameters override.
19
+ * @param {GridDataSourceFetchRowsParams} params Request parameters override.
11
20
  */
12
- fetchRows: (parentId?: GridRowId, params?: Partial<GridGetRowsParams>) => void;
21
+ fetchRows: (parentId?: GridRowId, params?: GridDataSourceFetchRowsParams) => void;
13
22
  /**
14
23
  * The data source cache object.
15
24
  */
@@ -10,7 +10,7 @@ export declare const useGridDataSourceBase: <Api extends GridPrivateApiCommunity
10
10
  api: {
11
11
  public: GridDataSourceApi;
12
12
  };
13
- debouncedFetchRows: ((parentId?: import("@mui/x-data-grid").GridRowId, params?: Partial<import("@mui/x-data-grid").GridGetRowsParams>) => void) & import("@mui/utils/debounce").Cancelable;
13
+ debouncedFetchRows: ((parentId?: import("@mui/x-data-grid").GridRowId, params?: import("./models.js").GridDataSourceFetchRowsParams) => void) & import("@mui/utils/debounce").Cancelable;
14
14
  strategyProcessor: {
15
15
  strategyName: DataSourceRowsUpdateStrategy;
16
16
  group: "dataSourceRowsUpdate";
@@ -1,13 +1,14 @@
1
1
  "use strict";
2
2
  'use client';
3
3
 
4
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
4
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6
6
  Object.defineProperty(exports, "__esModule", {
7
7
  value: true
8
8
  });
9
9
  exports.useGridDataSourceBase = void 0;
10
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
12
  var React = _interopRequireWildcard(require("react"));
12
13
  var _useLazyRef = _interopRequireDefault(require("@mui/utils/useLazyRef"));
13
14
  var _debounce = _interopRequireDefault(require("@mui/utils/debounce"));
@@ -22,6 +23,7 @@ var _gridDataSourceSelector = require("./gridDataSourceSelector");
22
23
  var _utils2 = require("./utils");
23
24
  var _cache = require("./cache");
24
25
  var _gridDataSourceError = require("./gridDataSourceError");
26
+ const _excluded = ["skipCache"];
25
27
  const noopCache = {
26
28
  clear: () => {},
27
29
  get: () => undefined,
@@ -60,10 +62,15 @@ const useGridDataSourceBase = (apiRef, props, options = {}) => {
60
62
  return;
61
63
  }
62
64
  options.clearDataSourceState?.();
63
- const fetchParams = (0, _extends2.default)({}, (0, _gridDataSourceSelector.gridGetRowsParamsSelector)(apiRef), apiRef.current.unstable_applyPipeProcessors('getRowsParams', {}), params);
65
+ const _ref = params || {},
66
+ {
67
+ skipCache
68
+ } = _ref,
69
+ getRowsParams = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
70
+ const fetchParams = (0, _extends2.default)({}, (0, _gridDataSourceSelector.gridGetRowsParamsSelector)(apiRef), apiRef.current.unstable_applyPipeProcessors('getRowsParams', {}), getRowsParams);
64
71
  const cacheKeys = cacheChunkManager.getCacheKeys(fetchParams);
65
72
  const responses = cacheKeys.map(cacheKey => cache.get(cacheKey));
66
- if (responses.every(response => response !== undefined)) {
73
+ if (!skipCache && responses.every(response => response !== undefined)) {
67
74
  apiRef.current.applyStrategyProcessor('dataSourceRowsUpdate', {
68
75
  response: _utils2.CacheChunkManager.mergeResponses(responses),
69
76
  fetchParams