@mui/x-data-grid 5.11.1 → 5.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (331) hide show
  1. package/CHANGELOG.md +199 -20
  2. package/DataGrid/DataGrid.js +26 -1
  3. package/README.md +2 -2
  4. package/colDef/gridCheckboxSelectionColDef.d.ts +1 -0
  5. package/colDef/gridCheckboxSelectionColDef.js +2 -1
  6. package/colDef/gridDateOperators.d.ts +1 -1
  7. package/colDef/gridNumericColDef.js +1 -1
  8. package/components/GridRow.d.ts +1 -1
  9. package/components/GridRow.js +51 -12
  10. package/components/cell/GridActionsCellItem.d.ts +1 -1
  11. package/components/cell/GridCell.d.ts +2 -1
  12. package/components/cell/GridCell.js +12 -7
  13. package/components/columnHeaders/GridColumnHeaderItem.js +9 -6
  14. package/components/columnSelection/GridCellCheckboxRenderer.js +0 -1
  15. package/components/columnSelection/GridHeaderCheckbox.js +0 -1
  16. package/components/containers/GridRootStyles.js +8 -3
  17. package/components/menu/GridMenu.js +9 -2
  18. package/components/panel/GridColumnsPanel.js +12 -7
  19. package/components/panel/GridPanelWrapper.d.ts +1 -1
  20. package/components/panel/GridPanelWrapper.js +3 -3
  21. package/components/panel/filterPanel/GridFilterForm.d.ts +61 -4
  22. package/components/panel/filterPanel/GridFilterForm.js +88 -8
  23. package/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +0 -1
  24. package/components/panel/filterPanel/GridFilterPanel.d.ts +8 -5
  25. package/components/panel/filterPanel/GridFilterPanel.js +26 -11
  26. package/components/toolbar/GridToolbarColumnsButton.js +0 -1
  27. package/components/toolbar/GridToolbarDensitySelector.js +0 -1
  28. package/components/toolbar/GridToolbarExportContainer.js +0 -1
  29. package/components/toolbar/GridToolbarFilterButton.d.ts +1 -1
  30. package/components/toolbar/GridToolbarFilterButton.js +0 -1
  31. package/components/toolbar/GridToolbarQuickFilter.d.ts +7 -0
  32. package/components/toolbar/GridToolbarQuickFilter.js +57 -4
  33. package/constants/defaultGridSlotsComponents.js +2 -1
  34. package/constants/gridClasses.d.ts +4 -0
  35. package/constants/gridClasses.js +1 -1
  36. package/constants/localeTextConstants.js +1 -0
  37. package/hooks/core/useGridStateInitialization.js +19 -6
  38. package/hooks/features/columnMenu/useGridColumnMenu.js +22 -0
  39. package/hooks/features/columns/gridColumnsInterfaces.d.ts +3 -0
  40. package/hooks/features/columns/useGridColumnSpanning.d.ts +1 -1
  41. package/hooks/features/columns/useGridColumnSpanning.js +1 -1
  42. package/hooks/features/columns/useGridColumns.d.ts +1 -1
  43. package/hooks/features/columns/useGridColumns.js +13 -15
  44. package/hooks/features/dimensions/gridDimensionsApi.d.ts +5 -0
  45. package/hooks/features/dimensions/useGridDimensions.js +9 -8
  46. package/hooks/features/editRows/useGridCellEditing.new.js +11 -4
  47. package/hooks/features/editRows/useGridEditing.old.js +1 -1
  48. package/hooks/features/editRows/useGridRowEditing.new.js +10 -4
  49. package/hooks/features/events/useGridEvents.d.ts +1 -1
  50. package/hooks/features/events/useGridEvents.js +2 -0
  51. package/hooks/features/filter/gridFilterSelector.d.ts +5 -0
  52. package/hooks/features/filter/gridFilterSelector.js +6 -0
  53. package/hooks/features/filter/gridFilterState.d.ts +1 -1
  54. package/hooks/features/filter/gridFilterUtils.d.ts +10 -2
  55. package/hooks/features/filter/gridFilterUtils.js +3 -6
  56. package/hooks/features/filter/useGridFilter.d.ts +1 -1
  57. package/hooks/features/filter/useGridFilter.js +29 -12
  58. package/hooks/features/pagination/useGridPage.js +1 -1
  59. package/hooks/features/pagination/useGridPageSize.js +1 -1
  60. package/hooks/features/rows/useGridRowsMeta.d.ts +1 -1
  61. package/hooks/features/rows/useGridRowsMeta.js +133 -67
  62. package/hooks/features/selection/useGridSelection.js +1 -1
  63. package/hooks/features/selection/useGridSelectionPreProcessors.js +8 -6
  64. package/hooks/features/sorting/useGridSorting.d.ts +1 -1
  65. package/hooks/features/sorting/useGridSorting.js +1 -1
  66. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +2 -1
  67. package/hooks/features/virtualization/useGridVirtualScroller.js +65 -11
  68. package/index.js +1 -1
  69. package/internals/index.d.ts +1 -0
  70. package/legacy/DataGrid/DataGrid.js +26 -1
  71. package/legacy/colDef/gridCheckboxSelectionColDef.js +2 -1
  72. package/legacy/colDef/gridNumericColDef.js +1 -1
  73. package/legacy/components/GridRow.js +56 -12
  74. package/legacy/components/cell/GridCell.js +12 -7
  75. package/legacy/components/columnHeaders/GridColumnHeaderItem.js +11 -6
  76. package/legacy/components/columnSelection/GridCellCheckboxRenderer.js +0 -1
  77. package/legacy/components/columnSelection/GridHeaderCheckbox.js +0 -1
  78. package/legacy/components/containers/GridRootStyles.js +10 -7
  79. package/legacy/components/menu/GridMenu.js +9 -2
  80. package/legacy/components/panel/GridColumnsPanel.js +14 -7
  81. package/legacy/components/panel/GridPanelWrapper.js +3 -3
  82. package/legacy/components/panel/filterPanel/GridFilterForm.js +89 -8
  83. package/legacy/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +0 -1
  84. package/legacy/components/panel/filterPanel/GridFilterPanel.js +28 -12
  85. package/legacy/components/toolbar/GridToolbarColumnsButton.js +0 -1
  86. package/legacy/components/toolbar/GridToolbarDensitySelector.js +0 -1
  87. package/legacy/components/toolbar/GridToolbarExportContainer.js +0 -1
  88. package/legacy/components/toolbar/GridToolbarFilterButton.js +0 -1
  89. package/legacy/components/toolbar/GridToolbarQuickFilter.js +67 -6
  90. package/legacy/constants/defaultGridSlotsComponents.js +2 -1
  91. package/legacy/constants/gridClasses.js +1 -1
  92. package/legacy/constants/localeTextConstants.js +1 -0
  93. package/legacy/hooks/core/useGridStateInitialization.js +18 -6
  94. package/legacy/hooks/features/columnMenu/useGridColumnMenu.js +22 -0
  95. package/legacy/hooks/features/columns/useGridColumnSpanning.js +1 -1
  96. package/legacy/hooks/features/columns/useGridColumns.js +13 -15
  97. package/legacy/hooks/features/dimensions/useGridDimensions.js +9 -8
  98. package/legacy/hooks/features/editRows/useGridCellEditing.new.js +14 -7
  99. package/legacy/hooks/features/editRows/useGridEditing.old.js +1 -1
  100. package/legacy/hooks/features/editRows/useGridRowEditing.new.js +10 -4
  101. package/legacy/hooks/features/events/useGridEvents.js +2 -0
  102. package/legacy/hooks/features/filter/gridFilterSelector.js +8 -0
  103. package/legacy/hooks/features/filter/gridFilterUtils.js +4 -7
  104. package/legacy/hooks/features/filter/useGridFilter.js +33 -12
  105. package/legacy/hooks/features/pagination/useGridPage.js +1 -1
  106. package/legacy/hooks/features/pagination/useGridPageSize.js +1 -1
  107. package/legacy/hooks/features/rows/useGridRowsMeta.js +133 -66
  108. package/legacy/hooks/features/selection/useGridSelection.js +1 -1
  109. package/legacy/hooks/features/selection/useGridSelectionPreProcessors.js +8 -6
  110. package/legacy/hooks/features/sorting/useGridSorting.js +1 -1
  111. package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +84 -26
  112. package/legacy/index.js +1 -1
  113. package/legacy/locales/arSD.js +1 -0
  114. package/legacy/locales/bgBG.js +1 -0
  115. package/legacy/locales/csCZ.js +1 -0
  116. package/legacy/locales/daDK.js +1 -0
  117. package/legacy/locales/deDE.js +1 -0
  118. package/legacy/locales/elGR.js +1 -0
  119. package/legacy/locales/esES.js +1 -0
  120. package/legacy/locales/faIR.js +1 -0
  121. package/legacy/locales/fiFI.js +1 -0
  122. package/legacy/locales/frFR.js +1 -0
  123. package/legacy/locales/heIL.js +10 -9
  124. package/legacy/locales/huHU.js +1 -0
  125. package/legacy/locales/itIT.js +1 -0
  126. package/legacy/locales/jaJP.js +29 -24
  127. package/legacy/locales/koKR.js +1 -0
  128. package/legacy/locales/nbNO.js +128 -0
  129. package/legacy/locales/nlNL.js +1 -0
  130. package/legacy/locales/plPL.js +1 -0
  131. package/legacy/locales/ptBR.js +1 -0
  132. package/legacy/locales/ruRU.js +7 -6
  133. package/legacy/locales/skSK.js +1 -0
  134. package/legacy/locales/trTR.js +8 -7
  135. package/legacy/locales/ukUA.js +1 -0
  136. package/legacy/locales/viVN.js +1 -0
  137. package/legacy/locales/zhCN.js +1 -0
  138. package/legacy/models/events/gridEvents.js +2 -0
  139. package/legacy/models/gridApiCaches.js +1 -0
  140. package/legacy/models/params/gridMenuParams.js +1 -0
  141. package/legacy/models/params/index.js +2 -1
  142. package/locales/arSD.js +1 -0
  143. package/locales/bgBG.js +1 -0
  144. package/locales/csCZ.js +1 -0
  145. package/locales/daDK.js +1 -0
  146. package/locales/deDE.js +1 -0
  147. package/locales/elGR.js +1 -0
  148. package/locales/esES.js +1 -0
  149. package/locales/faIR.js +1 -0
  150. package/locales/fiFI.js +1 -0
  151. package/locales/frFR.js +1 -0
  152. package/locales/heIL.js +10 -9
  153. package/locales/huHU.js +1 -0
  154. package/locales/itIT.js +1 -0
  155. package/locales/jaJP.js +25 -24
  156. package/locales/koKR.js +1 -0
  157. package/locales/nbNO.d.ts +2 -0
  158. package/locales/nbNO.js +116 -0
  159. package/locales/nlNL.js +1 -0
  160. package/locales/plPL.js +1 -0
  161. package/locales/ptBR.js +1 -0
  162. package/locales/ruRU.js +7 -6
  163. package/locales/skSK.js +1 -0
  164. package/locales/trTR.js +8 -7
  165. package/locales/ukUA.js +1 -0
  166. package/locales/viVN.js +1 -0
  167. package/locales/zhCN.js +1 -0
  168. package/models/api/gridCallbackDetails.d.ts +6 -1
  169. package/models/api/gridCoreApi.d.ts +2 -6
  170. package/models/api/gridFilterApi.d.ts +8 -1
  171. package/models/api/gridLocaleTextApi.d.ts +1 -0
  172. package/models/api/gridRowsMetaApi.d.ts +24 -0
  173. package/models/api/gridStateApi.d.ts +14 -3
  174. package/models/colDef/gridColDef.d.ts +4 -4
  175. package/models/events/gridEventLookup.d.ts +16 -1
  176. package/models/events/gridEvents.d.ts +3 -1
  177. package/models/events/gridEvents.js +2 -0
  178. package/models/gridApiCaches.d.ts +6 -0
  179. package/models/gridApiCaches.js +1 -0
  180. package/models/gridIconSlotsComponent.d.ts +5 -0
  181. package/models/params/gridMenuParams.d.ts +7 -0
  182. package/models/params/gridMenuParams.js +1 -0
  183. package/models/params/gridRowParams.d.ts +1 -1
  184. package/models/params/index.d.ts +1 -0
  185. package/models/params/index.js +2 -1
  186. package/models/props/DataGridProps.d.ts +24 -2
  187. package/modern/DataGrid/DataGrid.js +26 -1
  188. package/modern/colDef/gridCheckboxSelectionColDef.js +2 -1
  189. package/modern/colDef/gridNumericColDef.js +1 -1
  190. package/modern/components/GridRow.js +51 -12
  191. package/modern/components/cell/GridCell.js +12 -7
  192. package/modern/components/columnHeaders/GridColumnHeaderItem.js +9 -6
  193. package/modern/components/columnSelection/GridCellCheckboxRenderer.js +0 -1
  194. package/modern/components/columnSelection/GridHeaderCheckbox.js +0 -1
  195. package/modern/components/containers/GridRootStyles.js +8 -3
  196. package/modern/components/menu/GridMenu.js +9 -2
  197. package/modern/components/panel/GridColumnsPanel.js +12 -7
  198. package/modern/components/panel/GridPanelWrapper.js +3 -3
  199. package/modern/components/panel/filterPanel/GridFilterForm.js +88 -8
  200. package/modern/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +0 -1
  201. package/modern/components/panel/filterPanel/GridFilterPanel.js +26 -11
  202. package/modern/components/toolbar/GridToolbarColumnsButton.js +0 -1
  203. package/modern/components/toolbar/GridToolbarDensitySelector.js +0 -1
  204. package/modern/components/toolbar/GridToolbarExportContainer.js +0 -1
  205. package/modern/components/toolbar/GridToolbarFilterButton.js +0 -1
  206. package/modern/components/toolbar/GridToolbarQuickFilter.js +57 -4
  207. package/modern/constants/defaultGridSlotsComponents.js +2 -1
  208. package/modern/constants/gridClasses.js +1 -1
  209. package/modern/constants/localeTextConstants.js +1 -0
  210. package/modern/hooks/core/useGridStateInitialization.js +19 -6
  211. package/modern/hooks/features/columnMenu/useGridColumnMenu.js +22 -0
  212. package/modern/hooks/features/columns/useGridColumnSpanning.js +1 -1
  213. package/modern/hooks/features/columns/useGridColumns.js +12 -14
  214. package/modern/hooks/features/dimensions/useGridDimensions.js +9 -8
  215. package/modern/hooks/features/editRows/useGridCellEditing.new.js +10 -3
  216. package/modern/hooks/features/editRows/useGridEditing.old.js +1 -1
  217. package/modern/hooks/features/editRows/useGridRowEditing.new.js +9 -3
  218. package/modern/hooks/features/events/useGridEvents.js +2 -0
  219. package/modern/hooks/features/filter/gridFilterSelector.js +6 -0
  220. package/modern/hooks/features/filter/gridFilterUtils.js +3 -6
  221. package/modern/hooks/features/filter/useGridFilter.js +29 -12
  222. package/modern/hooks/features/pagination/useGridPage.js +1 -1
  223. package/modern/hooks/features/pagination/useGridPageSize.js +1 -1
  224. package/modern/hooks/features/rows/useGridRowsMeta.js +129 -59
  225. package/modern/hooks/features/selection/useGridSelection.js +1 -1
  226. package/modern/hooks/features/selection/useGridSelectionPreProcessors.js +8 -6
  227. package/modern/hooks/features/sorting/useGridSorting.js +1 -1
  228. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +65 -11
  229. package/modern/index.js +1 -1
  230. package/modern/locales/arSD.js +1 -0
  231. package/modern/locales/bgBG.js +1 -0
  232. package/modern/locales/csCZ.js +1 -0
  233. package/modern/locales/daDK.js +1 -0
  234. package/modern/locales/deDE.js +1 -0
  235. package/modern/locales/elGR.js +1 -0
  236. package/modern/locales/esES.js +1 -0
  237. package/modern/locales/faIR.js +1 -0
  238. package/modern/locales/fiFI.js +1 -0
  239. package/modern/locales/frFR.js +1 -0
  240. package/modern/locales/heIL.js +10 -9
  241. package/modern/locales/huHU.js +1 -0
  242. package/modern/locales/itIT.js +1 -0
  243. package/modern/locales/jaJP.js +25 -24
  244. package/modern/locales/koKR.js +1 -0
  245. package/modern/locales/nbNO.js +116 -0
  246. package/modern/locales/nlNL.js +1 -0
  247. package/modern/locales/plPL.js +1 -0
  248. package/modern/locales/ptBR.js +1 -0
  249. package/modern/locales/ruRU.js +7 -6
  250. package/modern/locales/skSK.js +1 -0
  251. package/modern/locales/trTR.js +8 -7
  252. package/modern/locales/ukUA.js +1 -0
  253. package/modern/locales/viVN.js +1 -0
  254. package/modern/locales/zhCN.js +1 -0
  255. package/modern/models/events/gridEvents.js +2 -0
  256. package/modern/models/gridApiCaches.js +1 -0
  257. package/modern/models/params/gridMenuParams.js +1 -0
  258. package/modern/models/params/index.js +2 -1
  259. package/node/DataGrid/DataGrid.js +26 -1
  260. package/node/colDef/gridCheckboxSelectionColDef.js +4 -2
  261. package/node/colDef/gridNumericColDef.js +1 -1
  262. package/node/components/GridRow.js +53 -12
  263. package/node/components/cell/GridCell.js +12 -7
  264. package/node/components/columnHeaders/GridColumnHeaderItem.js +9 -6
  265. package/node/components/columnSelection/GridCellCheckboxRenderer.js +0 -1
  266. package/node/components/columnSelection/GridHeaderCheckbox.js +0 -1
  267. package/node/components/containers/GridRootStyles.js +8 -3
  268. package/node/components/menu/GridMenu.js +10 -2
  269. package/node/components/panel/GridColumnsPanel.js +12 -7
  270. package/node/components/panel/GridPanelWrapper.js +5 -3
  271. package/node/components/panel/filterPanel/GridFilterForm.js +91 -9
  272. package/node/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +0 -1
  273. package/node/components/panel/filterPanel/GridFilterPanel.js +28 -11
  274. package/node/components/toolbar/GridToolbarColumnsButton.js +0 -1
  275. package/node/components/toolbar/GridToolbarDensitySelector.js +0 -1
  276. package/node/components/toolbar/GridToolbarExportContainer.js +0 -1
  277. package/node/components/toolbar/GridToolbarFilterButton.js +0 -1
  278. package/node/components/toolbar/GridToolbarQuickFilter.js +61 -4
  279. package/node/constants/defaultGridSlotsComponents.js +2 -1
  280. package/node/constants/gridClasses.js +1 -1
  281. package/node/constants/localeTextConstants.js +1 -0
  282. package/node/hooks/core/useGridStateInitialization.js +19 -6
  283. package/node/hooks/features/columnMenu/useGridColumnMenu.js +23 -0
  284. package/node/hooks/features/columns/useGridColumnSpanning.js +11 -16
  285. package/node/hooks/features/columns/useGridColumns.js +13 -15
  286. package/node/hooks/features/dimensions/useGridDimensions.js +9 -8
  287. package/node/hooks/features/editRows/useGridCellEditing.new.js +11 -4
  288. package/node/hooks/features/editRows/useGridEditing.old.js +1 -1
  289. package/node/hooks/features/editRows/useGridRowEditing.new.js +10 -4
  290. package/node/hooks/features/events/useGridEvents.js +2 -0
  291. package/node/hooks/features/filter/gridFilterSelector.js +9 -2
  292. package/node/hooks/features/filter/gridFilterUtils.js +4 -5
  293. package/node/hooks/features/filter/useGridFilter.js +28 -11
  294. package/node/hooks/features/pagination/useGridPage.js +1 -1
  295. package/node/hooks/features/pagination/useGridPageSize.js +1 -1
  296. package/node/hooks/features/rows/useGridRowsMeta.js +136 -69
  297. package/node/hooks/features/selection/useGridSelection.js +1 -1
  298. package/node/hooks/features/selection/useGridSelectionPreProcessors.js +7 -5
  299. package/node/hooks/features/sorting/useGridSorting.js +1 -1
  300. package/node/hooks/features/virtualization/useGridVirtualScroller.js +65 -12
  301. package/node/index.js +1 -1
  302. package/node/locales/arSD.js +1 -0
  303. package/node/locales/bgBG.js +1 -0
  304. package/node/locales/csCZ.js +1 -0
  305. package/node/locales/daDK.js +1 -0
  306. package/node/locales/deDE.js +1 -0
  307. package/node/locales/elGR.js +1 -0
  308. package/node/locales/esES.js +1 -0
  309. package/node/locales/faIR.js +1 -0
  310. package/node/locales/fiFI.js +1 -0
  311. package/node/locales/frFR.js +1 -0
  312. package/node/locales/heIL.js +10 -9
  313. package/node/locales/huHU.js +1 -0
  314. package/node/locales/itIT.js +1 -0
  315. package/node/locales/jaJP.js +25 -24
  316. package/node/locales/koKR.js +1 -0
  317. package/node/locales/nbNO.js +126 -0
  318. package/node/locales/nlNL.js +1 -0
  319. package/node/locales/plPL.js +1 -0
  320. package/node/locales/ptBR.js +1 -0
  321. package/node/locales/ruRU.js +7 -6
  322. package/node/locales/skSK.js +1 -0
  323. package/node/locales/trTR.js +8 -7
  324. package/node/locales/ukUA.js +1 -0
  325. package/node/locales/viVN.js +1 -0
  326. package/node/locales/zhCN.js +1 -0
  327. package/node/models/events/gridEvents.js +2 -0
  328. package/node/models/gridApiCaches.js +5 -0
  329. package/node/models/params/gridMenuParams.js +5 -0
  330. package/node/models/params/index.js +13 -0
  331. package/package.json +6 -5
