@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
@@ -1,10 +1,18 @@
1
1
  import * as React from 'react';
2
- import { GridFilterModel } from '../../../models';
2
+ import { GridFilterItem, GridFilterModel } from '../../../models';
3
3
  import { GridApiCommunity } from '../../../models/api/gridApiCommunity';
4
4
  import { GridStateCommunity } from '../../../models/gridStateCommunity';
5
5
  import { GridAggregatedFilterItemApplier } from './gridFilterState';
6
+ /**
7
+ * Adds default values to the optional fields of a filter items.
8
+ * @param {GridFilterItem} item The raw filter item.
9
+ * @param {React.MutableRefObject<GridApiCommunity>} apiRef The API of the grid.
10
+ * @return {GridFilterItem} The clean filter item with an uniq ID and an always-defined operatorValue.
11
+ * TODO: Make the typing reflect the different between GridFilterInputItem and GridFilterItem.
12
+ */
13
+ export declare const cleanFilterItem: (item: GridFilterItem, apiRef: React.MutableRefObject<GridApiCommunity>) => GridFilterItem;
6
14
  export declare const sanitizeFilterModel: (model: GridFilterModel, disableMultipleColumnsFiltering: boolean, apiRef: React.MutableRefObject<GridApiCommunity>) => GridFilterModel;
7
- export declare const mergeStateWithFilterModel: (filterModel: GridFilterModel, disableMultipleColumnsFiltering: boolean, apiRef: React.MutableRefObject<GridApiCommunity>) => (state: GridStateCommunity) => GridStateCommunity;
15
+ export declare const mergeStateWithFilterModel: (filterModel: GridFilterModel, disableMultipleColumnsFiltering: boolean, apiRef: React.MutableRefObject<GridApiCommunity>) => (filteringState: GridStateCommunity['filter']) => GridStateCommunity['filter'];
8
16
  /**
9
17
  * Generates a method to easily check if a row is matching the current filter model.
10
18
  * @param {GridFilterModel} filterModel The model with which we want to filter the rows.
@@ -10,7 +10,7 @@ import { gridColumnFieldsSelector } from '../columns';
10
10
  * @return {GridFilterItem} The clean filter item with an uniq ID and an always-defined operatorValue.
11
11
  * TODO: Make the typing reflect the different between GridFilterInputItem and GridFilterItem.
12
12
  */
