@mui/x-data-grid 5.15.2 → 5.17.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 (286) hide show
  1. package/CHANGELOG.md +177 -2
  2. package/DataGrid/DataGrid.js +3 -1
  3. package/DataGrid/useDataGridComponent.js +5 -0
  4. package/README.md +2 -1
  5. package/components/DataGridColumnHeaders.js +4 -3
  6. package/components/ErrorBoundary.d.ts +1 -0
  7. package/components/GridAutoSizer.js +7 -0
  8. package/components/GridRow.d.ts +2 -1
  9. package/components/GridRow.js +136 -85
  10. package/components/base/GridBody.js +8 -5
  11. package/components/base/GridOverlays.js +4 -7
  12. package/components/cell/GridActionsCellItem.d.ts +2 -2
  13. package/components/cell/GridBooleanCell.js +2 -1
  14. package/components/cell/GridEditBooleanCell.js +2 -1
  15. package/components/cell/GridEditDateCell.js +3 -2
  16. package/components/cell/GridEditInputCell.js +2 -1
  17. package/components/cell/GridEditSingleSelectCell.js +11 -2
  18. package/components/cell/GridSkeletonCell.d.ts +12 -0
  19. package/components/cell/GridSkeletonCell.js +60 -0
  20. package/components/cell/index.d.ts +1 -0
  21. package/components/cell/index.js +2 -1
  22. package/components/columnHeaders/GridColumnGroupHeader.d.ts +14 -0
  23. package/components/columnHeaders/GridColumnGroupHeader.js +122 -0
  24. package/components/columnHeaders/GridColumnHeaderItem.js +55 -71
  25. package/components/columnHeaders/GridColumnHeadersInner.js +2 -1
  26. package/components/columnHeaders/GridGenericColumnHeaderItem.d.ts +32 -0
  27. package/components/columnHeaders/GridGenericColumnHeaderItem.js +104 -0
  28. package/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
  29. package/components/containers/GridOverlay.js +7 -1
  30. package/components/containers/GridRoot.js +3 -3
  31. package/components/containers/GridRootStyles.js +16 -2
  32. package/components/menu/GridMenu.d.ts +3 -2
  33. package/components/menu/GridMenu.js +1 -0
  34. package/components/menu/columnMenu/GridColumnHeaderMenu.d.ts +1 -1
  35. package/components/panel/GridColumnsPanel.d.ts +6 -1
  36. package/components/panel/GridColumnsPanel.js +38 -6
  37. package/components/panel/GridPanel.d.ts +1 -1
  38. package/components/panel/GridPanel.js +1 -0
  39. package/components/panel/filterPanel/GridFilterForm.d.ts +4 -0
  40. package/components/panel/filterPanel/GridFilterForm.js +5 -0
  41. package/components/panel/filterPanel/GridFilterInputMultipleValue.d.ts +1 -1
  42. package/components/panel/filterPanel/GridFilterPanel.d.ts +4 -0
  43. package/components/panel/filterPanel/GridFilterPanel.js +5 -0
  44. package/components/toolbar/GridToolbarColumnsButton.d.ts +1 -1
  45. package/components/toolbar/GridToolbarDensitySelector.d.ts +1 -1
  46. package/components/toolbar/GridToolbarExportContainer.d.ts +1 -1
  47. package/constants/defaultGridSlotsComponents.js +2 -1
  48. package/constants/gridClasses.d.ts +24 -0
  49. package/constants/gridClasses.js +1 -1
  50. package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +5 -1
  51. package/hooks/features/columnGrouping/gridColumnGroupsInterfaces.d.ts +7 -0
  52. package/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +1 -0
  53. package/hooks/features/columnGrouping/gridColumnGroupsSelector.d.ts +7 -0
  54. package/hooks/features/columnGrouping/gridColumnGroupsSelector.js +8 -0
  55. package/hooks/features/columnGrouping/index.d.ts +2 -0
  56. package/hooks/features/columnGrouping/index.js +2 -0
  57. package/hooks/features/columnGrouping/useGridColumnGrouping.d.ts +24 -0
  58. package/hooks/features/columnGrouping/useGridColumnGrouping.js +153 -0
  59. package/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.d.ts +4 -0
  60. package/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +35 -0
  61. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +7 -6
  62. package/hooks/features/columnHeaders/useGridColumnHeaders.js +204 -9
  63. package/hooks/features/density/densitySelector.d.ts +2 -0
  64. package/hooks/features/density/densitySelector.js +3 -1
  65. package/hooks/features/density/densityState.d.ts +1 -0
  66. package/hooks/features/density/useGridDensity.d.ts +1 -1
  67. package/hooks/features/density/useGridDensity.js +45 -9
  68. package/hooks/features/dimensions/useGridDimensions.js +4 -4
  69. package/hooks/features/export/useGridPrintExport.js +3 -3
  70. package/hooks/features/filter/gridFilterSelector.d.ts +3 -3
  71. package/hooks/features/filter/gridFilterUtils.d.ts +1 -1
  72. package/hooks/features/filter/gridFilterUtils.js +55 -54
  73. package/hooks/features/filter/useGridFilter.js +1 -1
  74. package/hooks/features/index.d.ts +1 -0
  75. package/hooks/features/index.js +1 -0
  76. package/hooks/features/pagination/gridPaginationSelector.d.ts +1 -1
  77. package/hooks/features/rows/gridRowsSelector.d.ts +1 -1
  78. package/hooks/features/rows/useGridParamsApi.js +1 -1
  79. package/hooks/features/rows/useGridRows.js +65 -8
  80. package/hooks/features/rows/useGridRowsMeta.js +36 -16
  81. package/hooks/features/selection/gridSelectionSelector.d.ts +1 -1
  82. package/hooks/features/sorting/gridSortingSelector.d.ts +1 -1
  83. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +2 -2
  84. package/hooks/features/virtualization/useGridVirtualScroller.js +17 -5
  85. package/hooks/utils/useGridNativeEventListener.d.ts +1 -1
  86. package/hooks/utils/useGridNativeEventListener.js +2 -2
  87. package/hooks/utils/useGridVisibleRows.d.ts +2 -2
  88. package/index.js +1 -1
  89. package/internals/index.d.ts +2 -0
  90. package/internals/index.js +2 -0
  91. package/legacy/DataGrid/DataGrid.js +3 -1
  92. package/legacy/DataGrid/useDataGridComponent.js +5 -0
  93. package/legacy/components/DataGridColumnHeaders.js +4 -3
  94. package/legacy/components/GridAutoSizer.js +7 -0
  95. package/legacy/components/GridRow.js +138 -85
  96. package/legacy/components/base/GridBody.js +8 -5
  97. package/legacy/components/base/GridOverlays.js +4 -7
  98. package/legacy/components/cell/GridBooleanCell.js +2 -1
  99. package/legacy/components/cell/GridEditBooleanCell.js +2 -1
  100. package/legacy/components/cell/GridEditDateCell.js +3 -2
  101. package/legacy/components/cell/GridEditInputCell.js +2 -1
  102. package/legacy/components/cell/GridEditSingleSelectCell.js +11 -2
  103. package/legacy/components/cell/GridSkeletonCell.js +57 -0
  104. package/legacy/components/cell/index.js +2 -1
  105. package/legacy/components/columnHeaders/GridColumnGroupHeader.js +120 -0
  106. package/legacy/components/columnHeaders/GridColumnHeaderItem.js +78 -88
  107. package/legacy/components/columnHeaders/GridColumnHeadersInner.js +2 -1
  108. package/legacy/components/columnHeaders/GridGenericColumnHeaderItem.js +112 -0
  109. package/legacy/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
  110. package/legacy/components/containers/GridOverlay.js +7 -1
  111. package/legacy/components/containers/GridRoot.js +3 -3
  112. package/legacy/components/containers/GridRootStyles.js +14 -5
  113. package/legacy/components/menu/GridMenu.js +1 -0
  114. package/legacy/components/panel/GridColumnsPanel.js +41 -6
  115. package/legacy/components/panel/GridPanel.js +1 -0
  116. package/legacy/components/panel/filterPanel/GridFilterForm.js +5 -0
  117. package/legacy/components/panel/filterPanel/GridFilterPanel.js +5 -0
  118. package/legacy/constants/defaultGridSlotsComponents.js +2 -1
  119. package/legacy/constants/gridClasses.js +1 -1
  120. package/legacy/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +1 -0
  121. package/legacy/hooks/features/columnGrouping/gridColumnGroupsSelector.js +12 -0
  122. package/legacy/hooks/features/columnGrouping/index.js +2 -0
  123. package/legacy/hooks/features/columnGrouping/useGridColumnGrouping.js +151 -0
  124. package/legacy/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +35 -0
  125. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +213 -12
  126. package/legacy/hooks/features/density/densitySelector.js +6 -0
  127. package/legacy/hooks/features/density/useGridDensity.js +44 -6
  128. package/legacy/hooks/features/dimensions/useGridDimensions.js +4 -4
  129. package/legacy/hooks/features/export/useGridPrintExport.js +3 -3
  130. package/legacy/hooks/features/filter/gridFilterUtils.js +61 -56
  131. package/legacy/hooks/features/filter/useGridFilter.js +1 -1
  132. package/legacy/hooks/features/index.js +1 -0
  133. package/legacy/hooks/features/rows/useGridParamsApi.js +1 -1
  134. package/legacy/hooks/features/rows/useGridRows.js +73 -8
  135. package/legacy/hooks/features/rows/useGridRowsMeta.js +45 -18
  136. package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +31 -13
  137. package/legacy/hooks/utils/useGridNativeEventListener.js +2 -2
  138. package/legacy/index.js +1 -1
  139. package/legacy/internals/index.js +2 -0
  140. package/legacy/models/api/gridColumnGroupingApi.js +1 -0
  141. package/legacy/models/events/gridEvents.js +2 -0
  142. package/legacy/models/gridColumnGrouping.js +6 -0
  143. package/legacy/models/index.js +2 -1
  144. package/legacy/models/params/gridRenderedRowsIntervalChangeParams.js +1 -0
  145. package/legacy/models/params/index.js +2 -1
  146. package/legacy/utils/utils.js +18 -0
  147. package/models/api/gridApiCommon.d.ts +2 -1
  148. package/models/api/gridColumnGroupingApi.d.ts +19 -0
  149. package/models/api/gridColumnGroupingApi.js +1 -0
  150. package/models/api/gridDensityApi.d.ts +2 -1
  151. package/models/api/gridParamsApi.d.ts +1 -1
  152. package/models/api/gridRowApi.d.ts +6 -0
  153. package/models/api/gridRowsMetaApi.d.ts +6 -1
  154. package/models/colDef/gridColDef.d.ts +15 -1
  155. package/models/events/gridEventLookup.d.ts +7 -1
  156. package/models/events/gridEvents.d.ts +3 -1
  157. package/models/events/gridEvents.js +2 -0
  158. package/models/gridColumnGrouping.d.ts +67 -0
  159. package/models/gridColumnGrouping.js +6 -0
  160. package/models/gridRows.d.ts +5 -5
  161. package/models/gridSlotsComponent.d.ts +5 -0
  162. package/models/gridStateCommunity.d.ts +2 -1
  163. package/models/index.d.ts +1 -0
  164. package/models/index.js +2 -1
  165. package/models/params/gridCellParams.d.ts +7 -2
  166. package/models/params/gridMenuParams.d.ts +1 -2
  167. package/models/params/gridRenderedRowsIntervalChangeParams.d.ts +10 -0
  168. package/models/params/gridRenderedRowsIntervalChangeParams.js +1 -0
  169. package/models/params/index.d.ts +1 -0
  170. package/models/params/index.js +2 -1
  171. package/models/props/DataGridProps.d.ts +7 -1
  172. package/modern/DataGrid/DataGrid.js +3 -1
  173. package/modern/DataGrid/useDataGridComponent.js +5 -0
  174. package/modern/components/DataGridColumnHeaders.js +4 -3
  175. package/modern/components/GridAutoSizer.js +7 -0
  176. package/modern/components/GridRow.js +133 -84
  177. package/modern/components/base/GridBody.js +8 -5
  178. package/modern/components/base/GridOverlays.js +4 -7
  179. package/modern/components/cell/GridBooleanCell.js +2 -1
  180. package/modern/components/cell/GridEditBooleanCell.js +2 -1
  181. package/modern/components/cell/GridEditDateCell.js +3 -2
  182. package/modern/components/cell/GridEditInputCell.js +2 -1
  183. package/modern/components/cell/GridEditSingleSelectCell.js +11 -2
  184. package/modern/components/cell/GridSkeletonCell.js +60 -0
  185. package/modern/components/cell/index.js +2 -1
  186. package/modern/components/columnHeaders/GridColumnGroupHeader.js +120 -0
  187. package/modern/components/columnHeaders/GridColumnHeaderItem.js +53 -69
  188. package/modern/components/columnHeaders/GridColumnHeadersInner.js +2 -1
  189. package/modern/components/columnHeaders/GridGenericColumnHeaderItem.js +104 -0
  190. package/modern/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
  191. package/modern/components/containers/GridOverlay.js +7 -1
  192. package/modern/components/containers/GridRoot.js +3 -3
  193. package/modern/components/containers/GridRootStyles.js +16 -2
  194. package/modern/components/menu/GridMenu.js +1 -0
  195. package/modern/components/panel/GridColumnsPanel.js +38 -6
  196. package/modern/components/panel/GridPanel.js +1 -0
  197. package/modern/components/panel/filterPanel/GridFilterForm.js +5 -0
  198. package/modern/components/panel/filterPanel/GridFilterPanel.js +5 -0
  199. package/modern/constants/defaultGridSlotsComponents.js +2 -1
  200. package/modern/constants/gridClasses.js +1 -1
  201. package/modern/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +1 -0
  202. package/modern/hooks/features/columnGrouping/gridColumnGroupsSelector.js +8 -0
  203. package/modern/hooks/features/columnGrouping/index.js +2 -0
  204. package/modern/hooks/features/columnGrouping/useGridColumnGrouping.js +145 -0
  205. package/modern/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +29 -0
  206. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +186 -9
  207. package/modern/hooks/features/density/densitySelector.js +3 -1
  208. package/modern/hooks/features/density/useGridDensity.js +37 -9
  209. package/modern/hooks/features/dimensions/useGridDimensions.js +4 -4
  210. package/modern/hooks/features/export/useGridPrintExport.js +3 -3
  211. package/modern/hooks/features/filter/gridFilterUtils.js +54 -53
  212. package/modern/hooks/features/filter/useGridFilter.js +1 -1
  213. package/modern/hooks/features/index.js +1 -0
  214. package/modern/hooks/features/rows/useGridParamsApi.js +1 -1
  215. package/modern/hooks/features/rows/useGridRows.js +65 -8
  216. package/modern/hooks/features/rows/useGridRowsMeta.js +36 -16
  217. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +17 -5
  218. package/modern/hooks/utils/useGridNativeEventListener.js +2 -2
  219. package/modern/index.js +1 -1
  220. package/modern/internals/index.js +2 -0
  221. package/modern/models/api/gridColumnGroupingApi.js +1 -0
  222. package/modern/models/events/gridEvents.js +2 -0
  223. package/modern/models/gridColumnGrouping.js +6 -0
  224. package/modern/models/index.js +2 -1
  225. package/modern/models/params/gridRenderedRowsIntervalChangeParams.js +1 -0
  226. package/modern/models/params/index.js +2 -1
  227. package/modern/utils/utils.js +16 -0
  228. package/node/DataGrid/DataGrid.js +3 -1
  229. package/node/DataGrid/useDataGridComponent.js +7 -0
  230. package/node/components/DataGridColumnHeaders.js +4 -3
  231. package/node/components/GridAutoSizer.js +7 -0
  232. package/node/components/GridRow.js +136 -77
  233. package/node/components/base/GridBody.js +7 -4
  234. package/node/components/base/GridOverlays.js +3 -6
  235. package/node/components/cell/GridBooleanCell.js +2 -1
  236. package/node/components/cell/GridEditBooleanCell.js +2 -1
  237. package/node/components/cell/GridEditDateCell.js +3 -2
  238. package/node/components/cell/GridEditInputCell.js +2 -1
  239. package/node/components/cell/GridEditSingleSelectCell.js +11 -2
  240. package/node/components/cell/GridSkeletonCell.js +81 -0
  241. package/node/components/cell/index.js +13 -0
  242. package/node/components/columnHeaders/GridColumnGroupHeader.js +141 -0
  243. package/node/components/columnHeaders/GridColumnHeaderItem.js +53 -72
  244. package/node/components/columnHeaders/GridColumnHeadersInner.js +2 -1
  245. package/node/components/columnHeaders/GridGenericColumnHeaderItem.js +126 -0
  246. package/node/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
  247. package/node/components/containers/GridOverlay.js +7 -1
  248. package/node/components/containers/GridRoot.js +4 -4
  249. package/node/components/containers/GridRootStyles.js +16 -2
  250. package/node/components/menu/GridMenu.js +1 -0
  251. package/node/components/panel/GridColumnsPanel.js +36 -5
  252. package/node/components/panel/GridPanel.js +1 -0
  253. package/node/components/panel/filterPanel/GridFilterForm.js +5 -0
  254. package/node/components/panel/filterPanel/GridFilterPanel.js +5 -0
  255. package/node/constants/defaultGridSlotsComponents.js +1 -0
  256. package/node/constants/gridClasses.js +1 -1
  257. package/node/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +5 -0
  258. package/node/hooks/features/columnGrouping/gridColumnGroupsSelector.js +18 -0
  259. package/node/hooks/features/columnGrouping/index.js +18 -0
  260. package/node/hooks/features/columnGrouping/useGridColumnGrouping.js +182 -0
  261. package/node/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +55 -0
  262. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +207 -8
  263. package/node/hooks/features/density/densitySelector.js +6 -2
  264. package/node/hooks/features/density/useGridDensity.js +48 -9
  265. package/node/hooks/features/dimensions/useGridDimensions.js +3 -3
  266. package/node/hooks/features/export/useGridPrintExport.js +2 -2
  267. package/node/hooks/features/filter/gridFilterUtils.js +55 -55
  268. package/node/hooks/features/filter/useGridFilter.js +1 -1
  269. package/node/hooks/features/index.js +13 -0
  270. package/node/hooks/features/rows/useGridParamsApi.js +1 -1
  271. package/node/hooks/features/rows/useGridRows.js +60 -7
  272. package/node/hooks/features/rows/useGridRowsMeta.js +35 -15
  273. package/node/hooks/features/virtualization/useGridVirtualScroller.js +17 -5
  274. package/node/hooks/utils/useGridNativeEventListener.js +2 -2
  275. package/node/index.js +1 -1
  276. package/node/internals/index.js +22 -0
  277. package/node/models/api/gridColumnGroupingApi.js +5 -0
  278. package/node/models/events/gridEvents.js +2 -0
  279. package/node/models/gridColumnGrouping.js +13 -0
  280. package/node/models/index.js +13 -0
  281. package/node/models/params/gridRenderedRowsIntervalChangeParams.js +5 -0
  282. package/node/models/params/index.js +13 -0
  283. package/node/utils/utils.js +18 -0
  284. package/package.json +3 -3
  285. package/utils/utils.d.ts +1 -0
  286. package/utils/utils.js +16 -0