@@ -36,6 +36,9 @@ const columnsStateInitializer = (state, props, apiRef) => {
36
36
  var _props$initialState, _props$initialState$c, _props$initialState2, _ref, _props$columnVisibili, _props$initialState3, _props$initialState3$;
37
37
 
38
38
  const isUsingColumnVisibilityModel = !!props.columnVisibilityModel || !!((_props$initialState = props.initialState) != null && (_props$initialState$c = _props$initialState.columns) != null && _props$initialState$c.columnVisibilityModel);
39
+ apiRef.current.unstable_caches.columns = {
40
+ isUsingColumnVisibilityModel
41
+ };
39
42
  const columnsTypes = (0, _gridColumnsUtils.computeColumnTypes)(props.columnTypes);
40
43
  const columnsState = (0, _gridColumnsUtils.createColumnsState)({
41
44
  apiRef,
@@ -60,19 +63,13 @@ const columnsStateInitializer = (state, props, apiRef) => {
60
63
  exports.columnsStateInitializer = columnsStateInitializer;
61
64
 
62
65
  function useGridColumns(apiRef, props) {
63
- var _props$initialState4, _props$initialState4$, _props$componentsProp2;
66
+ var _props$componentsProp2;
64
67
 
65
68
  const logger = (0, _useGridLogger.useGridLogger)(apiRef, 'useGridColumns');
66
69
  const columnTypes = React.useMemo(() => (0, _gridColumnsUtils.computeColumnTypes)(props.columnTypes), [props.columnTypes]);
67
70
  const previousColumnsProp = React.useRef(props.columns);
68
71
  const previousColumnTypesProp = React.useRef(columnTypes);
69
- /**
70
- * If `initialState.columns.columnVisibilityModel` or `columnVisibilityModel` was defined during the 1st render, we are directly updating the model
71
- * If not, we keep the old behavior and update the `GridColDef.hide` option (which will update the state model through the `GridColDef.hide` => `columnVisibilityModel` sync in `createColumnsState`
72
- */
73
-
74
- const isUsingColumnVisibilityModel = React.useRef(!!props.columnVisibilityModel || !!((_props$initialState4 = props.initialState) != null && (_props$initialState4$ = _props$initialState4.columns) != null && _props$initialState4$.columnVisibilityModel));
75
- apiRef.current.unstable_updateControlState({
72
+ apiRef.current.unstable_registerControlState({
76
73
  stateId: 'visibleColumns',
77
74
  propModel: props.columnVisibilityModel,
78
75
  propOnChange: props.onColumnVisibilityModelChange,
@@ -135,7 +132,7 @@ function useGridColumns(apiRef, props) {
135
132
  // We keep updating the `hide` option of `GridColDef` when not controlling the model to avoid any breaking change.
136
133
  // `updateColumns` take care of updating the model itself if needs be.
137
134
  // TODO v6: stop using the `hide` field even when the model is not defined
138
- if (isUsingColumnVisibilityModel.current) {
135
+ if (apiRef.current.unstable_caches.columns.isUsingColumnVisibilityModel) {
139
136
  var _columnVisibilityMode;
140
137
 
141
138
  const columnVisibilityModel = (0, _gridColumnsSelector.gridColumnVisibilityModelSelector)(apiRef);
@@ -171,7 +168,8 @@ function useGridColumns(apiRef, props) {
171
168
 
172
169
  logger.debug(`Moving column ${field} to index ${targetIndexPosition}`);
173
170
  const updatedColumns = [...allColumns];
174
- updatedColumns.splice(targetIndexPosition, 0, updatedColumns.splice(oldIndexPosition, 1)[0]);
171
+ const fieldRemoved = updatedColumns.splice(oldIndexPosition, 1)[0];
172
+ updatedColumns.splice(targetIndexPosition, 0, fieldRemoved);
175
173
  setGridColumnsState((0, _extends2.default)({}, (0, _gridColumnsSelector.gridColumnsSelector)(apiRef.current.state), {
176
174
  all: updatedColumns
177
175
  }));
@@ -219,7 +217,7 @@ function useGridColumns(apiRef, props) {
219
217
  const stateExportPreProcessing = React.useCallback(prevState => {
220
218
  const columnsStateToExport = {};
221
219
 
222
- if (isUsingColumnVisibilityModel.current) {
220
+ if (apiRef.current.unstable_caches.columns.isUsingColumnVisibilityModel) {
223
221
  const columnVisibilityModelToExport = (0, _gridColumnsSelector.gridColumnVisibilityModelSelector)(apiRef);
224
222
  const hasHiddenColumns = Object.values(columnVisibilityModelToExport).some(value => value === false);
225
223
 
@@ -260,7 +258,7 @@ function useGridColumns(apiRef, props) {
260
258
  const stateRestorePreProcessing = React.useCallback((params, context) => {
261
259
  var _context$stateToResto;
262
260
 
263
- const columnVisibilityModelToImport = isUsingColumnVisibilityModel.current ? (_context$stateToResto = context.stateToRestore.columns) == null ? void 0 : _context$stateToResto.columnVisibilityModel : undefined;
261
+ const columnVisibilityModelToImport = apiRef.current.unstable_caches.columns.isUsingColumnVisibilityModel ? (_context$stateToResto = context.stateToRestore.columns) == null ? void 0 : _context$stateToResto.columnVisibilityModel : undefined;
264
262
  const initialState = context.stateToRestore.columns;
265
263
 
266
264
  if (columnVisibilityModelToImport == null && initialState == null) {
@@ -272,7 +270,7 @@ function useGridColumns(apiRef, props) {
272
270
  columnTypes,
273
271
  columnsToUpsert: [],
274
272
  initialState,
275
- shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel.current,
273
+ shouldRegenColumnVisibilityModelFromColumns: !apiRef.current.unstable_caches.columns.isUsingColumnVisibilityModel,
276
274
  currentColumnVisibilityModel: columnVisibilityModelToImport,
277
275
  keepOnlyColumnsToUpsert: false
278
276
  });
@@ -323,7 +321,7 @@ function useGridColumns(apiRef, props) {
323
321
  columnTypes,
324
322
  columnsToUpsert: [],
325
323
  initialState: undefined,
326
- shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel.current,
324
+ shouldRegenColumnVisibilityModelFromColumns: !apiRef.current.unstable_caches.columns.isUsingColumnVisibilityModel,
327
325
  keepOnlyColumnsToUpsert: false
328
326
  });
329
327
  setGridColumnsState(columnsState);
@@ -353,7 +351,7 @@ function useGridColumns(apiRef, props) {
353
351
  columnTypes,
354
352
  initialState: undefined,
355
353
  // If the user provides a model, we don't want to set it in the state here because it has it's dedicated `useEffect` which calls `setColumnVisibilityModel`
356
- shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel.current,
354
+ shouldRegenColumnVisibilityModelFromColumns: !apiRef.current.unstable_caches.columns.isUsingColumnVisibilityModel,
357
355
  columnsToUpsert: props.columns,
358
356
  keepOnlyColumnsToUpsert: true
359
357
  });
@@ -58,7 +58,7 @@ const hasScroll = ({
58
58
 
59
59
  function useGridDimensions(apiRef, props) {
60
60
  const logger = (0, _useGridLogger.useGridLogger)(apiRef, 'useResizeContainer');
61
- const warningShown = React.useRef(false);
61
+ const errorShown = React.useRef(false);
62
62
  const rootDimensionsRef = React.useRef(null);
63
63
  const fullDimensionsRef = React.useRef(null);
64
64
  const rowsMeta = (0, _utils2.useGridSelector)(apiRef, _gridRowsMetaSelector.gridRowsMetaSelector);
@@ -115,7 +115,8 @@ function useGridDimensions(apiRef, props) {
115
115
  viewportOuterSize,
116
116
  viewportInnerSize,
117
117
  hasScrollX,
118
- hasScrollY
118
+ hasScrollY,
119
+ scrollBarSize
119
120
  };
120
121
  const prevDimensions = fullDimensionsRef.current;
121
122
  fullDimensionsRef.current = newFullDimensions;
@@ -165,14 +166,14 @@ function useGridDimensions(apiRef, props) {
165
166
 
166
167
  const isJSDOM = /jsdom/.test(window.navigator.userAgent);
167
168
 
168
- if (size.height === 0 && !warningShown.current && !props.autoHeight && !isJSDOM) {
169
- logger.warn(['The parent of the grid has an empty height.', 'You need to make sure the container has an intrinsic height.', 'The grid displays with a height of 0px.', '', 'You can find a solution in the docs:', 'https://mui.com/x/react-data-grid/layout/'].join('\n'));
170
- warningShown.current = true;
169
+ if (size.height === 0 && !errorShown.current && !props.autoHeight && !isJSDOM) {
170
+ logger.error(['The parent DOM element of the data grid has an empty height.', 'Please make sure that this element has an intrinsic height.', 'The grid displays with a height of 0px.', '', 'More details: https://mui.com/r/x-data-grid-no-dimensions.'].join('\n'));
171
+ errorShown.current = true;
171
172
  }
172
173
 
173
- if (size.width === 0 && !warningShown.current && !isJSDOM) {
174
- logger.warn(['The parent of the grid has an empty width.', 'You need to make sure the container has an intrinsic width.', 'The grid displays with a width of 0px.', '', 'You can find a solution in the docs:', 'https://mui.com/x/react-data-grid/layout/'].join('\n'));
175
- warningShown.current = true;
174
+ if (size.width === 0 && !errorShown.current && !isJSDOM) {
175
+ logger.error(['The parent DOM element of the data grid has an empty width.', 'Please make sure that this element has an intrinsic width.', 'The grid displays with a width of 0px.', '', 'More details: https://mui.com/r/x-data-grid-no-dimensions.'].join('\n'));
176
+ errorShown.current = true;
176
177
  }
177
178
 
178
179
  if (isTestEnvironment) {
@@ -323,6 +323,9 @@ const useGridCellEditing = (apiRef, props) => {
323
323
  } = editingState[id][field];
324
324
 
325
325
  if (error || isProcessingProps) {
326
+ // Attempt to change cell mode to "view" was not successful
327
+ // Update previous mode to allow another attempt
328
+ prevCellModesModel.current[id][field].mode = _gridEditRowModel.GridCellModes.Edit;
326
329
  return;
327
330
  }
328
331
 
@@ -330,6 +333,8 @@ const useGridCellEditing = (apiRef, props) => {
330
333
 
331
334
  if (processRowUpdate) {
332
335
  const handleError = errorThrown => {
336
+ prevCellModesModel.current[id][field].mode = _gridEditRowModel.GridCellModes.Edit;
337
+
333
338
  if (onProcessRowUpdateError) {
334
339
  onProcessRowUpdateError(errorThrown);
335
340
  } else {
@@ -432,12 +437,15 @@ const useGridCellEditing = (apiRef, props) => {
432
437
  }
433
438
  }, [cellModesModelProp, updateCellModesModel]);
434
439
  React.useEffect(() => {
435
- const idToIdLookup = (0, _gridRowsSelector.gridRowsIdToIdLookupSelector)(apiRef);
440
+ const idToIdLookup = (0, _gridRowsSelector.gridRowsIdToIdLookupSelector)(apiRef); // Update the ref here because updateStateToStopCellEditMode may change it later
441
+
442
+ const copyOfPrevCellModes = prevCellModesModel.current;
443
+ prevCellModesModel.current = cellModesModel;
436
444
  Object.entries(cellModesModel).forEach(([id, fields]) => {
437
445
  Object.entries(fields).forEach(([field, params]) => {
438
- var _prevCellModesModel$c, _prevCellModesModel$c2, _idToIdLookup$id;
446
+ var _copyOfPrevCellModes$, _copyOfPrevCellModes$2, _idToIdLookup$id;
439
447
 
440
- const prevMode = ((_prevCellModesModel$c = prevCellModesModel.current[id]) == null ? void 0 : (_prevCellModesModel$c2 = _prevCellModesModel$c[field]) == null ? void 0 : _prevCellModesModel$c2.mode) || _gridEditRowModel.GridCellModes.View;
448
+ const prevMode = ((_copyOfPrevCellModes$ = copyOfPrevCellModes[id]) == null ? void 0 : (_copyOfPrevCellModes$2 = _copyOfPrevCellModes$[field]) == null ? void 0 : _copyOfPrevCellModes$2.mode) || _gridEditRowModel.GridCellModes.View;
441
449
  const originalId = (_idToIdLookup$id = idToIdLookup[id]) != null ? _idToIdLookup$id : id;
442
450
 
443
451
  if (params.mode === _gridEditRowModel.GridCellModes.Edit && prevMode === _gridEditRowModel.GridCellModes.View) {
@@ -453,7 +461,6 @@ const useGridCellEditing = (apiRef, props) => {
453
461
  }
454
462
  });
455
463
  });
456
- prevCellModesModel.current = cellModesModel;
457
464
  }, [apiRef, cellModesModel, updateStateToStartCellEditMode, updateStateToStopCellEditMode]);
458
465
  };
459
466
 
@@ -49,7 +49,7 @@ function useGridEditing(apiRef, props) {
49
49
  (0, _useGridCellEditing.useCellEditing)(apiRef, props);
50
50
  (0, _useGridRowEditing.useGridRowEditing)(apiRef, props);
51
51
  const debounceMap = React.useRef({});
52
- apiRef.current.unstable_updateControlState({
52
+ apiRef.current.unstable_registerControlState({
53
53
  stateId: 'editRows',
54
54
  propModel: props.editRowsModel,
55
55
  propOnChange: props.onEditRowsModelChange,
@@ -402,12 +402,14 @@ const useGridRowEditing = (apiRef, props) => {
402
402
  const isSomeFieldProcessingProps = Object.values(editingState[id]).some(fieldProps => fieldProps.isProcessingProps);
403
403
 
404
404
  if (isSomeFieldProcessingProps) {
405
+ prevRowModesModel.current[id].mode = _gridEditRowModel.GridRowModes.Edit;
405
406
  return;
406
407
  }
407
408
 
408
409
  const hasSomeFieldWithError = Object.values(editingState[id]).some(fieldProps => fieldProps.error);
409
410
 
410
411
  if (hasSomeFieldWithError) {
412
+ prevRowModesModel.current[id].mode = _gridEditRowModel.GridRowModes.Edit;
411
413
  return;
412
414
  }
413
415
 
@@ -415,6 +417,8 @@ const useGridRowEditing = (apiRef, props) => {
415
417
 
416
418
  if (processRowUpdate) {
417
419
  const handleError = errorThrown => {
420
+ prevRowModesModel.current[id].mode = _gridEditRowModel.GridRowModes.Edit;
421
+
418
422
  if (onProcessRowUpdateError) {
419
423
  onProcessRowUpdateError(errorThrown);
420
424
  } else {
@@ -578,11 +582,14 @@ const useGridRowEditing = (apiRef, props) => {
578
582
  }
579
583
  }, [rowModesModelProp, updateRowModesModel]);
580
584
  React.useEffect(() => {
581
- const idToIdLookup = (0, _gridRowsSelector.gridRowsIdToIdLookupSelector)(apiRef);
585
+ const idToIdLookup = (0, _gridRowsSelector.gridRowsIdToIdLookupSelector)(apiRef); // Update the ref here because updateStateToStopRowEditMode may change it later
586
+
587
+ const copyOfPrevRowModesModel = prevRowModesModel.current;
588
+ prevRowModesModel.current = rowModesModel;
582
589
  Object.entries(rowModesModel).forEach(([id, params]) => {
583
- var _prevRowModesModel$cu, _idToIdLookup$id;
590
+ var _copyOfPrevRowModesMo, _idToIdLookup$id;
584
591
 
585
- const prevMode = ((_prevRowModesModel$cu = prevRowModesModel.current[id]) == null ? void 0 : _prevRowModesModel$cu.mode) || _gridEditRowModel.GridRowModes.View;
592
+ const prevMode = ((_copyOfPrevRowModesMo = copyOfPrevRowModesModel[id]) == null ? void 0 : _copyOfPrevRowModesMo.mode) || _gridEditRowModel.GridRowModes.View;
586
593
  const originalId = (_idToIdLookup$id = idToIdLookup[id]) != null ? _idToIdLookup$id : id;
587
594
 
588
595
  if (params.mode === _gridEditRowModel.GridRowModes.Edit && prevMode === _gridEditRowModel.GridRowModes.View) {
@@ -595,7 +602,6 @@ const useGridRowEditing = (apiRef, props) => {
595
602
  }, params));
596
603
  }
597
604
  });
598
- prevRowModesModel.current = rowModesModel;
599
605
  }, [apiRef, rowModesModel, updateStateToStartRowEditMode, updateStateToStopRowEditMode]);
600
606
  };
601
607
 
@@ -25,6 +25,8 @@ function useGridEvents(apiRef, props) {
25
25
  (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'cellFocusOut', props.onCellFocusOut);
26
26
  (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'preferencePanelClose', props.onPreferencePanelClose);
27
27
  (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'preferencePanelOpen', props.onPreferencePanelOpen);
28
+ (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'menuOpen', props.onMenuOpen);
29
+ (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'menuClose', props.onMenuClose);
28
30
  (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'rowDoubleClick', props.onRowDoubleClick);
29
31
  (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'rowClick', props.onRowClick);
30
32
  (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'componentError', props.onError);
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.gridVisibleTopLevelRowCountSelector = exports.gridVisibleSortedTopLevelRowEntriesSelector = exports.gridVisibleSortedRowIdsSelector = exports.gridVisibleSortedRowEntriesSelector = exports.gridVisibleRowsSelector = exports.gridVisibleRowsLookupSelector = exports.gridVisibleRowCountSelector = exports.gridFilteredSortedRowIdsSelector = exports.gridFilteredSortedRowEntriesSelector = exports.gridFilteredRowsLookupSelector = exports.gridFilteredDescendantCountLookupSelector = exports.gridFilterStateSelector = exports.gridFilterModelSelector = exports.gridFilterActiveItemsSelector = exports.gridFilterActiveItemsLookupSelector = void 0;
6
+ exports.gridVisibleTopLevelRowCountSelector = exports.gridVisibleSortedTopLevelRowEntriesSelector = exports.gridVisibleSortedRowIdsSelector = exports.gridVisibleSortedRowEntriesSelector = exports.gridVisibleRowsSelector = exports.gridVisibleRowsLookupSelector = exports.gridVisibleRowCountSelector = exports.gridQuickFilterValuesSelector = exports.gridFilteredSortedRowIdsSelector = exports.gridFilteredSortedRowEntriesSelector = exports.gridFilteredRowsLookupSelector = exports.gridFilteredDescendantCountLookupSelector = exports.gridFilterStateSelector = exports.gridFilterModelSelector = exports.gridFilterActiveItemsSelector = exports.gridFilterActiveItemsLookupSelector = void 0;
7
7
 
8
8
  var _createSelector = require("../../../utils/createSelector");
9
9
 
@@ -26,11 +26,18 @@ const gridFilterStateSelector = state => state.filter;
26
26
  exports.gridFilterStateSelector = gridFilterStateSelector;
27
27
  const gridFilterModelSelector = (0, _createSelector.createSelector)(gridFilterStateSelector, filterState => filterState.filterModel);
28
28
  /**
29
+ * Get the current quick filter values.
29
30
  * @category Filtering
30
- * @ignore - do not document.
31
31
  */
32
32
 
33
33
  exports.gridFilterModelSelector = gridFilterModelSelector;
34
+ const gridQuickFilterValuesSelector = (0, _createSelector.createSelector)(gridFilterModelSelector, filterModel => filterModel.quickFilterValues);
35
+ /**
36
+ * @category Filtering
37
+ * @ignore - do not document.
38
+ */
39
+
40
+ exports.gridQuickFilterValuesSelector = gridQuickFilterValuesSelector;
34
41
  const gridVisibleRowsLookupSelector = (0, _createSelector.createSelector)(gridFilterStateSelector, filterState => filterState.visibleRowsLookup);
35
42
  /**
36
43
  * @category Filtering
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.sanitizeFilterModel = exports.mergeStateWithFilterModel = exports.buildAggregatedQuickFilterApplier = exports.buildAggregatedFilterItemsApplier = exports.buildAggregatedFilterApplier = void 0;
8
+ exports.sanitizeFilterModel = exports.mergeStateWithFilterModel = exports.cleanFilterItem = exports.buildAggregatedQuickFilterApplier = exports.buildAggregatedFilterItemsApplier = exports.buildAggregatedFilterApplier = void 0;
9
9
 
10
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
11
 
@@ -38,6 +38,7 @@ const cleanFilterItem = (item, apiRef) => {
38
38
  return cleanItem;
39
39
  };
40
40
 
41
+ exports.cleanFilterItem = cleanFilterItem;
41
42
  const filterModelDisableMultiColumnsFilteringWarning = (0, _warning.buildWarning)(['MUI: The `filterModel` can only contain a single item when the `disableMultipleColumnsFiltering` prop is set to `true`.', 'If you are using the community version of the `DataGrid`, this prop is always `true`.'], 'error');
42
43
  const filterModelMissingItemIdWarning = (0, _warning.buildWarning)("MUI: The 'id' field is required on `filterModel.items` when you use multiple filters.", 'error');
43
44
  const filterModelMissingItemOperatorWarning = (0, _warning.buildWarning)(['MUI: One of your filtering item have no `operatorValue` provided.', 'This property will become required on `@mui/x-data-grid@6.X`.']);
@@ -81,10 +82,8 @@ const sanitizeFilterModel = (model, disableMultipleColumnsFiltering, apiRef) =>
81
82
 
82
83
  exports.sanitizeFilterModel = sanitizeFilterModel;
83
84
 
84
- const mergeStateWithFilterModel = (filterModel, disableMultipleColumnsFiltering, apiRef) => state => (0, _extends2.default)({}, state, {
85
- filter: (0, _extends2.default)({}, state.filter, {
86
- filterModel: sanitizeFilterModel(filterModel, disableMultipleColumnsFiltering, apiRef)
87
- })
85
+ const mergeStateWithFilterModel = (filterModel, disableMultipleColumnsFiltering, apiRef) => filteringState => (0, _extends2.default)({}, filteringState, {
86
+ filterModel: sanitizeFilterModel(filterModel, disableMultipleColumnsFiltering, apiRef)
88
87
  });
89
88
  /**
90
89
  * Generates a method to easily check if a row is matching the current filter model.
@@ -70,7 +70,7 @@ const useGridFilter = (apiRef, props) => {
70
70
  var _props$componentsProp2;
71
71
 
72
72
  const logger = (0, _useGridLogger.useGridLogger)(apiRef, 'useGridFilter');
73
- apiRef.current.unstable_updateControlState({
73
+ apiRef.current.unstable_registerControlState({
74
74
  stateId: 'filter',
75
75
  propModel: props.filterModel,
76
76
  propOnChange: props.onFilterModelChange,
@@ -111,7 +111,23 @@ const useGridFilter = (apiRef, props) => {
111
111
 
112
112
  apiRef.current.setFilterModel((0, _extends2.default)({}, filterModel, {
113
113
  items
114
- }));
114
+ }), 'upsertFilterItem');
115
+ }, [apiRef]);
116
+ const upsertFilterItems = React.useCallback(items => {
117
+ const filterModel = (0, _gridFilterSelector.gridFilterModelSelector)(apiRef);
118
+ const existingItems = [...filterModel.items];
119
+ items.forEach(item => {
120
+ const itemIndex = items.findIndex(filterItem => filterItem.id === item.id);
121
+
122
+ if (itemIndex === -1) {
123
+ existingItems.push(item);
124
+ } else {
125
+ existingItems[itemIndex] = item;
126
+ }
127
+ });
128
+ apiRef.current.setFilterModel((0, _extends2.default)({}, filterModel, {
129
+ items
130
+ }), 'upsertFilterItems');
115
131
  }, [apiRef]);
116
132
  const deleteFilterItem = React.useCallback(itemToDelete => {
117
133
  const filterModel = (0, _gridFilterSelector.gridFilterModelSelector)(apiRef);
@@ -123,7 +139,7 @@ const useGridFilter = (apiRef, props) => {
123
139
 
124
140
  apiRef.current.setFilterModel((0, _extends2.default)({}, filterModel, {
125
141
  items
126
- }));
142
+ }), 'deleteFilterItem');
127
143
  }, [apiRef]);
128
144
  const showFilterPanel = React.useCallback(targetColumnField => {
129
145
  logger.debug('Displaying filter panel');
@@ -137,13 +153,13 @@ const useGridFilter = (apiRef, props) => {
137
153
  if (filterItemOnTarget) {
138
154
  newFilterItems = filterItemsWithValue;
139
155
  } else if (props.disableMultipleColumnsFiltering) {
140
- newFilterItems = [{
156
+ newFilterItems = [(0, _gridFilterUtils.cleanFilterItem)({
141
157
  columnField: targetColumnField
142
- }];
158
+ }, apiRef)];
143
159
  } else {
144
- newFilterItems = [...filterItemsWithValue, {
160
+ newFilterItems = [...filterItemsWithValue, (0, _gridFilterUtils.cleanFilterItem)({
145
161
  columnField: targetColumnField
146
- }];
162
+ }, apiRef)];
147
163
  }
148
164
 
149
165
  apiRef.current.setFilterModel((0, _extends2.default)({}, filterModel, {
@@ -166,7 +182,7 @@ const useGridFilter = (apiRef, props) => {
166
182
 
167
183
  apiRef.current.setFilterModel((0, _extends2.default)({}, filterModel, {
168
184
  linkOperator
169
- }));
185
+ }), 'changeLogicOperator');
170
186
  }, [apiRef]);
171
187
  const setQuickFilterValues = React.useCallback(values => {
172
188
  const filterModel = (0, _gridFilterSelector.gridFilterModelSelector)(apiRef);
@@ -179,12 +195,12 @@ const useGridFilter = (apiRef, props) => {
179
195
  quickFilterValues: [...values]
180
196
  }));
181
197
  }, [apiRef]);
182
- const setFilterModel = React.useCallback(model => {
198
+ const setFilterModel = React.useCallback((model, reason) => {
183
199
  const currentModel = (0, _gridFilterSelector.gridFilterModelSelector)(apiRef);
184
200
 
185
201
  if (currentModel !== model) {
186
202
  logger.debug('Setting filter model');
187
- apiRef.current.setState((0, _gridFilterUtils.mergeStateWithFilterModel)(model, props.disableMultipleColumnsFiltering, apiRef));
203
+ apiRef.current.unstable_updateControlState('filter', (0, _gridFilterUtils.mergeStateWithFilterModel)(model, props.disableMultipleColumnsFiltering, apiRef), reason);
188
204
  apiRef.current.unstable_applyFilters();
189
205
  }
190
206
  }, [apiRef, logger, props.disableMultipleColumnsFiltering]);
@@ -197,6 +213,7 @@ const useGridFilter = (apiRef, props) => {
197
213
  unstable_applyFilters: applyFilters,
198
214
  deleteFilterItem,
199
215
  upsertFilterItem,
216
+ upsertFilterItems,
200
217
  setFilterModel,
201
218
  showFilterPanel,
202
219
  hideFilterPanel,
@@ -230,7 +247,7 @@ const useGridFilter = (apiRef, props) => {
230
247
  return params;
231
248
  }
232
249
 
233
- apiRef.current.setState((0, _gridFilterUtils.mergeStateWithFilterModel)(filterModel, props.disableMultipleColumnsFiltering, apiRef));
250
+ apiRef.current.unstable_updateControlState('filter', (0, _gridFilterUtils.mergeStateWithFilterModel)(filterModel, props.disableMultipleColumnsFiltering, apiRef), 'restoreState');
234
251
  return (0, _extends2.default)({}, params, {
235
252
  callbacks: [...params.callbacks, apiRef.current.unstable_applyFilters]
236
253
  });
@@ -61,7 +61,7 @@ const useGridPage = (apiRef, props) => {
61
61
 
62
62
  const logger = (0, _utils.useGridLogger)(apiRef, 'useGridPage');
63
63
  const visibleTopLevelRowCount = (0, _utils.useGridSelector)(apiRef, _filter.gridVisibleTopLevelRowCountSelector);
64
- apiRef.current.unstable_updateControlState({
64
+ apiRef.current.unstable_registerControlState({
65
65
  stateId: 'page',
66
66
  propModel: props.page,
67
67
  propOnChange: props.onPageChange,
@@ -42,7 +42,7 @@ const useGridPageSize = (apiRef, props) => {
42
42
 
43
43
  const logger = (0, _utils.useGridLogger)(apiRef, 'useGridPageSize');
44
44
  const rowHeight = (0, _utils.useGridSelector)(apiRef, _density.gridDensityRowHeightSelector);
45
- apiRef.current.unstable_updateControlState({
45
+ apiRef.current.unstable_registerControlState({
46
46
  stateId: 'pageSize',
47
47
  propModel: props.pageSize,
48
48
  propOnChange: props.onPageSizeChange,