13
- const cleanFilterItem = (item, apiRef) => {
13
+ export const cleanFilterItem = (item, apiRef) => {
14
14
  const cleanItem = _extends({}, item);
15
15
 
16
16
  if (cleanItem.id == null) {
@@ -25,7 +25,6 @@ const cleanFilterItem = (item, apiRef) => {
25
25
 
26
26
  return cleanItem;
27
27
  };
28
-
29
28
  const filterModelDisableMultiColumnsFilteringWarning = 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');
30
29
  const filterModelMissingItemIdWarning = buildWarning("MUI: The 'id' field is required on `filterModel.items` when you use multiple filters.", 'error');
31
30
  const filterModelMissingItemOperatorWarning = buildWarning(['MUI: One of your filtering item have no `operatorValue` provided.', 'This property will become required on `@mui/x-data-grid@6.X`.']);
@@ -65,10 +64,8 @@ export const sanitizeFilterModel = (model, disableMultipleColumnsFiltering, apiR
65
64
 
66
65
  return model;
67
66
  };
68
- export const mergeStateWithFilterModel = (filterModel, disableMultipleColumnsFiltering, apiRef) => state => _extends({}, state, {
69
- filter: _extends({}, state.filter, {
70
- filterModel: sanitizeFilterModel(filterModel, disableMultipleColumnsFiltering, apiRef)
71
- })
67
+ export const mergeStateWithFilterModel = (filterModel, disableMultipleColumnsFiltering, apiRef) => filteringState => _extends({}, filteringState, {
68
+ filterModel: sanitizeFilterModel(filterModel, disableMultipleColumnsFiltering, apiRef)
72
69
  });
73
70
  /**
74
71
  * Generates a method to easily check if a row is matching the current filter model.
@@ -8,4 +8,4 @@ export declare const filterStateInitializer: GridStateInitializer<Pick<DataGridP
8
8
  * @requires useGridParamsApi (method)
9
9
  * @requires useGridRows (event)
10
10
  */
11
- export declare const useGridFilter: (apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'initialState' | 'filterModel' | 'onFilterModelChange' | 'filterMode' | 'disableMultipleColumnsFiltering' | 'components' | 'componentsProps'>) => void;
11
+ export declare const useGridFilter: (apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'filterModel' | 'onFilterModelChange' | 'filterMode' | 'disableMultipleColumnsFiltering' | 'components' | 'componentsProps'>) => void;
@@ -12,7 +12,7 @@ import { useFirstRender } from '../../utils/useFirstRender';
12
12
  import { gridRowIdsSelector } from '../rows';
13
13
  import { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
14
14
  import { GRID_DEFAULT_STRATEGY, useGridRegisterStrategyProcessor } from '../../core/strategyProcessing';
15
- import { buildAggregatedFilterApplier, sanitizeFilterModel, mergeStateWithFilterModel } from './gridFilterUtils';
15
+ import { buildAggregatedFilterApplier, sanitizeFilterModel, mergeStateWithFilterModel, cleanFilterItem } from './gridFilterUtils';
16
16
  import { isDeepEqual } from '../../../utils/utils';
17
17
  import { jsx as _jsx } from "react/jsx-runtime";
18
18
  export const filterStateInitializer = (state, props, apiRef) => {
@@ -37,7 +37,7 @@ export const useGridFilter = (apiRef, props) => {
37
37
  var _props$componentsProp2;
38
38
 
39
39
  const logger = useGridLogger(apiRef, 'useGridFilter');
40
- apiRef.current.unstable_updateControlState({
40
+ apiRef.current.unstable_registerControlState({
41
41
  stateId: 'filter',
42
42
  propModel: props.filterModel,
43
43
  propOnChange: props.onFilterModelChange,
@@ -78,7 +78,23 @@ export const useGridFilter = (apiRef, props) => {
78
78
 
79
79
  apiRef.current.setFilterModel(_extends({}, filterModel, {
80
80
  items
81
- }));
81
+ }), 'upsertFilterItem');
82
+ }, [apiRef]);
83
+ const upsertFilterItems = React.useCallback(items => {
84
+ const filterModel = gridFilterModelSelector(apiRef);
85
+ const existingItems = [...filterModel.items];
86
+ items.forEach(item => {
87
+ const itemIndex = items.findIndex(filterItem => filterItem.id === item.id);
88
+
89
+ if (itemIndex === -1) {
90
+ existingItems.push(item);
91
+ } else {
92
+ existingItems[itemIndex] = item;
93
+ }
94
+ });
95
+ apiRef.current.setFilterModel(_extends({}, filterModel, {
96
+ items
97
+ }), 'upsertFilterItems');
82
98
  }, [apiRef]);
83
99
  const deleteFilterItem = React.useCallback(itemToDelete => {
84
100
  const filterModel = gridFilterModelSelector(apiRef);
@@ -90,7 +106,7 @@ export const useGridFilter = (apiRef, props) => {
90
106
 
91
107
  apiRef.current.setFilterModel(_extends({}, filterModel, {
92
108
  items
93
- }));
109
+ }), 'deleteFilterItem');
94
110
  }, [apiRef]);
95
111
  const showFilterPanel = React.useCallback(targetColumnField => {
96
112
  logger.debug('Displaying filter panel');
@@ -104,13 +120,13 @@ export const useGridFilter = (apiRef, props) => {
104
120
  if (filterItemOnTarget) {
105
121
  newFilterItems = filterItemsWithValue;
106
122
  } else if (props.disableMultipleColumnsFiltering) {
107
- newFilterItems = [{
123
+ newFilterItems = [cleanFilterItem({
108
124
  columnField: targetColumnField
109
- }];
125
+ }, apiRef)];
110
126
  } else {
111
- newFilterItems = [...filterItemsWithValue, {
127
+ newFilterItems = [...filterItemsWithValue, cleanFilterItem({
112
128
  columnField: targetColumnField
113
- }];
129
+ }, apiRef)];
114
130
  }
115
131
 
116
132
  apiRef.current.setFilterModel(_extends({}, filterModel, {
@@ -133,7 +149,7 @@ export const useGridFilter = (apiRef, props) => {
133
149
 
134
150
  apiRef.current.setFilterModel(_extends({}, filterModel, {
135
151
  linkOperator
136
- }));
152
+ }), 'changeLogicOperator');
137
153
  }, [apiRef]);
138
154
  const setQuickFilterValues = React.useCallback(values => {
139
155
  const filterModel = gridFilterModelSelector(apiRef);
@@ -146,12 +162,12 @@ export const useGridFilter = (apiRef, props) => {
146
162
  quickFilterValues: [...values]
147
163
  }));
148
164
  }, [apiRef]);
149
- const setFilterModel = React.useCallback(model => {
165
+ const setFilterModel = React.useCallback((model, reason) => {
150
166
  const currentModel = gridFilterModelSelector(apiRef);
151
167
 
152
168
  if (currentModel !== model) {
153
169
  logger.debug('Setting filter model');
154
- apiRef.current.setState(mergeStateWithFilterModel(model, props.disableMultipleColumnsFiltering, apiRef));
170
+ apiRef.current.unstable_updateControlState('filter', mergeStateWithFilterModel(model, props.disableMultipleColumnsFiltering, apiRef), reason);
155
171
  apiRef.current.unstable_applyFilters();
156
172
  }
157
173
  }, [apiRef, logger, props.disableMultipleColumnsFiltering]);
@@ -164,6 +180,7 @@ export const useGridFilter = (apiRef, props) => {
164
180
  unstable_applyFilters: applyFilters,
165
181
  deleteFilterItem,
166
182
  upsertFilterItem,
183
+ upsertFilterItems,
167
184
  setFilterModel,
168
185
  showFilterPanel,
169
186
  hideFilterPanel,
@@ -197,7 +214,7 @@ export const useGridFilter = (apiRef, props) => {
197
214
  return params;
198
215
  }
199
216
 
200
- apiRef.current.setState(mergeStateWithFilterModel(filterModel, props.disableMultipleColumnsFiltering, apiRef));
217
+ apiRef.current.unstable_updateControlState('filter', mergeStateWithFilterModel(filterModel, props.disableMultipleColumnsFiltering, apiRef), 'restoreState');
201
218
  return _extends({}, params, {
202
219
  callbacks: [...params.callbacks, apiRef.current.unstable_applyFilters]
203
220
  });
@@ -39,7 +39,7 @@ export const useGridPage = (apiRef, props) => {
39
39
 
40
40
  const logger = useGridLogger(apiRef, 'useGridPage');
41
41
  const visibleTopLevelRowCount = useGridSelector(apiRef, gridVisibleTopLevelRowCountSelector);
42
- apiRef.current.unstable_updateControlState({
42
+ apiRef.current.unstable_registerControlState({
43
43
  stateId: 'page',
44
44
  propModel: props.page,
45
45
  propOnChange: props.onPageChange,
@@ -21,7 +21,7 @@ export const useGridPageSize = (apiRef, props) => {
21
21
 
22
22
  const logger = useGridLogger(apiRef, 'useGridPageSize');
23
23
  const rowHeight = useGridSelector(apiRef, gridDensityRowHeightSelector);
24
- apiRef.current.unstable_updateControlState({
24
+ apiRef.current.unstable_registerControlState({
25
25
  stateId: 'pageSize',
26
26
  propModel: props.pageSize,
27
27
  propOnChange: props.onPageSizeChange,
@@ -7,4 +7,4 @@ export declare const rowsMetaStateInitializer: GridStateInitializer;
7
7
  * @requires useGridPageSize (method)
8
8
  * @requires useGridPage (method)
9
9
  */
10
- export declare const useGridRowsMeta: (apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'getRowHeight' | 'getRowSpacing' | 'pagination' | 'paginationMode'>) => void;
10
+ export declare const useGridRowsMeta: (apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'getRowHeight' | 'getEstimatedRowHeight' | 'getRowSpacing' | 'pagination' | 'paginationMode'>) => void;
@@ -1,5 +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
4
  import { useGridVisibleRows } from '../../utils/useGridVisibleRows';
4
5
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
5
6
  import { useGridSelector } from '../../utils/useGridSelector';
@@ -21,68 +22,101 @@ export const rowsMetaStateInitializer = state => _extends({}, state, {
21
22
 
22
23
  export const useGridRowsMeta = (apiRef, props) => {
23
24
  const {
24
- getRowHeight,
25
- getRowSpacing
25
+ getRowHeight: getRowHeightProp,
26
+ getRowSpacing,
27
+ getEstimatedRowHeight
26
28
  } = props;
27
- const rowsHeightLookup = React.useRef({});
28
- const rowHeight = useGridSelector(apiRef, gridDensityRowHeightSelector);
29
+ const rowsHeightLookup = React.useRef({}); // Inspired by https://github.com/bvaughn/react-virtualized/blob/master/source/Grid/utils/CellSizeAndPositionManager.js
30
+
31
+ const lastMeasuredRowIndex = React.useRef(-1);
32
+ const hasRowWithAutoHeight = React.useRef(false);
33
+ const rowHeightFromDensity = useGridSelector(apiRef, gridDensityRowHeightSelector);
29
34
  const filterState = useGridSelector(apiRef, gridFilterStateSelector);
30
35
  const paginationState = useGridSelector(apiRef, gridPaginationSelector);
31
36
  const sortingState = useGridSelector(apiRef, gridSortingStateSelector);
32
37
  const currentPage = useGridVisibleRows(apiRef, props);
33
38
  const hydrateRowsMeta = React.useCallback(() => {
34
- apiRef.current.setState(state => {
35
- const positions = [];
36
- const densityFactor = gridDensityFactorSelector(state, apiRef.current.instanceId);
37
- const currentRowHeight = gridDensityRowHeightSelector(state, apiRef.current.instanceId);
38
- const currentPageTotalHeight = currentPage.rows.reduce((acc, row) => {
39
- positions.push(acc);
40
- let baseRowHeight;
41
- const isResized = rowsHeightLookup.current[row.id] && rowsHeightLookup.current[row.id].isResized || false;
42
-
43
- if (isResized) {
44
- // do not recalculate resized row height and use the value from the lookup
45
- baseRowHeight = rowsHeightLookup.current[row.id].value;
46
- } else {
47
- baseRowHeight = currentRowHeight;
39
+ hasRowWithAutoHeight.current = false;
40
+ const densityFactor = gridDensityFactorSelector(apiRef.current.state, apiRef.current.instanceId);
41
+ const positions = [];
42
+ const currentPageTotalHeight = currentPage.rows.reduce((acc, row) => {
43
+ positions.push(acc);
44
+
45
+ if (!rowsHeightLookup.current[row.id]) {
46
+ rowsHeightLookup.current[row.id] = {
47
+ sizes: {
48
+ base: rowHeightFromDensity
49
+ },
50
+ isResized: false,
51
+ autoHeight: false,
52
+ needsFirstMeasurement: true // Assume all rows will need to be measured by default
53
+
54
+ };
55
+ }
56
+
57
+ const {
58
+ isResized,
59
+ needsFirstMeasurement,
60
+ sizes
61
+ } = rowsHeightLookup.current[row.id];
62
+ let baseRowHeight = rowHeightFromDensity;
63
+ const existingBaseRowHeight = sizes.base;
48
64
 
49
- if (getRowHeight) {
50
- var _getRowHeight;
65
+ if (isResized) {
66
+ // Do not recalculate resized row height and use the value from the lookup
67
+ baseRowHeight = existingBaseRowHeight;
68
+ } else if (getRowHeightProp) {
69
+ const rowHeightFromUser = getRowHeightProp(_extends({}, row, {
70
+ densityFactor
71
+ }));
51
72
 
52
- // Default back to base rowHeight if getRowHeight returns null or undefined.
53
- baseRowHeight = (_getRowHeight = getRowHeight(_extends({}, row, {
73
+ if (rowHeightFromUser === 'auto') {
74
+ if (needsFirstMeasurement) {
75
+ const estimatedRowHeight = getEstimatedRowHeight ? getEstimatedRowHeight(_extends({}, row, {
54
76
  densityFactor
55
- }))) != null ? _getRowHeight : currentRowHeight;
77
+ })) : rowHeightFromDensity; // If the row was not measured yet use the estimated row height
78
+
79
+ baseRowHeight = estimatedRowHeight != null ? estimatedRowHeight : rowHeightFromDensity;
80
+ } else {
81
+ baseRowHeight = existingBaseRowHeight;
56
82
  }
57
- } // We use an object to make simple to check if a height is already added or not
58
83
 
84
+ hasRowWithAutoHeight.current = true;
85
+ rowsHeightLookup.current[row.id].autoHeight = true;
86
+ } else {
87
+ // Default back to base rowHeight if getRowHeight returns null or undefined.
88
+ baseRowHeight = rowHeightFromUser != null ? rowHeightFromUser : rowHeightFromDensity;
89
+ rowsHeightLookup.current[row.id].needsFirstMeasurement = false;
90
+ rowsHeightLookup.current[row.id].autoHeight = false;
91
+ }
92
+ } else {
93
+ rowsHeightLookup.current[row.id].needsFirstMeasurement = false;
94
+ } // We use an object to make simple to check if a height is already added or not
59
95
 
60
- const initialHeights = {
61
- base: baseRowHeight
62
- };
63
96
 
64
- if (getRowSpacing) {
65
- var _spacing$top, _spacing$bottom;
66
-
67
- const indexRelativeToCurrentPage = apiRef.current.getRowIndexRelativeToVisibleRows(row.id);
68
- const spacing = getRowSpacing(_extends({}, row, {
69
- isFirstVisible: indexRelativeToCurrentPage === 0,
70
- isLastVisible: indexRelativeToCurrentPage === currentPage.rows.length - 1,
71
- indexRelativeToCurrentPage
72
- }));
73
- initialHeights.spacingTop = (_spacing$top = spacing.top) != null ? _spacing$top : 0;
74
- initialHeights.spacingBottom = (_spacing$bottom = spacing.bottom) != null ? _spacing$bottom : 0;
75
- }
97
+ const initialHeights = {
98
+ base: baseRowHeight
99
+ };
76
100
 
77
- const sizes = apiRef.current.unstable_applyPipeProcessors('rowHeight', initialHeights, row);
78
- const finalRowHeight = Object.values(sizes).reduce((acc2, value) => acc2 + value, 0);
79
- rowsHeightLookup.current[row.id] = {
80
- value: baseRowHeight,
81
- sizes,
82
- isResized
83
- };
84
- return acc + finalRowHeight;
85
- }, 0);
101
+ if (getRowSpacing) {
102
+ var _spacing$top, _spacing$bottom;
103
+
104
+ const indexRelativeToCurrentPage = apiRef.current.getRowIndexRelativeToVisibleRows(row.id);
105
+ const spacing = getRowSpacing(_extends({}, row, {
106
+ isFirstVisible: indexRelativeToCurrentPage === 0,
107
+ isLastVisible: indexRelativeToCurrentPage === currentPage.rows.length - 1,
108
+ indexRelativeToCurrentPage
109
+ }));
110
+ initialHeights.spacingTop = (_spacing$top = spacing.top) != null ? _spacing$top : 0;
111
+ initialHeights.spacingBottom = (_spacing$bottom = spacing.bottom) != null ? _spacing$bottom : 0;
112
+ }
113
+
114
+ const processedSizes = apiRef.current.unstable_applyPipeProcessors('rowHeight', initialHeights, row);
115
+ rowsHeightLookup.current[row.id].sizes = processedSizes;
116
+ const finalRowHeight = Object.values(processedSizes).reduce((acc2, value) => acc2 + value, 0);
117
+ return acc + finalRowHeight;
118
+ }, 0);
119
+ apiRef.current.setState(state => {
86
120
  return _extends({}, state, {
87
121
  rowsMeta: {
88
122
  currentPageTotalHeight,
@@ -90,41 +124,73 @@ export const useGridRowsMeta = (apiRef, props) => {
90
124
  }
91
125
  });
92
126
  });
93
- apiRef.current.forceUpdate();
94
- }, [apiRef, currentPage.rows, getRowSpacing, getRowHeight]);
95
127
 
96
- const getTargetRowHeight = rowId => {
97
- var _rowsHeightLookup$cur;
128
+ if (!hasRowWithAutoHeight.current) {
129
+ // No row has height=auto, so all rows are already measured
130
+ lastMeasuredRowIndex.current = Infinity;
131
+ }
98
132
 
99
- return ((_rowsHeightLookup$cur = rowsHeightLookup.current[rowId]) == null ? void 0 : _rowsHeightLookup$cur.value) || rowHeight;
100
- };
133
+ apiRef.current.forceUpdate();
134
+ }, [apiRef, currentPage.rows, rowHeightFromDensity, getRowHeightProp, getRowSpacing, getEstimatedRowHeight]);
135
+ const getRowHeight = React.useCallback(rowId => {
136
+ const height = rowsHeightLookup.current[rowId];
137
+ return height ? height.sizes.base : rowHeightFromDensity;
138
+ }, [rowHeightFromDensity]);
101
139
 
102
140
  const getRowInternalSizes = rowId => {
103
- var _rowsHeightLookup$cur2;
141
+ var _rowsHeightLookup$cur;
104
142
 
105
- return (_rowsHeightLookup$cur2 = rowsHeightLookup.current[rowId]) == null ? void 0 : _rowsHeightLookup$cur2.sizes;
143
+ return (_rowsHeightLookup$cur = rowsHeightLookup.current[rowId]) == null ? void 0 : _rowsHeightLookup$cur.sizes;
106
144
  };
107
145
 
108
146
  const setRowHeight = React.useCallback((id, height) => {
109
- rowsHeightLookup.current[id] = {
110
- value: height,
111
- isResized: true,
112
- sizes: _extends({}, rowsHeightLookup.current[id].sizes, {
113
- base: height
114
- })
115
- };
147
+ rowsHeightLookup.current[id].sizes.base = height;
148
+ rowsHeightLookup.current[id].isResized = true;
149
+ rowsHeightLookup.current[id].needsFirstMeasurement = false;
116
150
  hydrateRowsMeta();
117
- }, [hydrateRowsMeta]); // The effect is used to build the rows meta data - currentPageTotalHeight and positions.
151
+ }, [hydrateRowsMeta]);
152
+ const debouncedHydrateRowsMeta = React.useMemo(() => debounce(hydrateRowsMeta), [hydrateRowsMeta]);
153
+ const storeMeasuredRowHeight = React.useCallback((id, height) => {
154
+ if (!rowsHeightLookup.current[id] || !rowsHeightLookup.current[id].autoHeight) {
155
+ return;
156
+ } // Only trigger hydration if the value is different, otherwise we trigger a loop
157
+
158
+
159
+ const needsHydration = rowsHeightLookup.current[id].sizes.base !== height;
160
+ rowsHeightLookup.current[id].needsFirstMeasurement = false;
161
+ rowsHeightLookup.current[id].sizes.base = height;
162
+
163
+ if (needsHydration) {
164
+ debouncedHydrateRowsMeta();
165
+ }
166
+ }, [debouncedHydrateRowsMeta]);
167
+ const rowHasAutoHeight = React.useCallback(id => {
168
+ var _rowsHeightLookup$cur2;
169
+
170
+ return ((_rowsHeightLookup$cur2 = rowsHeightLookup.current[id]) == null ? void 0 : _rowsHeightLookup$cur2.autoHeight) || false;
171
+ }, []);
172
+ const getLastMeasuredRowIndex = React.useCallback(() => {
173
+ return lastMeasuredRowIndex.current;
174
+ }, []);
175
+ const setLastMeasuredRowIndex = React.useCallback(index => {
176
+ if (hasRowWithAutoHeight.current && index > lastMeasuredRowIndex.current) {
177
+ lastMeasuredRowIndex.current = index;
178
+ }
179
+ }, []); // The effect is used to build the rows meta data - currentPageTotalHeight and positions.
118
180
  // Because of variable row height this is needed for the virtualization
119
181
 
120
182
  React.useEffect(() => {
121
183
  hydrateRowsMeta();
122
- }, [rowHeight, filterState, paginationState, sortingState, hydrateRowsMeta]);
184
+ }, [rowHeightFromDensity, filterState, paginationState, sortingState, hydrateRowsMeta]);
123
185
  useGridRegisterPipeApplier(apiRef, 'rowHeight', hydrateRowsMeta);
124
186
  const rowsMetaApi = {
125
- unstable_getRowHeight: getTargetRowHeight,
187
+ unstable_getLastMeasuredRowIndex: getLastMeasuredRowIndex,
188
+ unstable_setLastMeasuredRowIndex: setLastMeasuredRowIndex,
189
+ unstable_rowHasAutoHeight: rowHasAutoHeight,
190
+ unstable_getRowHeight: getRowHeight,
126
191
  unstable_getRowInternalSizes: getRowInternalSizes,
127
- unstable_setRowHeight: setRowHeight
192
+ unstable_setRowHeight: setRowHeight,
193
+ unstable_storeRowHeightMeasurement: storeMeasuredRowHeight
128
194
  };
129
195
  useGridApiMethod(apiRef, rowsMetaApi, 'GridRowsMetaApi');
130
196
  };
@@ -50,7 +50,7 @@ export const useGridSelection = (apiRef, props) => {
50
50
  return getSelectionModelPropValue(props.selectionModel, gridSelectionStateSelector(apiRef.current.state));
51
51
  }, [apiRef, props.selectionModel]);
52
52
  const lastRowToggled = React.useRef(null);
53
- apiRef.current.unstable_updateControlState({
53
+ apiRef.current.unstable_registerControlState({
54
54
  stateId: 'selection',
55
55
  propModel: propSelectionModel,
56
56
  propOnChange: props.onSelectionModelChange,
@@ -3,7 +3,7 @@ import * as React from 'react';
3
3
  import { unstable_composeClasses as composeClasses } from '@mui/material';
4
4
  import { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
5
5
  import { getDataGridUtilityClass } from '../../../constants';
6
- import { GRID_CHECKBOX_SELECTION_COL_DEF } from '../../../colDef';
6
+ import { GRID_CHECKBOX_SELECTION_COL_DEF, GRID_CHECKBOX_SELECTION_FIELD } from '../../../colDef';
7
7
 
8
8
  const useUtilityClasses = ownerState => {
9
9
  const {
@@ -31,14 +31,16 @@ export const useGridSelectionPreProcessors = (apiRef, props) => {
31
31
  });
32
32
 
33
33
  const shouldHaveSelectionColumn = props.checkboxSelection;
34
- const haveSelectionColumn = columnsState.lookup[selectionColumn.field] != null;
34
+ const haveSelectionColumn = columnsState.lookup[GRID_CHECKBOX_SELECTION_FIELD] != null;
35
35
 
36
36
  if (shouldHaveSelectionColumn && !haveSelectionColumn) {
37
- columnsState.lookup[selectionColumn.field] = selectionColumn;
38
- columnsState.all = [selectionColumn.field, ...columnsState.all];
37
+ columnsState.lookup[GRID_CHECKBOX_SELECTION_FIELD] = selectionColumn;
38
+ columnsState.all = [GRID_CHECKBOX_SELECTION_FIELD, ...columnsState.all];
39
39
  } else if (!shouldHaveSelectionColumn && haveSelectionColumn) {
40
- delete columnsState.lookup[selectionColumn.field];
41
- columnsState.all = columnsState.all.filter(field => field !== selectionColumn.field);
40
+ delete columnsState.lookup[GRID_CHECKBOX_SELECTION_FIELD];
41
+ columnsState.all = columnsState.all.filter(field => field !== GRID_CHECKBOX_SELECTION_FIELD);
42
+ } else if (shouldHaveSelectionColumn && haveSelectionColumn) {
43
+ columnsState.lookup[GRID_CHECKBOX_SELECTION_FIELD] = _extends({}, selectionColumn, columnsState.lookup[GRID_CHECKBOX_SELECTION_FIELD]);
42
44
  }
43
45
 
44
46
  return columnsState;
@@ -7,4 +7,4 @@ export declare const sortingStateInitializer: GridStateInitializer<Pick<DataGrid
7
7
  * @requires useGridRows (event)
8
8
  * @requires useGridColumns (event)
9
9
  */
10
- export declare const useGridSorting: (apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'initialState' | 'sortModel' | 'onSortModelChange' | 'sortingOrder' | 'sortingMode' | 'disableMultipleColumnsSorting'>) => void;
10
+ export declare const useGridSorting: (apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'sortModel' | 'onSortModelChange' | 'sortingOrder' | 'sortingMode' | 'disableMultipleColumnsSorting'>) => void;
@@ -30,7 +30,7 @@ export const sortingStateInitializer = (state, props) => {
30
30
 
31
31
  export const useGridSorting = (apiRef, props) => {
32
32
  const logger = useGridLogger(apiRef, 'useGridSorting');
33
- apiRef.current.unstable_updateControlState({
33
+ apiRef.current.unstable_registerControlState({
34
34
  stateId: 'sortModel',
35
35
  propModel: props.sortModel,
36
36
  propOnChange: props.onSortModelChange,
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { GridRenderContext } from '../../../models';
3
3
  import { GridRowId, GridRowModel } from '../../../models/gridRows';
4
- export declare function getIndexFromScroll(offset: number, positions: number[], sliceStart?: number, sliceEnd?: number): number;
4
+ export declare function binarySearch(offset: number, positions: number[], sliceStart?: number, sliceEnd?: number): number;
5
5
  export declare const getRenderableIndexes: ({ firstIndex, lastIndex, buffer, minFirstIndex, maxLastIndex, }: {
6
6
  firstIndex: number;
7
7
  lastIndex: number;
@@ -28,6 +28,7 @@ export declare const useGridVirtualScroller: (props: UseGridVirtualScrollerProps
28
28
  minFirstColumn?: number | undefined;
29
29
  maxLastColumn?: number | undefined;
30
30
  availableSpace?: number | null | undefined;
31
+ ignoreAutoHeight?: boolean | undefined;
31
32
  }) => JSX.Element[] | null;
32
33
  getRootProps: ({ style, ...other }?: {
33
34
  style?: {} | undefined;