@@ -69,74 +69,74 @@ export const sanitizeFilterModel = (model, disableMultipleColumnsFiltering, apiR
69
69
  export const mergeStateWithFilterModel = (filterModel, disableMultipleColumnsFiltering, apiRef) => filteringState => _extends({}, filteringState, {
70
70
  filterModel: sanitizeFilterModel(filterModel, disableMultipleColumnsFiltering, apiRef)
71
71
  });
72
- /**
73
- * Generates a method to easily check if a row is matching the current filter model.
74
- * @param {GridFilterModel} filterModel The model with which we want to filter the rows.
75
- * @param {React.MutableRefObject<GridApiCommunity>} apiRef The API of the grid.
76
- * @returns {GridAggregatedFilterItemApplier | null} A method that checks if a row is matching the current filter model. If `null`, we consider that all the rows are matching the filters.
77
- */
78
72
 
79
- export const buildAggregatedFilterItemsApplier = (filterModel, apiRef) => {
80
- const {
81
- items
82
- } = filterModel;
83
-
84
- const getFilterCallbackFromItem = filterItem => {
85
- if (!filterItem.columnField || !filterItem.operatorValue) {
86
- return null;
87
- }
73
+ const getFilterCallbackFromItem = (filterItem, apiRef) => {
74
+ if (!filterItem.columnField || !filterItem.operatorValue) {
75
+ return null;
76
+ }
88
77
 
89
- const column = apiRef.current.getColumn(filterItem.columnField);
78
+ const column = apiRef.current.getColumn(filterItem.columnField);
90
79
 
91
- if (!column) {
92
- return null;
93
- }
80
+ if (!column) {
81
+ return null;
82
+ }
94
83
 
95
- let parsedValue;
84
+ let parsedValue;
96
85
 
97
- if (column.valueParser) {
98
- var _filterItem$value;
86
+ if (column.valueParser) {
87
+ var _filterItem$value;
99
88
 
100
- const parser = column.valueParser;
101
- parsedValue = Array.isArray(filterItem.value) ? (_filterItem$value = filterItem.value) == null ? void 0 : _filterItem$value.map(x => parser(x)) : parser(filterItem.value);
102
- } else {
103
- parsedValue = filterItem.value;
104
- }
89
+ const parser = column.valueParser;
90
+ parsedValue = Array.isArray(filterItem.value) ? (_filterItem$value = filterItem.value) == null ? void 0 : _filterItem$value.map(x => parser(x)) : parser(filterItem.value);
91
+ } else {
92
+ parsedValue = filterItem.value;
93
+ }
105
94
 
106
- const newFilterItem = _extends({}, filterItem, {
107
- value: parsedValue
108
- });
95
+ const newFilterItem = _extends({}, filterItem, {
96
+ value: parsedValue
97
+ });
109
98
 
110
- const filterOperators = column.filterOperators;
99
+ const filterOperators = column.filterOperators;
111
100
 
112
- if (!(filterOperators != null && filterOperators.length)) {
113
- throw new Error(`MUI: No filter operators found for column '${column.field}'.`);
114
- }
101
+ if (!(filterOperators != null && filterOperators.length)) {
102
+ throw new Error(`MUI: No filter operators found for column '${column.field}'.`);
103
+ }
115
104
 
116
- const filterOperator = filterOperators.find(operator => operator.value === newFilterItem.operatorValue);
105
+ const filterOperator = filterOperators.find(operator => operator.value === newFilterItem.operatorValue);
117
106
 
118
- if (!filterOperator) {
119
- throw new Error(`MUI: No filter operator found for column '${column.field}' and operator value '${newFilterItem.operatorValue}'.`);
120
- }
107
+ if (!filterOperator) {
108
+ throw new Error(`MUI: No filter operator found for column '${column.field}' and operator value '${newFilterItem.operatorValue}'.`);
109
+ }
121
110
 
122
- const applyFilterOnRow = filterOperator.getApplyFilterFn(newFilterItem, column);
111
+ const applyFilterOnRow = filterOperator.getApplyFilterFn(newFilterItem, column);
123
112
 
124
- if (typeof applyFilterOnRow !== 'function') {
125
- return null;
126
- }
113
+ if (typeof applyFilterOnRow !== 'function') {
114
+ return null;
115
+ }
127
116
 
128
- const fn = rowId => {
129
- const cellParams = apiRef.current.getCellParams(rowId, newFilterItem.columnField);
130
- return applyFilterOnRow(cellParams);
131
- };
117
+ const fn = rowId => {
118
+ const cellParams = apiRef.current.getCellParams(rowId, newFilterItem.columnField);
119
+ return applyFilterOnRow(cellParams);
120
+ };
132
121
 
133
- return {
134
- fn,
135
- item: newFilterItem
136
- };
122
+ return {
123
+ fn,
124
+ item: newFilterItem
137
125
  };
126
+ };
127
+ /**
128
+ * Generates a method to easily check if a row is matching the current filter model.
129
+ * @param {GridFilterModel} filterModel The model with which we want to filter the rows.
130
+ * @param {React.MutableRefObject<GridApiCommunity>} apiRef The API of the grid.
131
+ * @returns {GridAggregatedFilterItemApplier | null} A method that checks if a row is matching the current filter model. If `null`, we consider that all the rows are matching the filters.
132
+ */
138
133
 
139
- const appliers = items.map(getFilterCallbackFromItem).filter(callback => !!callback);
134
+
135
+ export const buildAggregatedFilterItemsApplier = (filterModel, apiRef) => {
136
+ const {
137
+ items
138
+ } = filterModel;
139
+ const appliers = items.map(item => getFilterCallbackFromItem(item, apiRef)).filter(callback => !!callback);
140
140
 
141
141
  if (appliers.length === 0) {
142
142
  return null;
@@ -219,9 +219,10 @@ export const buildAggregatedFilterApplier = (filterModel, apiRef) => {
219
219
  passingQuickFilterValues: isRowMatchingQuickFilter && isRowMatchingQuickFilter(rowId, shouldApplyFilter)
220
220
  });
221
221
  };
222
- export const passFilterLogic = (allFilterItemResults, allQuickFilterResults, filterModel) => {
222
+ export const passFilterLogic = (allFilterItemResults, allQuickFilterResults, filterModel, apiRef) => {
223
223
  var _filterModel$quickFil, _filterModel$linkOper;
224
224
 
225
+ const cleanedFilterItems = filterModel.items.filter(item => getFilterCallbackFromItem(item, apiRef) !== null);
225
226
  const cleanedAllFilterItemResults = allFilterItemResults.filter(result => result != null);
226
227
  const cleanedAllQuickFilterResults = allQuickFilterResults.filter(result => result != null); // Defaultize operators
227
228
 
@@ -235,13 +236,13 @@ export const passFilterLogic = (allFilterItemResults, allQuickFilterResults, fil
235
236
  };
236
237
 
237
238
  if (linkOperator === GridLinkOperator.And) {
238
- const passesAllFilters = filterModel.items.every(filterItemPredicate);
239
+ const passesAllFilters = cleanedFilterItems.every(filterItemPredicate);
239
240
 
240
241
  if (!passesAllFilters) {
241
242
  return false;
242
243
  }
243
244
  } else {
244
- const passesSomeFilters = filterModel.items.some(filterItemPredicate);
245
+ const passesSomeFilters = cleanedFilterItems.some(filterItemPredicate);
245
246
 
246
247
  if (!passesSomeFilters) {
247
248
  return false;
@@ -271,7 +271,7 @@ export const useGridFilter = (apiRef, props) => {
271
271
  passingFilterItems,
272
272
  passingQuickFilterValues
273
273
  } = params.isRowMatchingFilters(rowId);
274
- isRowPassing = passFilterLogic([passingFilterItems], [passingQuickFilterValues], params.filterModel);
274
+ isRowPassing = passFilterLogic([passingFilterItems], [passingQuickFilterValues], params.filterModel, apiRef);
275
275
  }
276
276
 
277
277
  filteredRowsLookup[rowId] = isRowPassing;
@@ -1,5 +1,6 @@
1
1
  export * from './columnMenu';
2
2
  export * from './columns';
3
+ export * from './columnGrouping';
3
4
  export * from './density';
4
5
  export * from './editRows';
5
6
  export * from './filter';
@@ -1,6 +1,7 @@
1
1
  // Only export the variable and types that should be publicly exposed and re-exported from `@mui/x-data-grid-pro`
2
2
  export * from './columnMenu';
3
3
  export * from './columns';
4
+ export * from './columnGrouping';
4
5
  export * from './density';
5
6
  export * from './editRows';
6
7
  export * from './filter';
@@ -33,7 +33,7 @@ export declare const gridPaginationRowRangeSelector: import("../../../utils/crea
33
33
  */
34
34
  export declare const gridPaginatedVisibleSortedGridRowEntriesSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, {
35
35
  id: import("../../..").GridRowId;
36
- model: any;
36
+ model: import("../../..").GridValidRowModel;
37
37
  }[]>;
38
38
  /**
39
39
  * Get the id of each row to include in the current page if the pagination is enabled.
@@ -3,7 +3,7 @@ export declare const gridRowsStateSelector: (state: GridStateCommunity) => impor
3
3
  export declare const gridRowCountSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, number>;
4
4
  export declare const gridRowsLoadingSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, boolean | undefined>;
5
5
  export declare const gridTopLevelRowCountSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, number>;
6
- export declare const gridRowsLookupSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, import("../../..").GridRowsLookup<any>>;
6
+ export declare const gridRowsLookupSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, import("../../..").GridRowsLookup<import("../../..").GridValidRowModel>>;
7
7
  export declare const gridRowsIdToIdLookupSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, Record<string, import("../../..").GridRowId>>;
8
8
  export declare const gridRowTreeSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, import("../../..").GridRowTreeConfig>;
9
9
  export declare const gridRowGroupingNameSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, string>;
@@ -105,7 +105,7 @@ export function useGridParamsApi(apiRef) {
105
105
  formattedValue: value
106
106
  };
107
107
 
108
- if (colDef.valueFormatter) {
108
+ if (colDef && colDef.valueFormatter) {
109
109
  params.formattedValue = colDef.valueFormatter({
110
110
  id,
111
111
  field: params.field,
@@ -2,7 +2,7 @@ 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, gridRowIdsSelector, gridRowGroupingNameSelector } from './gridRowsSelector';
5
+ import { gridRowCountSelector, gridRowsLookupSelector, gridRowTreeSelector, gridRowIdsSelector, gridRowGroupingNameSelector, gridRowsIdToIdLookupSelector } from './gridRowsSelector';
6
6
  import { GridSignature, useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
7
7
  import { useGridVisibleRows } from '../../utils/useGridVisibleRows';
8
8
  import { gridSortedRowIdsSelector } from '../sorting/gridSortingSelector';
@@ -104,14 +104,14 @@ export const useGridRows = (apiRef, props) => {
104
104
  } // we remove duplicate updates. A server can batch updates, and send several updates for the same row in one fn call.
105
105
 
106
106
 
107
- const uniqUpdates = new Map();
107
+ const uniqueUpdates = new Map();
108
108
  updates.forEach(update => {
109
109
  const id = getRowIdFromRowModel(update, props.getRowId, 'A row was provided without id when calling updateRows():');
110
110
 
111
- if (uniqUpdates.has(id)) {
112
- uniqUpdates.set(id, _extends({}, uniqUpdates.get(id), update));
111
+ if (uniqueUpdates.has(id)) {
112
+ uniqueUpdates.set(id, _extends({}, uniqueUpdates.get(id), update));
113
113
  } else {
114
- uniqUpdates.set(id, update);
114
+ uniqueUpdates.set(id, update);
115
115
  }
116
116
  });
117
117
  const deletedRowIds = [];
@@ -123,7 +123,7 @@ export const useGridRows = (apiRef, props) => {
123
123
  idToIdLookup: _extends({}, prevCache.idToIdLookup),
124
124
  ids: [...prevCache.ids]
125
125
  };
126
- uniqUpdates.forEach((partialRow, id) => {
126
+ uniqueUpdates.forEach((partialRow, id) => {
127
127
  // eslint-disable-next-line no-underscore-dangle
128
128
  if (partialRow._action === 'delete') {
129
129
  delete newCache.idRowsLookup[id];
@@ -241,8 +241,64 @@ export const useGridRows = (apiRef, props) => {
241
241
  ids: updatedRows
242
242
  })
243
243
  }));
244
- apiRef.current.applySorting();
244
+ apiRef.current.publishEvent('rowsSet');
245
245
  }, [apiRef, logger]);
246
+ const replaceRows = React.useCallback((firstRowToRender, newRows) => {
247
+ if (props.signature === GridSignature.DataGrid && newRows.length > 1) {
248
+ throw new Error(["MUI: You can't replace rows using `apiRef.current.unstable_replaceRows` on the DataGrid.", 'You need to upgrade to DataGridPro or DataGridPremium component to unlock this feature.'].join('\n'));
249
+ }
250
+
251
+ if (newRows.length === 0) {
252
+ return;
253
+ }
254
+
255
+ const allRows = gridRowIdsSelector(apiRef);
256
+ const updatedRows = [...allRows];
257
+ const idRowsLookup = gridRowsLookupSelector(apiRef);
258
+ const idToIdLookup = gridRowsIdToIdLookupSelector(apiRef);
259
+ const tree = gridRowTreeSelector(apiRef);
260
+
261
+ const updatedIdRowsLookup = _extends({}, idRowsLookup);
262
+
263
+ const updatedIdToIdLookup = _extends({}, idToIdLookup);
264
+
265
+ const updatedTree = _extends({}, tree);
266
+
267
+ const newRowEntries = newRows.map(newRowModel => {
268
+ const rowId = getRowIdFromRowModel(newRowModel, props.getRowId, 'A row was provided without id when calling replaceRows().');
269
+ return {
270
+ id: rowId,
271
+ model: newRowModel
272
+ };
273
+ });
274
+ newRowEntries.forEach((row, index) => {
275
+ const [replacedRowId] = updatedRows.splice(firstRowToRender + index, 1, row.id);
276
+ delete updatedIdRowsLookup[replacedRowId];
277
+ delete updatedIdToIdLookup[replacedRowId];
278
+ delete updatedTree[replacedRowId];
279
+ });
280
+ newRowEntries.forEach(row => {
281
+ const rowTreeNodeConfig = {
282
+ id: row.id,
283
+ parent: null,
284
+ depth: 0,
285
+ groupingKey: null,
286
+ groupingField: null
287
+ };
288
+ updatedIdRowsLookup[row.id] = row.model;
289
+ updatedIdToIdLookup[row.id] = row.id;
290
+ updatedTree[row.id] = rowTreeNodeConfig;
291
+ });
292
+ apiRef.current.setState(state => _extends({}, state, {
293
+ rows: _extends({}, state.rows, {
294
+ idRowsLookup: updatedIdRowsLookup,
295
+ idToIdLookup: updatedIdToIdLookup,
296
+ tree: updatedTree,
297
+ ids: updatedRows
298
+ })
299
+ }));
300
+ apiRef.current.publishEvent('rowsSet');
301
+ }, [apiRef, props.signature, props.getRowId]);
246
302
  const rowApi = {
247
303
  getRow,
248
304
  getRowModels,
@@ -254,7 +310,8 @@ export const useGridRows = (apiRef, props) => {
254
310
  setRowChildrenExpansion,
255
311
  getRowNode,
256
312
  getRowIndexRelativeToVisibleRows,
257
- getRowGroupChildren
313
+ getRowGroupChildren,
314
+ unstable_replaceRows: replaceRows
258
315
  };
259
316
  /**
260
317
  * EVENTS
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
- import { debounce } from '@mui/material/utils';
3
+ import { debounce, capitalize } from '@mui/material/utils';
4
4
  import { useGridVisibleRows } from '../../utils/useGridVisibleRows';
5
5
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
6
6
  import { useGridSelector } from '../../utils/useGridSelector';
@@ -47,7 +47,7 @@ export const useGridRowsMeta = (apiRef, props) => {
47
47
  if (!rowsHeightLookup.current[row.id]) {
48
48
  rowsHeightLookup.current[row.id] = {
49
49
  sizes: {
50
- base: rowHeightFromDensity
50
+ baseCenter: rowHeightFromDensity
51
51
  },
52
52
  isResized: false,
53
53
  autoHeight: false,
@@ -62,7 +62,7 @@ export const useGridRowsMeta = (apiRef, props) => {
62
62
  sizes
63
63
  } = rowsHeightLookup.current[row.id];
64
64
  let baseRowHeight = rowHeightFromDensity;
65
- const existingBaseRowHeight = sizes.base;
65
+ const existingBaseRowHeight = sizes.baseCenter;
66
66
 
67
67
  if (isResized) {
68
68
  // Do not recalculate resized row height and use the value from the lookup
@@ -93,12 +93,19 @@ export const useGridRowsMeta = (apiRef, props) => {
93
93
  }
94
94
  } else {
95
95
  rowsHeightLookup.current[row.id].needsFirstMeasurement = false;
96
- } // We use an object to make simple to check if a height is already added or not
96
+ }
97
97
 
98
+ const existingBaseSizes = Object.entries(sizes).reduce((acc, [key, size]) => {
99
+ if (/^base[A-Z]/.test(key)) {
100
+ acc[key] = size;
101
+ }
98
102
 
99
- const initialHeights = {
100
- base: baseRowHeight
101
- };
103
+ return acc;
104
+ }, {}); // We use an object to make simple to check if a height is already added or not
105
+
106
+ const initialHeights = _extends({}, existingBaseSizes, {
107
+ baseCenter: baseRowHeight
108
+ });
102
109
 
103
110
  if (getRowSpacing) {
104
111
  var _spacing$top, _spacing$bottom;
@@ -121,9 +128,17 @@ export const useGridRowsMeta = (apiRef, props) => {
121
128
  const positions = [];
122
129
  const currentPageTotalHeight = currentPage.rows.reduce((acc, row) => {
123
130
  positions.push(acc);
131
+ let maximumBaseSize = 0;
132
+ let otherSizes = 0;
124
133
  const processedSizes = calculateRowProcessedSizes(row);
125
- const finalRowHeight = Object.values(processedSizes).reduce((acc2, value) => acc2 + value, 0);
126
- return acc + finalRowHeight;
134
+ Object.entries(processedSizes).forEach(([size, value]) => {
135
+ if (/^base[A-Z]/.test(size)) {
136
+ maximumBaseSize = value > maximumBaseSize ? value : maximumBaseSize;
137
+ } else {
138
+ otherSizes += value;
139
+ }
140
+ });
141
+ return acc + maximumBaseSize + otherSizes;
127
142
  }, 0);
128
143
  pinnedRows == null ? void 0 : (_pinnedRows$top = pinnedRows.top) == null ? void 0 : _pinnedRows$top.forEach(row => {
129
144
  calculateRowProcessedSizes(row);
@@ -149,7 +164,7 @@ export const useGridRowsMeta = (apiRef, props) => {
149
164
  }, [apiRef, currentPage.rows, rowHeightFromDensity, getRowHeightProp, getRowSpacing, getEstimatedRowHeight, pinnedRows]);
150
165
  const getRowHeight = React.useCallback(rowId => {
151
166
  const height = rowsHeightLookup.current[rowId];
152
- return height ? height.sizes.base : rowHeightFromDensity;
167
+ return height ? height.sizes.baseCenter : rowHeightFromDensity;
153
168
  }, [rowHeightFromDensity]);
154
169
 
155
170
  const getRowInternalSizes = rowId => {
@@ -159,21 +174,21 @@ export const useGridRowsMeta = (apiRef, props) => {
159
174
  };
160
175
 
161
176
  const setRowHeight = React.useCallback((id, height) => {
162
- rowsHeightLookup.current[id].sizes.base = height;
177
+ rowsHeightLookup.current[id].sizes.baseCenter = height;
163
178
  rowsHeightLookup.current[id].isResized = true;
164
179
  rowsHeightLookup.current[id].needsFirstMeasurement = false;
165
180
  hydrateRowsMeta();
166
181
  }, [hydrateRowsMeta]);
167
182
  const debouncedHydrateRowsMeta = React.useMemo(() => debounce(hydrateRowsMeta), [hydrateRowsMeta]);
168
- const storeMeasuredRowHeight = React.useCallback((id, height) => {
183
+ const storeMeasuredRowHeight = React.useCallback((id, height, position) => {
169
184
  if (!rowsHeightLookup.current[id] || !rowsHeightLookup.current[id].autoHeight) {
170
185
  return;
171
186
  } // Only trigger hydration if the value is different, otherwise we trigger a loop
172
187
 
173
188
 
174
- const needsHydration = rowsHeightLookup.current[id].sizes.base !== height;
189
+ const needsHydration = rowsHeightLookup.current[id].sizes[`base${capitalize(position)}`] !== height;
175
190
  rowsHeightLookup.current[id].needsFirstMeasurement = false;
176
- rowsHeightLookup.current[id].sizes.base = height;
191
+ rowsHeightLookup.current[id].sizes[`base${capitalize(position)}`] = height;
177
192
 
178
193
  if (needsHydration) {
179
194
  debouncedHydrateRowsMeta();
@@ -191,7 +206,11 @@ export const useGridRowsMeta = (apiRef, props) => {
191
206
  if (hasRowWithAutoHeight.current && index > lastMeasuredRowIndex.current) {
192
207
  lastMeasuredRowIndex.current = index;
193
208
  }
194
- }, []); // The effect is used to build the rows meta data - currentPageTotalHeight and positions.
209
+ }, []);
210
+ const resetRowHeights = React.useCallback(() => {
211
+ rowsHeightLookup.current = {};
212
+ hydrateRowsMeta();
213
+ }, [hydrateRowsMeta]); // The effect is used to build the rows meta data - currentPageTotalHeight and positions.
195
214
  // Because of variable row height this is needed for the virtualization
196
215
 
197
216
  React.useEffect(() => {
@@ -205,7 +224,8 @@ export const useGridRowsMeta = (apiRef, props) => {
205
224
  unstable_getRowHeight: getRowHeight,
206
225
  unstable_getRowInternalSizes: getRowInternalSizes,
207
226
  unstable_setRowHeight: setRowHeight,
208
- unstable_storeRowHeightMeasurement: storeMeasuredRowHeight
227
+ unstable_storeRowHeightMeasurement: storeMeasuredRowHeight,
228
+ resetRowHeights
209
229
  };
210
230
  useGridApiMethod(apiRef, rowsMetaApi, 'GridRowsMetaApi');
211
231
  };
@@ -2,5 +2,5 @@ import { GridStateCommunity } from '../../../models/gridStateCommunity';
2
2
  import { GridRowId } from '../../../models/gridRows';
3
3
  export declare const gridSelectionStateSelector: (state: GridStateCommunity) => import("../../..").GridSelectionModel;
4
4
  export declare const selectedGridRowsCountSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, number>;
5
- export declare const selectedGridRowsSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, Map<GridRowId, any>>;
5
+ export declare const selectedGridRowsSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, Map<GridRowId, import("../../../models/gridRows").GridValidRowModel>>;
6
6
  export declare const selectedIdsLookupSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, Record<GridRowId, GridRowId>>;
@@ -16,7 +16,7 @@ export declare const gridSortedRowIdsSelector: import("../../../utils/createSele
16
16
  */
17
17
  export declare const gridSortedRowEntriesSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, {
18
18
  id: import("../../..").GridRowId;
19
- model: any;
19
+ model: import("../../..").GridValidRowModel;
20
20
  }[]>;
21
21
  /**
22
22
  * Get the current sorting model.
@@ -25,11 +25,11 @@ export declare const useGridVirtualScroller: (props: UseGridVirtualScrollerProps
25
25
  updateRenderZonePosition: (nextRenderContext: GridRenderContext) => void;
26
26
  getRows: (params?: {
27
27
  renderContext: GridRenderContext | null;
28
+ position?: string | undefined;
28
29
  minFirstColumn?: number | undefined;
29
30
  maxLastColumn?: number | undefined;
30
31
  availableSpace?: number | null | undefined;
31
- ignoreAutoHeight?: boolean | undefined;
32
- rows?: GridRowEntry<any>[] | undefined;
32
+ rows?: GridRowEntry<import("../../../models").GridValidRowModel>[] | undefined;
33
33
  rowIndexOffset?: number | undefined;
34
34
  }) => JSX.Element[] | null;
35
35
  getRootProps: ({ style, ...other }?: {
@@ -215,8 +215,19 @@ export const useGridVirtualScroller = props => {
215
215
  }, [renderContext, updateRenderZonePosition]);
216
216
  const updateRenderContext = React.useCallback(nextRenderContext => {
217
217
  setRenderContext(nextRenderContext);
218
+ const [firstRowToRender, lastRowToRender] = getRenderableIndexes({
219
+ firstIndex: nextRenderContext.firstRowIndex,
220
+ lastIndex: nextRenderContext.lastRowIndex,
221
+ minFirstIndex: 0,
222
+ maxLastIndex: currentPage.rows.length,
223
+ buffer: rootProps.rowBuffer
224
+ });
225
+ apiRef.current.publishEvent('renderedRowsIntervalChange', {
226
+ firstRowToRender,
227
+ lastRowToRender
228
+ });
218
229
  prevRenderContext.current = nextRenderContext;
219
- }, [setRenderContext, prevRenderContext]);
230
+ }, [apiRef, setRenderContext, prevRenderContext, currentPage.rows.length, rootProps.rowBuffer]);
220
231
  React.useEffect(() => {
221
232
  if (containerWidth == null) {
222
233
  return;
@@ -287,8 +298,8 @@ export const useGridVirtualScroller = props => {
287
298
  minFirstColumn = renderZoneMinColumnIndex,
288
299
  maxLastColumn = renderZoneMaxColumnIndex,
289
300
  availableSpace = containerWidth,
290
- ignoreAutoHeight,
291
- rowIndexOffset = 0
301
+ rowIndexOffset = 0,
302
+ position = 'center'
292
303
  } = params;
293
304
 
294
305
  if (!nextRenderContext || availableSpace == null) {
@@ -358,7 +369,7 @@ export const useGridVirtualScroller = props => {
358
369
  model
359
370
  } = renderedRows[i];
360
371
  const lastVisibleRowIndex = firstRowToRender + i === currentPage.rows.length - 1;
361
- const baseRowHeight = !apiRef.current.unstable_rowHasAutoHeight(id) || ignoreAutoHeight ? apiRef.current.unstable_getRowHeight(id) : 'auto';
372
+ const baseRowHeight = !apiRef.current.unstable_rowHasAutoHeight(id) ? apiRef.current.unstable_getRowHeight(id) : 'auto';
362
373
  let isSelected;
363
374
 
364
375
  if (selectedRowsLookup[id] == null) {
@@ -384,7 +395,8 @@ export const useGridVirtualScroller = props => {
384
395
  selected: isSelected,
385
396
  index: rowIndexOffset + ((currentPage == null ? void 0 : (_currentPage$range5 = currentPage.range) == null ? void 0 : _currentPage$range5.firstRowIndex) || 0) + firstRowToRender + i,
386
397
  containerWidth: availableSpace,
387
- isLastVisible: lastVisibleRowIndex
398
+ isLastVisible: lastVisibleRowIndex,
399
+ position: position
388
400
  }, typeof getRowProps === 'function' ? getRowProps(id, model) : {}, (_rootProps$components = rootProps.componentsProps) == null ? void 0 : _rootProps$components.row), id));
389
401
  }
390
402
 
@@ -1,3 +1,3 @@
1
1
  import * as React from 'react';
2
2
  import { GridApiCommon } from '../../models';
3
- export declare const useGridNativeEventListener: <Api extends GridApiCommon, E extends Event>(apiRef: React.MutableRefObject<Api>, ref: React.MutableRefObject<HTMLDivElement | null> | (() => Element | undefined | null), eventName: string, handler?: ((event: E) => any) | undefined, options?: AddEventListenerOptions) => void;
3
+ export declare const useGridNativeEventListener: <Api extends GridApiCommon, K extends keyof HTMLElementEventMap>(apiRef: React.MutableRefObject<Api>, ref: React.MutableRefObject<HTMLDivElement | null> | (() => HTMLElement | undefined | null), eventName: K, handler?: ((event: HTMLElementEventMap[K]) => any) | undefined, options?: AddEventListenerOptions) => void;
@@ -5,8 +5,8 @@ export const useGridNativeEventListener = (apiRef, ref, eventName, handler, opti
5
5
  const logger = useGridLogger(apiRef, 'useNativeEventListener');
6
6
  const [added, setAdded] = React.useState(false);
7
7
  const handlerRef = React.useRef(handler);
8
- const wrapHandler = React.useCallback(args => {
9
- return handlerRef.current && handlerRef.current(args);
8
+ const wrapHandler = React.useCallback(event => {
9
+ return handlerRef.current && handlerRef.current(event);
10
10
  }, []);
11
11
  React.useEffect(() => {
12
12
  handlerRef.current = handler;
@@ -2,7 +2,7 @@ import * as React from 'react';
2
2
  import { DataGridProcessedProps } from '../../models/props/DataGridProps';
3
3
  import type { GridApiCommon, GridRowEntry } from '../../models';
4
4
  export declare const getVisibleRows: <Api extends GridApiCommon>(apiRef: React.MutableRefObject<Api>, props: Pick<DataGridProcessedProps, 'pagination' | 'paginationMode'>) => {
5
- rows: GridRowEntry<any>[];
5
+ rows: GridRowEntry<import("../../models").GridValidRowModel>[];
6
6
  range: {
7
7
  firstRowIndex: number;
8
8
  lastRowIndex: number;
@@ -16,7 +16,7 @@ export declare const getVisibleRows: <Api extends GridApiCommon>(apiRef: React.M
16
16
  * - If the row tree is flat, it only contains up to `state.pageSize` rows.
17
17
  */
18
18
  export declare const useGridVisibleRows: <Api extends GridApiCommon>(apiRef: React.MutableRefObject<Api>, props: Pick<DataGridProcessedProps, 'pagination' | 'paginationMode'>) => {
19
- rows: GridRowEntry<any>[];
19
+ rows: GridRowEntry<import("../../models").GridValidRowModel>[];
20
20
  range: {
21
21
  firstRowIndex: number;
22
22
  lastRowIndex: number;
package/index.js CHANGED
@@ -1,4 +1,4 @@
1
- /** @license MUI v5.15.2
1
+ /** @license MUI v5.17.0
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.
@@ -13,6 +13,8 @@ export { useGridColumnHeaders } from '../hooks/features/columnHeaders/useGridCol
13
13
  export { useGridColumnMenu, columnMenuStateInitializer, } from '../hooks/features/columnMenu/useGridColumnMenu';
14
14
  export { useGridColumns, columnsStateInitializer } from '../hooks/features/columns/useGridColumns';
15
15
  export { useGridColumnSpanning } from '../hooks/features/columns/useGridColumnSpanning';
16
+ export { useGridColumnGrouping, columnGroupsStateInitializer, } from '../hooks/features/columnGrouping/useGridColumnGrouping';
17
+ export { useGridColumnGroupingPreProcessors } from '../hooks/features/columnGrouping/useGridColumnGroupingPreProcessors';
16
18
  export type { GridColumnRawLookup, GridColumnsRawState, GridHydrateColumnsValue, } from '../hooks/features/columns/gridColumnsInterfaces';
17
19
  export { useGridDensity, densityStateInitializer } from '../hooks/features/density/useGridDensity';
18
20
  export { useGridCsvExport } from '../hooks/features/export/useGridCsvExport';
@@ -11,6 +11,8 @@ export { useGridColumnHeaders } from '../hooks/features/columnHeaders/useGridCol
11
11
  export { useGridColumnMenu, columnMenuStateInitializer } from '../hooks/features/columnMenu/useGridColumnMenu';
12
12
  export { useGridColumns, columnsStateInitializer } from '../hooks/features/columns/useGridColumns';
13
13
  export { useGridColumnSpanning } from '../hooks/features/columns/useGridColumnSpanning';
14
+ export { useGridColumnGrouping, columnGroupsStateInitializer } from '../hooks/features/columnGrouping/useGridColumnGrouping';
15
+ export { useGridColumnGroupingPreProcessors } from '../hooks/features/columnGrouping/useGridColumnGroupingPreProcessors';
14
16
  export { useGridDensity, densityStateInitializer } from '../hooks/features/density/useGridDensity';
15
17
  export { useGridCsvExport } from '../hooks/features/export/useGridCsvExport';
16
18
  export { useGridPrintExport } from '../hooks/features/export/useGridPrintExport';
@@ -79,6 +79,7 @@ DataGridRaw.propTypes = {
79
79
  * @default 3
80
80
  */
81
81
  columnBuffer: PropTypes.number,
82
+ columnGroupingModel: PropTypes.arrayOf(PropTypes.object),
82
83
 
83
84
  /**
84
85
  * Set of columns of type [[GridColumns]].
@@ -196,6 +197,7 @@ DataGridRaw.propTypes = {
196
197
  * For each feature, if the flag is not explicitly set to `true`, the feature will be fully disabled and any property / method call will not have any effect.
197
198
  */
198
199
  experimentalFeatures: PropTypes.shape({
200
+ columnGrouping: PropTypes.bool,
199
201
  newEditingApi: PropTypes.bool,
200
202
  preventCommitWhileValidating: PropTypes.bool,
201
203
  warnIfFocusStateIsNotSynced: PropTypes.bool
@@ -349,7 +351,7 @@ DataGridRaw.propTypes = {
349
351
 
350
352
  /**
351
353
  * Allows to pass the logging level or false to turn off logging.
352
- * @default "debug"
354
+ * @default "error" ("warn" in dev mode)
353
355
  */
354
356
  logLevel: PropTypes.oneOf(['debug', 'error', 'info', 'warn', false]),
355
357