@mui/x-data-grid 5.13.1 → 5.15.1

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 (374) hide show
  1. package/CHANGELOG.md +147 -6
  2. package/DataGrid/DataGrid.js +6 -0
  3. package/DataGrid/useDataGridComponent.js +1 -1
  4. package/DataGrid/useDataGridProps.js +1 -0
  5. package/colDef/gridActionsColDef.js +2 -0
  6. package/colDef/gridBooleanColDef.js +3 -1
  7. package/colDef/gridCheckboxSelectionColDef.js +2 -0
  8. package/colDef/gridDateOperators.d.ts +1 -1
  9. package/colDef/gridStringColDef.d.ts +3 -0
  10. package/colDef/gridStringColDef.js +6 -0
  11. package/components/GridRow.js +5 -1
  12. package/components/base/GridOverlays.js +4 -1
  13. package/components/cell/GridBooleanCell.d.ts +5 -2
  14. package/components/cell/GridBooleanCell.js +93 -2
  15. package/components/cell/GridEditDateCell.js +5 -1
  16. package/components/cell/GridEditInputCell.d.ts +2 -5
  17. package/components/cell/GridEditInputCell.js +13 -14
  18. package/components/cell/GridEditSingleSelectCell.d.ts +4 -0
  19. package/components/cell/GridEditSingleSelectCell.js +11 -4
  20. package/components/cell/index.d.ts +1 -0
  21. package/components/cell/index.js +1 -0
  22. package/components/columnSelection/GridCellCheckboxRenderer.js +12 -1
  23. package/components/containers/GridRoot.js +4 -2
  24. package/components/containers/GridRootStyles.js +10 -0
  25. package/components/toolbar/GridToolbarDensitySelector.js +13 -4
  26. package/components/toolbar/GridToolbarExport.js +20 -10
  27. package/components/toolbar/GridToolbarExportContainer.js +13 -2
  28. package/constants/envConstants.d.ts +1 -1
  29. package/constants/envConstants.js +2 -11
  30. package/constants/gridClasses.d.ts +41 -1
  31. package/constants/gridClasses.js +1 -1
  32. package/constants/localeTextConstants.js +9 -2
  33. package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +2 -1
  34. package/hooks/features/columns/useGridColumnSpanning.js +9 -7
  35. package/hooks/features/columns/useGridColumns.d.ts +1 -1
  36. package/hooks/features/columns/useGridColumns.js +13 -6
  37. package/hooks/features/dimensions/useGridDimensions.js +6 -1
  38. package/hooks/features/editRows/useGridCellEditing.new.d.ts +1 -1
  39. package/hooks/features/editRows/useGridCellEditing.new.js +11 -9
  40. package/hooks/features/editRows/useGridCellEditing.old.js +2 -2
  41. package/hooks/features/editRows/useGridEditing.new.d.ts +1 -1
  42. package/hooks/features/editRows/useGridEditing.new.js +4 -0
  43. package/hooks/features/editRows/useGridEditing.old.js +1 -1
  44. package/hooks/features/editRows/useGridRowEditing.new.d.ts +1 -1
  45. package/hooks/features/editRows/useGridRowEditing.new.js +7 -8
  46. package/hooks/features/export/utils.d.ts +1 -1
  47. package/hooks/features/export/utils.js +16 -2
  48. package/hooks/features/filter/gridFilterUtils.js +6 -0
  49. package/hooks/features/filter/useGridFilter.d.ts +1 -1
  50. package/hooks/features/filter/useGridFilter.js +11 -4
  51. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.d.ts +1 -1
  52. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +42 -34
  53. package/hooks/features/pagination/useGridPage.js +4 -3
  54. package/hooks/features/pagination/useGridPageSize.js +7 -4
  55. package/hooks/features/preferencesPanel/useGridPreferencesPanel.d.ts +1 -1
  56. package/hooks/features/preferencesPanel/useGridPreferencesPanel.js +12 -4
  57. package/hooks/features/rows/gridRowsSelector.d.ts +14 -0
  58. package/hooks/features/rows/gridRowsSelector.js +20 -1
  59. package/hooks/features/rows/gridRowsState.d.ts +8 -1
  60. package/hooks/features/rows/gridRowsUtils.d.ts +5 -1
  61. package/hooks/features/rows/gridRowsUtils.js +21 -3
  62. package/hooks/features/rows/index.d.ts +1 -1
  63. package/hooks/features/rows/index.js +1 -1
  64. package/hooks/features/rows/useGridRowsMeta.js +19 -4
  65. package/hooks/features/rows/useGridRowsPreProcessors.js +2 -1
  66. package/hooks/features/scroll/useGridScroll.js +7 -2
  67. package/hooks/features/selection/useGridSelection.js +28 -10
  68. package/hooks/features/sorting/gridSortingUtils.d.ts +1 -0
  69. package/hooks/features/sorting/gridSortingUtils.js +10 -11
  70. package/hooks/features/sorting/useGridSorting.d.ts +1 -1
  71. package/hooks/features/sorting/useGridSorting.js +42 -6
  72. package/hooks/features/statePersistence/gridStatePersistenceInterface.d.ts +12 -1
  73. package/hooks/features/statePersistence/index.d.ts +1 -1
  74. package/hooks/features/statePersistence/useGridStatePersistence.js +2 -2
  75. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +3 -1
  76. package/hooks/features/virtualization/useGridVirtualScroller.js +32 -18
  77. package/hooks/utils/useGridApiEventHandler.d.ts +2 -2
  78. package/hooks/utils/useGridNativeEventListener.d.ts +1 -1
  79. package/hooks/utils/useGridNativeEventListener.js +1 -1
  80. package/index.js +1 -1
  81. package/internals/index.d.ts +6 -3
  82. package/internals/index.js +5 -2
  83. package/legacy/DataGrid/DataGrid.js +6 -0
  84. package/legacy/DataGrid/useDataGridComponent.js +1 -1
  85. package/legacy/DataGrid/useDataGridProps.js +1 -0
  86. package/legacy/colDef/gridActionsColDef.js +2 -0
  87. package/legacy/colDef/gridBooleanColDef.js +3 -1
  88. package/legacy/colDef/gridCheckboxSelectionColDef.js +2 -0
  89. package/legacy/colDef/gridStringColDef.js +6 -0
  90. package/legacy/components/GridRow.js +5 -1
  91. package/legacy/components/base/GridOverlays.js +4 -1
  92. package/legacy/components/cell/GridBooleanCell.js +93 -2
  93. package/legacy/components/cell/GridEditDateCell.js +5 -1
  94. package/legacy/components/cell/GridEditInputCell.js +13 -14
  95. package/legacy/components/cell/GridEditSingleSelectCell.js +11 -3
  96. package/legacy/components/cell/index.js +1 -0
  97. package/legacy/components/columnSelection/GridCellCheckboxRenderer.js +11 -1
  98. package/legacy/components/containers/GridRoot.js +4 -2
  99. package/legacy/components/containers/GridRootStyles.js +3 -3
  100. package/legacy/components/toolbar/GridToolbarDensitySelector.js +14 -5
  101. package/legacy/components/toolbar/GridToolbarExport.js +20 -10
  102. package/legacy/components/toolbar/GridToolbarExportContainer.js +15 -2
  103. package/legacy/constants/envConstants.js +2 -11
  104. package/legacy/constants/gridClasses.js +1 -1
  105. package/legacy/constants/localeTextConstants.js +9 -2
  106. package/legacy/hooks/features/columns/useGridColumnSpanning.js +9 -7
  107. package/legacy/hooks/features/columns/useGridColumns.js +13 -8
  108. package/legacy/hooks/features/dimensions/useGridDimensions.js +6 -1
  109. package/legacy/hooks/features/editRows/useGridCellEditing.new.js +11 -9
  110. package/legacy/hooks/features/editRows/useGridCellEditing.old.js +2 -2
  111. package/legacy/hooks/features/editRows/useGridEditing.new.js +4 -0
  112. package/legacy/hooks/features/editRows/useGridEditing.old.js +1 -1
  113. package/legacy/hooks/features/editRows/useGridRowEditing.new.js +7 -8
  114. package/legacy/hooks/features/export/utils.js +21 -2
  115. package/legacy/hooks/features/filter/gridFilterUtils.js +6 -0
  116. package/legacy/hooks/features/filter/useGridFilter.js +11 -4
  117. package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +47 -34
  118. package/legacy/hooks/features/pagination/useGridPage.js +4 -3
  119. package/legacy/hooks/features/pagination/useGridPageSize.js +7 -4
  120. package/legacy/hooks/features/preferencesPanel/useGridPreferencesPanel.js +12 -4
  121. package/legacy/hooks/features/rows/gridRowsSelector.js +23 -0
  122. package/legacy/hooks/features/rows/gridRowsUtils.js +21 -3
  123. package/legacy/hooks/features/rows/index.js +1 -1
  124. package/legacy/hooks/features/rows/useGridRowsMeta.js +19 -4
  125. package/legacy/hooks/features/rows/useGridRowsPreProcessors.js +2 -1
  126. package/legacy/hooks/features/scroll/useGridScroll.js +7 -2
  127. package/legacy/hooks/features/selection/useGridSelection.js +30 -12
  128. package/legacy/hooks/features/sorting/gridSortingUtils.js +11 -12
  129. package/legacy/hooks/features/sorting/useGridSorting.js +42 -6
  130. package/legacy/hooks/features/statePersistence/useGridStatePersistence.js +2 -1
  131. package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +33 -18
  132. package/legacy/hooks/utils/useGridNativeEventListener.js +1 -1
  133. package/legacy/index.js +1 -1
  134. package/legacy/internals/index.js +5 -2
  135. package/legacy/locales/arSD.js +8 -1
  136. package/legacy/locales/bgBG.js +8 -1
  137. package/legacy/locales/csCZ.js +8 -1
  138. package/legacy/locales/daDK.js +8 -1
  139. package/legacy/locales/deDE.js +9 -2
  140. package/legacy/locales/elGR.js +8 -1
  141. package/legacy/locales/esES.js +8 -1
  142. package/legacy/locales/faIR.js +8 -1
  143. package/legacy/locales/fiFI.js +8 -1
  144. package/legacy/locales/frFR.js +9 -2
  145. package/legacy/locales/heIL.js +9 -2
  146. package/legacy/locales/huHU.js +8 -1
  147. package/legacy/locales/index.js +2 -1
  148. package/legacy/locales/itIT.js +21 -14
  149. package/legacy/locales/jaJP.js +11 -4
  150. package/legacy/locales/koKR.js +35 -24
  151. package/legacy/locales/nbNO.js +9 -2
  152. package/legacy/locales/nlNL.js +9 -2
  153. package/legacy/locales/plPL.js +8 -1
  154. package/legacy/locales/ptBR.js +9 -2
  155. package/legacy/locales/roRO.js +9 -2
  156. package/legacy/locales/ruRU.js +8 -1
  157. package/legacy/locales/skSK.js +9 -2
  158. package/legacy/locales/svSE.js +9 -2
  159. package/legacy/locales/trTR.js +8 -1
  160. package/legacy/locales/ukUA.js +8 -1
  161. package/legacy/locales/viVN.js +8 -1
  162. package/legacy/locales/zhCN.js +38 -27
  163. package/legacy/locales/zhTW.js +135 -0
  164. package/legacy/models/events/gridEvents.js +1 -0
  165. package/legacy/utils/keyboardUtils.js +8 -5
  166. package/locales/arSD.js +8 -1
  167. package/locales/bgBG.js +8 -1
  168. package/locales/csCZ.js +8 -1
  169. package/locales/daDK.js +8 -1
  170. package/locales/deDE.js +9 -2
  171. package/locales/elGR.js +8 -1
  172. package/locales/esES.js +8 -1
  173. package/locales/faIR.js +8 -1
  174. package/locales/fiFI.js +8 -1
  175. package/locales/frFR.js +9 -2
  176. package/locales/heIL.js +9 -2
  177. package/locales/huHU.js +8 -1
  178. package/locales/index.d.ts +1 -0
  179. package/locales/index.js +2 -1
  180. package/locales/itIT.js +21 -14
  181. package/locales/jaJP.js +11 -4
  182. package/locales/koKR.js +31 -24
  183. package/locales/nbNO.js +9 -2
  184. package/locales/nlNL.js +9 -2
  185. package/locales/plPL.js +8 -1
  186. package/locales/ptBR.js +9 -2
  187. package/locales/roRO.js +9 -2
  188. package/locales/ruRU.js +8 -1
  189. package/locales/skSK.js +9 -2
  190. package/locales/svSE.js +9 -2
  191. package/locales/trTR.js +8 -1
  192. package/locales/ukUA.js +8 -1
  193. package/locales/viVN.js +8 -1
  194. package/locales/zhCN.js +34 -27
  195. package/locales/zhTW.d.ts +2 -0
  196. package/locales/zhTW.js +123 -0
  197. package/models/api/gridColumnSpanning.d.ts +2 -0
  198. package/models/api/gridLocaleTextApi.d.ts +8 -2
  199. package/models/api/gridSelectionApi.d.ts +6 -0
  200. package/models/events/gridEvents.d.ts +1 -0
  201. package/models/events/gridEvents.js +1 -0
  202. package/models/gridRows.d.ts +15 -1
  203. package/models/params/gridCellParams.d.ts +4 -4
  204. package/models/props/DataGridProps.d.ts +5 -0
  205. package/modern/DataGrid/DataGrid.js +6 -0
  206. package/modern/DataGrid/useDataGridComponent.js +1 -1
  207. package/modern/DataGrid/useDataGridProps.js +1 -0
  208. package/modern/colDef/gridActionsColDef.js +2 -0
  209. package/modern/colDef/gridBooleanColDef.js +3 -1
  210. package/modern/colDef/gridCheckboxSelectionColDef.js +2 -0
  211. package/modern/colDef/gridStringColDef.js +6 -0
  212. package/modern/components/GridRow.js +5 -1
  213. package/modern/components/base/GridOverlays.js +4 -1
  214. package/modern/components/cell/GridBooleanCell.js +93 -2
  215. package/modern/components/cell/GridEditDateCell.js +5 -1
  216. package/modern/components/cell/GridEditInputCell.js +13 -14
  217. package/modern/components/cell/GridEditSingleSelectCell.js +11 -4
  218. package/modern/components/cell/index.js +1 -0
  219. package/modern/components/columnSelection/GridCellCheckboxRenderer.js +12 -1
  220. package/modern/components/containers/GridRoot.js +4 -2
  221. package/modern/components/containers/GridRootStyles.js +10 -0
  222. package/modern/components/toolbar/GridToolbarDensitySelector.js +11 -4
  223. package/modern/components/toolbar/GridToolbarExport.js +20 -10
  224. package/modern/components/toolbar/GridToolbarExportContainer.js +11 -2
  225. package/modern/constants/envConstants.js +2 -11
  226. package/modern/constants/gridClasses.js +1 -1
  227. package/modern/constants/localeTextConstants.js +9 -2
  228. package/modern/hooks/features/columns/useGridColumnSpanning.js +9 -7
  229. package/modern/hooks/features/columns/useGridColumns.js +10 -5
  230. package/modern/hooks/features/dimensions/useGridDimensions.js +6 -1
  231. package/modern/hooks/features/editRows/useGridCellEditing.new.js +9 -9
  232. package/modern/hooks/features/editRows/useGridCellEditing.old.js +2 -2
  233. package/modern/hooks/features/editRows/useGridEditing.new.js +4 -0
  234. package/modern/hooks/features/editRows/useGridEditing.old.js +1 -1
  235. package/modern/hooks/features/editRows/useGridRowEditing.new.js +7 -8
  236. package/modern/hooks/features/export/utils.js +10 -2
  237. package/modern/hooks/features/filter/gridFilterUtils.js +6 -0
  238. package/modern/hooks/features/filter/useGridFilter.js +8 -3
  239. package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +42 -30
  240. package/modern/hooks/features/pagination/useGridPage.js +4 -3
  241. package/modern/hooks/features/pagination/useGridPageSize.js +7 -4
  242. package/modern/hooks/features/preferencesPanel/useGridPreferencesPanel.js +8 -4
  243. package/modern/hooks/features/rows/gridRowsSelector.js +18 -1
  244. package/modern/hooks/features/rows/gridRowsUtils.js +19 -3
  245. package/modern/hooks/features/rows/index.js +1 -1
  246. package/modern/hooks/features/rows/useGridRowsMeta.js +17 -4
  247. package/modern/hooks/features/rows/useGridRowsPreProcessors.js +2 -1
  248. package/modern/hooks/features/scroll/useGridScroll.js +5 -2
  249. package/modern/hooks/features/selection/useGridSelection.js +28 -10
  250. package/modern/hooks/features/sorting/gridSortingUtils.js +10 -11
  251. package/modern/hooks/features/sorting/useGridSorting.js +38 -6
  252. package/modern/hooks/features/statePersistence/useGridStatePersistence.js +2 -2
  253. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +31 -17
  254. package/modern/hooks/utils/useGridNativeEventListener.js +1 -1
  255. package/modern/index.js +1 -1
  256. package/modern/internals/index.js +5 -2
  257. package/modern/locales/arSD.js +8 -1
  258. package/modern/locales/bgBG.js +8 -1
  259. package/modern/locales/csCZ.js +8 -1
  260. package/modern/locales/daDK.js +8 -1
  261. package/modern/locales/deDE.js +9 -2
  262. package/modern/locales/elGR.js +8 -1
  263. package/modern/locales/esES.js +8 -1
  264. package/modern/locales/faIR.js +8 -1
  265. package/modern/locales/fiFI.js +8 -1
  266. package/modern/locales/frFR.js +9 -2
  267. package/modern/locales/heIL.js +9 -2
  268. package/modern/locales/huHU.js +8 -1
  269. package/modern/locales/index.js +2 -1
  270. package/modern/locales/itIT.js +21 -14
  271. package/modern/locales/jaJP.js +11 -4
  272. package/modern/locales/koKR.js +31 -24
  273. package/modern/locales/nbNO.js +9 -2
  274. package/modern/locales/nlNL.js +9 -2
  275. package/modern/locales/plPL.js +8 -1
  276. package/modern/locales/ptBR.js +9 -2
  277. package/modern/locales/roRO.js +9 -2
  278. package/modern/locales/ruRU.js +8 -1
  279. package/modern/locales/skSK.js +9 -2
  280. package/modern/locales/svSE.js +9 -2
  281. package/modern/locales/trTR.js +8 -1
  282. package/modern/locales/ukUA.js +8 -1
  283. package/modern/locales/viVN.js +8 -1
  284. package/modern/locales/zhCN.js +34 -27
  285. package/modern/locales/zhTW.js +123 -0
  286. package/modern/models/events/gridEvents.js +1 -0
  287. package/modern/utils/keyboardUtils.js +7 -2
  288. package/node/DataGrid/DataGrid.js +6 -0
  289. package/node/DataGrid/useDataGridComponent.js +1 -1
  290. package/node/DataGrid/useDataGridProps.js +1 -0
  291. package/node/colDef/gridActionsColDef.js +2 -0
  292. package/node/colDef/gridBooleanColDef.js +3 -1
  293. package/node/colDef/gridCheckboxSelectionColDef.js +2 -0
  294. package/node/colDef/gridStringColDef.js +5 -0
  295. package/node/components/GridRow.js +5 -1
  296. package/node/components/base/GridOverlays.js +4 -1
  297. package/node/components/cell/GridBooleanCell.js +93 -2
  298. package/node/components/cell/GridEditDateCell.js +7 -1
  299. package/node/components/cell/GridEditInputCell.js +15 -16
  300. package/node/components/cell/GridEditSingleSelectCell.js +10 -4
  301. package/node/components/cell/index.js +13 -0
  302. package/node/components/columnSelection/GridCellCheckboxRenderer.js +12 -1
  303. package/node/components/containers/GridRoot.js +3 -1
  304. package/node/components/containers/GridRootStyles.js +10 -0
  305. package/node/components/toolbar/GridToolbarDensitySelector.js +13 -4
  306. package/node/components/toolbar/GridToolbarExport.js +16 -10
  307. package/node/components/toolbar/GridToolbarExportContainer.js +13 -2
  308. package/node/constants/envConstants.js +2 -13
  309. package/node/constants/gridClasses.js +1 -1
  310. package/node/constants/localeTextConstants.js +9 -2
  311. package/node/hooks/features/columns/useGridColumnSpanning.js +9 -7
  312. package/node/hooks/features/columns/useGridColumns.js +13 -6
  313. package/node/hooks/features/dimensions/useGridDimensions.js +7 -1
  314. package/node/hooks/features/editRows/useGridCellEditing.new.js +11 -9
  315. package/node/hooks/features/editRows/useGridCellEditing.old.js +2 -2
  316. package/node/hooks/features/editRows/useGridEditing.new.js +4 -0
  317. package/node/hooks/features/editRows/useGridEditing.old.js +1 -1
  318. package/node/hooks/features/editRows/useGridRowEditing.new.js +7 -8
  319. package/node/hooks/features/export/utils.js +17 -2
  320. package/node/hooks/features/filter/gridFilterUtils.js +7 -0
  321. package/node/hooks/features/filter/useGridFilter.js +11 -4
  322. package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +43 -34
  323. package/node/hooks/features/pagination/useGridPage.js +4 -3
  324. package/node/hooks/features/pagination/useGridPageSize.js +8 -4
  325. package/node/hooks/features/preferencesPanel/useGridPreferencesPanel.js +12 -4
  326. package/node/hooks/features/rows/gridRowsSelector.js +24 -2
  327. package/node/hooks/features/rows/gridRowsUtils.js +23 -2
  328. package/node/hooks/features/rows/index.js +70 -12
  329. package/node/hooks/features/rows/useGridRowsMeta.js +20 -4
  330. package/node/hooks/features/rows/useGridRowsPreProcessors.js +2 -1
  331. package/node/hooks/features/scroll/useGridScroll.js +7 -1
  332. package/node/hooks/features/selection/useGridSelection.js +28 -10
  333. package/node/hooks/features/sorting/gridSortingUtils.js +10 -11
  334. package/node/hooks/features/sorting/useGridSorting.js +42 -6
  335. package/node/hooks/features/statePersistence/useGridStatePersistence.js +2 -2
  336. package/node/hooks/features/virtualization/useGridVirtualScroller.js +32 -18
  337. package/node/hooks/utils/useGridNativeEventListener.js +1 -1
  338. package/node/index.js +1 -1
  339. package/node/internals/index.js +46 -0
  340. package/node/locales/arSD.js +8 -1
  341. package/node/locales/bgBG.js +8 -1
  342. package/node/locales/csCZ.js +8 -1
  343. package/node/locales/daDK.js +8 -1
  344. package/node/locales/deDE.js +9 -2
  345. package/node/locales/elGR.js +8 -1
  346. package/node/locales/esES.js +8 -1
  347. package/node/locales/faIR.js +8 -1
  348. package/node/locales/fiFI.js +8 -1
  349. package/node/locales/frFR.js +9 -2
  350. package/node/locales/heIL.js +9 -2
  351. package/node/locales/huHU.js +8 -1
  352. package/node/locales/index.js +13 -0
  353. package/node/locales/itIT.js +21 -14
  354. package/node/locales/jaJP.js +11 -4
  355. package/node/locales/koKR.js +31 -24
  356. package/node/locales/nbNO.js +9 -2
  357. package/node/locales/nlNL.js +9 -2
  358. package/node/locales/plPL.js +8 -1
  359. package/node/locales/ptBR.js +9 -2
  360. package/node/locales/roRO.js +9 -2
  361. package/node/locales/ruRU.js +8 -1
  362. package/node/locales/skSK.js +9 -2
  363. package/node/locales/svSE.js +9 -2
  364. package/node/locales/trTR.js +8 -1
  365. package/node/locales/ukUA.js +8 -1
  366. package/node/locales/viVN.js +8 -1
  367. package/node/locales/zhCN.js +34 -27
  368. package/node/locales/zhTW.js +133 -0
  369. package/node/models/events/gridEvents.js +1 -0
  370. package/node/utils/keyboardUtils.js +10 -4
  371. package/package.json +1 -1
  372. package/utils/getGridLocalization.d.ts +1 -1
  373. package/utils/keyboardUtils.d.ts +2 -2
  374. package/utils/keyboardUtils.js +7 -2
@@ -87,11 +87,20 @@ const GridToolbarDensitySelector = /*#__PURE__*/React.forwardRef(function GridTo
87
87
  }, [densityValue, rootProps]);
88
88
 
89
89
  const handleDensitySelectorOpen = event => {
90
- setOpen(true);
90
+ setOpen(prevOpen => !prevOpen);
91
91
  onClick == null ? void 0 : onClick(event);
92
92
  };
93
93
 
94
- const handleDensitySelectorClose = () => setOpen(false);
94
+ const handleDensitySelectorClickAway = event => {
95
+ var _buttonRef$current;
96
+
97
+ if (buttonRef.current === event.target || // if user clicked on the icon
98
+ (_buttonRef$current = buttonRef.current) != null && _buttonRef$current.contains(event.target)) {
99
+ return;
100
+ }
101
+
102
+ setOpen(false);
103
+ };
95
104
 
96
105
  const handleDensityUpdate = newDensity => {
97
106
  apiRef.current.setDensity(newDensity);
@@ -104,7 +113,7 @@ const GridToolbarDensitySelector = /*#__PURE__*/React.forwardRef(function GridTo
104
113
  }
105
114
 
106
115
  if ((0, _keyboardUtils.isHideMenuKey)(event.key)) {
107
- handleDensitySelectorClose();
116
+ setOpen(false);
108
117
  }
109
118
  }; // Disable the button if the corresponding is disabled
110
119
 
@@ -137,7 +146,7 @@ const GridToolbarDensitySelector = /*#__PURE__*/React.forwardRef(function GridTo
137
146
  })), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridMenu.GridMenu, {
138
147
  open: open,
139
148
  target: buttonRef.current,
140
- onClickAway: handleDensitySelectorClose,
149
+ onClickAway: handleDensitySelectorClickAway,
141
150
  position: "bottom-start",
142
151
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_MenuList.default, {
143
152
  id: densityMenuId,
@@ -23,7 +23,9 @@ var _GridToolbarExportContainer = require("./GridToolbarExportContainer");
23
23
 
24
24
  var _jsxRuntime = require("react/jsx-runtime");
25
25
 
26
- const _excluded = ["csvOptions", "printOptions", "excelOptions"];
26
+ const _excluded = ["hideMenu", "options"],
27
+ _excluded2 = ["hideMenu", "options"],
28
+ _excluded3 = ["csvOptions", "printOptions", "excelOptions"];
27
29
 
28
30
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
29
31
 
@@ -34,14 +36,16 @@ const GridCsvExportMenuItem = props => {
34
36
  const {
35
37
  hideMenu,
36
38
  options
37
- } = props;
38
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_MenuItem.default, {
39
+ } = props,
40
+ other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
41
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_MenuItem.default, (0, _extends2.default)({
39
42
  onClick: () => {
40
43
  apiRef.current.exportDataAsCsv(options);
41
44
  hideMenu == null ? void 0 : hideMenu();
42
- },
45
+ }
46
+ }, other, {
43
47
  children: apiRef.current.getLocaleText('toolbarExportCSV')
44
- });
48
+ }));
45
49
  };
46
50
 
47
51
  exports.GridCsvExportMenuItem = GridCsvExportMenuItem;
@@ -51,14 +55,16 @@ const GridPrintExportMenuItem = props => {
51
55
  const {
52
56
  hideMenu,
53
57
  options
54
- } = props;
55
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_MenuItem.default, {
58
+ } = props,
59
+ other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded2);
60
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_MenuItem.default, (0, _extends2.default)({
56
61
  onClick: () => {
57
62
  apiRef.current.exportDataAsPrint(options);
58
63
  hideMenu == null ? void 0 : hideMenu();
59
- },
64
+ }
65
+ }, other, {
60
66
  children: apiRef.current.getLocaleText('toolbarExportPrint')
61
- });
67
+ }));
62
68
  };
63
69
 
64
70
  exports.GridPrintExportMenuItem = GridPrintExportMenuItem;
@@ -68,7 +74,7 @@ const GridToolbarExport = /*#__PURE__*/React.forwardRef(function GridToolbarExpo
68
74
  printOptions = {},
69
75
  excelOptions
70
76
  } = props,
71
- other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
77
+ other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded3);
72
78
  const apiRef = (0, _useGridApiContext.useGridApiContext)();
73
79
  const preProcessedButtons = apiRef.current.unstable_applyPipeProcessors('exportMenu', [], {
74
80
  excelOptions,
@@ -52,7 +52,7 @@ const GridToolbarExportContainer = /*#__PURE__*/React.forwardRef(function GridTo
52
52
  const handleRef = (0, _utils.useForkRef)(ref, buttonRef);
53
53
 
54
54
  const handleMenuOpen = event => {
55
- setOpen(true);
55
+ setOpen(prevOpen => !prevOpen);
56
56
  onClick == null ? void 0 : onClick(event);
57
57
  };
58
58
 
@@ -68,6 +68,17 @@ const GridToolbarExportContainer = /*#__PURE__*/React.forwardRef(function GridTo
68
68
  }
69
69
  };
70
70
 
71
+ const handleMenuClickAway = event => {
72
+ var _buttonRef$current;
73
+
74
+ if (buttonRef.current === event.target || // if user clicked on the icon
75
+ (_buttonRef$current = buttonRef.current) != null && _buttonRef$current.contains(event.target)) {
76
+ return;
77
+ }
78
+
79
+ setOpen(false);
80
+ };
81
+
71
82
  if (children == null) {
72
83
  return null;
73
84
  }
@@ -89,7 +100,7 @@ const GridToolbarExportContainer = /*#__PURE__*/React.forwardRef(function GridTo
89
100
  })), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridMenu.GridMenu, {
90
101
  open: open,
91
102
  target: buttonRef.current,
92
- onClickAway: handleMenuClose,
103
+ onClickAway: handleMenuClickAway,
93
104
  position: "bottom-start",
94
105
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_MenuList.default, {
95
106
  id: menuId,
@@ -4,10 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.GRID_EXPERIMENTAL_ENABLED = void 0;
7
-
8
- var _utils = require("../utils/utils");
9
-
10
- // A guide to feature toggling.
7
+ // A guide to feature toggling (deprecated)
11
8
  //
12
9
  // The feature toggle is:
13
10
  // - independent from the NODE_ENV
@@ -24,13 +21,5 @@ var _utils = require("../utils/utils");
24
21
  //
25
22
  // Developers (users) are discouraged to enable the experimental feature by setting the GRID_EXPERIMENTAL_ENABLED env.
26
23
  // Instead, prefer exposing experimental APIs, for instance, a prop or a new `unstable_` module.
27
- let experimentalEnabled = false;
28
-
29
- if (typeof process !== 'undefined' && process.env.GRID_EXPERIMENTAL_ENABLED !== undefined && (0, _utils.localStorageAvailable)() && window.localStorage.getItem('GRID_EXPERIMENTAL_ENABLED')) {
30
- experimentalEnabled = window.localStorage.getItem('GRID_EXPERIMENTAL_ENABLED') === 'true';
31
- } else if (typeof process !== 'undefined') {
32
- experimentalEnabled = process.env.GRID_EXPERIMENTAL_ENABLED === 'true';
33
- }
34
-
35
- const GRID_EXPERIMENTAL_ENABLED = experimentalEnabled;
24
+ const GRID_EXPERIMENTAL_ENABLED = false;
36
25
  exports.GRID_EXPERIMENTAL_ENABLED = GRID_EXPERIMENTAL_ENABLED;
@@ -12,5 +12,5 @@ function getDataGridUtilityClass(slot) {
12
12
  return (0, _material.generateUtilityClass)('MuiDataGrid', slot);
13
13
  }
14
14
 
15
- const gridClasses = (0, _material.generateUtilityClasses)('MuiDataGrid', ['actionsCell', 'autoHeight', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--withRenderer', 'cell', 'cellContent', 'cellCheckbox', 'checkboxInput', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderDropZone', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnHeaders', 'columnHeadersInner', 'columnHeadersInner--scrollable', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsPanel', 'columnsPanelRow', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filterForm', 'filterFormDeleteIcon', 'filterFormLinkOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'iconButtonContainer', 'iconSeparator', 'main', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'row', 'row--editable', 'row--editing', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'pinnedColumns--left', 'pinnedColumns--right', 'pinnedColumnHeaders', 'pinnedColumnHeaders--left', 'pinnedColumnHeaders--right', 'withBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'groupingCriteriaCell', 'groupingCriteriaCellToggle']);
15
+ const gridClasses = (0, _material.generateUtilityClasses)('MuiDataGrid', ['actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'autoHeight', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--withRenderer', 'cell', 'cellContent', 'cellCheckbox', 'checkboxInput', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderDropZone', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnHeaders', 'columnHeadersInner', 'columnHeadersInner--scrollable', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsPanel', 'columnsPanelRow', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filterForm', 'filterFormDeleteIcon', 'filterFormLinkOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'iconButtonContainer', 'iconSeparator', 'main', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'row', 'row--editable', 'row--editing', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'pinnedColumns--left', 'pinnedColumns--right', 'pinnedColumnHeaders', 'pinnedColumnHeaders--left', 'pinnedColumnHeaders--right', 'withBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pinnedRowsRenderZone']);
16
16
  exports.gridClasses = gridClasses;
@@ -25,7 +25,7 @@ const GRID_DEFAULT_LOCALE_TEXT = {
25
25
  toolbarFiltersTooltipShow: 'Show filters',
26
26
  toolbarFiltersTooltipActive: count => count !== 1 ? `${count} active filters` : `${count} active filter`,
27
27
  // Quick filter toolbar field
28
- toolbarQuickFilterPlaceholder: 'Search...',
28
+ toolbarQuickFilterPlaceholder: 'Search',
29
29
  toolbarQuickFilterLabel: 'Search',
30
30
  toolbarQuickFilterDeleteIconLabel: 'Clear',
31
31
  // Export selector toolbar button text
@@ -117,6 +117,13 @@ const GRID_DEFAULT_LOCALE_TEXT = {
117
117
  // Used core components translation keys
118
118
  MuiTablePagination: {},
119
119
  // Row reordering text
120
- rowReorderingHeaderName: 'Row reordering'
120
+ rowReorderingHeaderName: 'Row reordering',
121
+ // Aggregation
122
+ aggregationMenuItemHeader: 'Aggregation',
123
+ aggregationFunctionLabelSum: 'sum',
124
+ aggregationFunctionLabelAvg: 'avg',
125
+ aggregationFunctionLabelMin: 'min',
126
+ aggregationFunctionLabelMax: 'max',
127
+ aggregationFunctionLabelSize: 'size'
121
128
  };
122
129
  exports.GRID_DEFAULT_LOCALE_TEXT = GRID_DEFAULT_LOCALE_TEXT;
@@ -41,11 +41,11 @@ const useGridColumnSpanning = apiRef => {
41
41
  columnIndex,
42
42
  rowId,
43
43
  minFirstColumnIndex,
44
- maxLastColumnIndex
44
+ maxLastColumnIndex,
45
+ columns
45
46
  } = params;
46
- const visibleColumns = apiRef.current.getVisibleColumns();
47
- const columnsLength = visibleColumns.length;
48
- const column = visibleColumns[columnIndex];
47
+ const columnsLength = columns.length;
48
+ const column = columns[columnIndex];
49
49
  const colSpan = typeof column.colSpan === 'function' ? column.colSpan(apiRef.current.getCellParams(rowId, column.field)) : column.colSpan;
50
50
 
51
51
  if (!colSpan || colSpan === 1) {
@@ -67,7 +67,7 @@ const useGridColumnSpanning = apiRef => {
67
67
  const nextColumnIndex = columnIndex + j; // Cells should be spanned only within their column section (left-pinned, right-pinned and unpinned).
68
68
 
69
69
  if (nextColumnIndex >= minFirstColumnIndex && nextColumnIndex < maxLastColumnIndex) {
70
- const nextColumn = visibleColumns[nextColumnIndex];
70
+ const nextColumn = columns[nextColumnIndex];
71
71
  width += nextColumn.computedWidth;
72
72
  setCellColSpanInfo(rowId, columnIndex + j, {
73
73
  spannedByColSpan: true,
@@ -93,14 +93,16 @@ const useGridColumnSpanning = apiRef => {
93
93
  const calculateColSpan = React.useCallback(({
94
94
  rowId,
95
95
  minFirstColumn,
96
- maxLastColumn
96
+ maxLastColumn,
97
+ columns
97
98
  }) => {
98
99
  for (let i = minFirstColumn; i < maxLastColumn; i += 1) {
99
100
  const cellProps = calculateCellColSpan({
100
101
  columnIndex: i,
101
102
  rowId,
102
103
  minFirstColumnIndex: minFirstColumn,
103
- maxLastColumnIndex: maxLastColumn
104
+ maxLastColumnIndex: maxLastColumn,
105
+ columns
104
106
  });
105
107
 
106
108
  if (cellProps.colSpan > 1) {
@@ -63,7 +63,7 @@ const columnsStateInitializer = (state, props, apiRef) => {
63
63
  exports.columnsStateInitializer = columnsStateInitializer;
64
64
 
65
65
  function useGridColumns(apiRef, props) {
66
- var _props$componentsProp2;
66
+ var _props$initialState5, _props$componentsProp2;
67
67
 
68
68
  const logger = (0, _useGridLogger.useGridLogger)(apiRef, 'useGridColumns');
69
69
  const columnTypes = React.useMemo(() => (0, _gridColumnsUtils.computeColumnTypes)(props.columnTypes), [props.columnTypes]);
@@ -214,14 +214,21 @@ function useGridColumns(apiRef, props) {
214
214
  * PRE-PROCESSING
215
215
  */
216
216
 
217
- const stateExportPreProcessing = React.useCallback(prevState => {
217
+ const stateExportPreProcessing = React.useCallback((prevState, context) => {
218
218
  const columnsStateToExport = {};
219
219
 
220
220
  if (apiRef.current.unstable_caches.columns.isUsingColumnVisibilityModel) {
221
- const columnVisibilityModelToExport = (0, _gridColumnsSelector.gridColumnVisibilityModelSelector)(apiRef);
222
- const hasHiddenColumns = Object.values(columnVisibilityModelToExport).some(value => value === false);
221
+ var _props$initialState$c2, _props$initialState4, _props$initialState4$;
223
222
 
224
- if (hasHiddenColumns) {
223
+ const columnVisibilityModelToExport = (0, _gridColumnsSelector.gridColumnVisibilityModelSelector)(apiRef);
224
+ const shouldExportColumnVisibilityModel = // Always export if the `exportOnlyDirtyModels` property is activated
225
+ !context.exportOnlyDirtyModels || // Always export if the model is controlled
226
+ props.columnVisibilityModel != null || // Always export if the model has been initialized
227
+ // TODO v6 Do a nullish check instead to export even if the initial model equals "{}"
228
+ Object.keys((_props$initialState$c2 = (_props$initialState4 = props.initialState) == null ? void 0 : (_props$initialState4$ = _props$initialState4.columns) == null ? void 0 : _props$initialState4$.columnVisibilityModel) != null ? _props$initialState$c2 : {}).length > 0 || // Always export if the model is not empty
229
+ Object.keys(columnVisibilityModelToExport).length > 0;
230
+
231
+ if (shouldExportColumnVisibilityModel) {
225
232
  columnsStateToExport.columnVisibilityModel = columnVisibilityModelToExport;
226
233
  }
227
234
  }
@@ -254,7 +261,7 @@ function useGridColumns(apiRef, props) {
254
261
  return (0, _extends2.default)({}, prevState, {
255
262
  columns: columnsStateToExport
256
263
  });
257
- }, [apiRef]);
264
+ }, [apiRef, props.columnVisibilityModel, (_props$initialState5 = props.initialState) == null ? void 0 : _props$initialState5.columns]);
258
265
  const stateRestorePreProcessing = React.useCallback((params, context) => {
259
266
  var _context$stateToResto;
260
267
 
@@ -25,6 +25,8 @@ var _useGridVisibleRows = require("../../utils/useGridVisibleRows");
25
25
 
26
26
  var _gridRowsMetaSelector = require("../rows/gridRowsMetaSelector");
27
27
 
28
+ var _gridRowsUtils = require("../rows/gridRowsUtils");
29
+
28
30
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
29
31
 
30
32
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -68,6 +70,7 @@ function useGridDimensions(apiRef, props) {
68
70
 
69
71
  const rootElement = (_apiRef$current$rootE = apiRef.current.rootElementRef) == null ? void 0 : _apiRef$current$rootE.current;
70
72
  const columnsTotalWidth = (0, _columns.gridColumnsTotalWidthSelector)(apiRef);
73
+ const pinnedRowsHeight = (0, _gridRowsUtils.calculatePinnedRowsHeight)(apiRef);
71
74
 
72
75
  if (!rootDimensionsRef.current) {
73
76
  return;
@@ -113,7 +116,10 @@ function useGridDimensions(apiRef, props) {
113
116
  width: Math.round(columnsTotalWidth),
114
117
  height: rowsMeta.currentPageTotalHeight
115
118
  },
116
- container: viewportOuterSize,
119
+ container: {
120
+ width: viewportOuterSize.width,
121
+ height: viewportOuterSize.height - pinnedRowsHeight.top - pinnedRowsHeight.bottom
122
+ },
117
123
  scrollBarSize
118
124
  });
119
125
  hasScrollY = scrollInformation.hasScrollY;
@@ -121,15 +121,14 @@ const useGridCellEditing = (apiRef, props) => {
121
121
  } else if (params.isEditable) {
122
122
  let reason;
123
123
 
124
- if ((0, _keyboardUtils.isPrintableKey)(event.key)) {
125
- if (event.ctrlKey && event.key !== 'v' || event.metaKey && event.key !== 'v' || event.altKey) {
126
- return;
127
- }
128
-
124
+ if ((0, _keyboardUtils.isPrintableKey)(event)) {
125
+ reason = _gridEditCellParams.GridCellEditStartReasons.printableKeyDown;
126
+ } else if ((event.ctrlKey || event.metaKey) && event.key === 'v') {
129
127
  reason = _gridEditCellParams.GridCellEditStartReasons.printableKeyDown;
130
128
  } else if (event.key === 'Enter') {
131
129
  reason = _gridEditCellParams.GridCellEditStartReasons.enterKeyDown;
132
- } else if (event.key === 'Delete') {
130
+ } else if (event.key === 'Delete' || event.key === 'Backspace') {
131
+ // Delete on Windows, Backspace on macOS
133
132
  reason = _gridEditCellParams.GridCellEditStartReasons.deleteKeyDown;
134
133
  }
135
134
 
@@ -164,6 +163,7 @@ const useGridCellEditing = (apiRef, props) => {
164
163
  field,
165
164
  reason
166
165
  } = params;
166
+ apiRef.current.unstable_runPendingEditCellValueMutation(id, field);
167
167
  let cellToFocusAfter;
168
168
 
169
169
  if (reason === _gridEditCellParams.GridCellEditStopReasons.enterKeyDown) {
@@ -177,7 +177,7 @@ const useGridCellEditing = (apiRef, props) => {
177
177
  let ignoreModifications = reason === 'escapeKeyDown';
178
178
  const editingState = (0, _gridEditRowsSelector.gridEditRowsStateSelector)(apiRef.current.state);
179
179
 
180
- if (editingState[id][field].isProcessingProps) {
180
+ if (editingState[id][field].isProcessingProps && !props.disableIgnoreModificationsIfProcessingProps) {
181
181
  // The user wants to stop editing the cell but we can't wait for the props to be processed.
182
182
  // In this case, discard the modifications.
183
183
  ignoreModifications = true;
@@ -189,7 +189,7 @@ const useGridCellEditing = (apiRef, props) => {
189
189
  ignoreModifications,
190
190
  cellToFocusAfter
191
191
  });
192
- }, [apiRef]);
192
+ }, [apiRef, props.disableIgnoreModificationsIfProcessingProps]);
193
193
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'cellDoubleClick', runIfEditModeIsCell(handleCellDoubleClick));
194
194
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'cellFocusOut', runIfEditModeIsCell(handleCellFocusOut));
195
195
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'cellKeyDown', runIfEditModeIsCell(handleCellKeyDown));
@@ -363,6 +363,8 @@ const useGridCellEditing = (apiRef, props) => {
363
363
  }
364
364
  }, [apiRef, onProcessRowUpdateError, processRowUpdate, throwIfNotInMode, updateFieldInCellModesModel, updateOrDeleteFieldState]);
365
365
  const setCellEditingEditCellValue = React.useCallback(async params => {
366
+ var _editingState$id, _editingState$id$fiel;
367
+
366
368
  const {
367
369
  id,
368
370
  field,
@@ -413,7 +415,7 @@ const useGridCellEditing = (apiRef, props) => {
413
415
  newProps.value = column.preProcessEditCellProps ? editingState[id][field].value : parsedValue;
414
416
  updateOrDeleteFieldState(id, field, newProps);
415
417
  editingState = (0, _gridEditRowsSelector.gridEditRowsStateSelector)(apiRef.current.state);
416
- return !editingState[id][field].error;
418
+ return !((_editingState$id = editingState[id]) != null && (_editingState$id$fiel = _editingState$id[field]) != null && _editingState$id$fiel.error);
417
419
  }, [apiRef, throwIfNotEditable, throwIfNotInMode, updateOrDeleteFieldState]);
418
420
  const getRowWithUpdatedValuesFromCellEditing = React.useCallback((id, field) => {
419
421
  const column = apiRef.current.getColumn(field);
@@ -219,7 +219,7 @@ const useCellEditing = (apiRef, props) => {
219
219
  const isEditMode = cellMode === _gridEditRowModel.GridCellModes.Edit;
220
220
  const isModifierKeyPressed = event.ctrlKey || event.metaKey || event.altKey;
221
221
 
222
- if (!isEditMode && (0, _keyboardUtils.isCellEnterEditModeKeys)(event.key) && !isModifierKeyPressed && !(event.key === ' ' && event.shiftKey)) {
222
+ if (!isEditMode && (0, _keyboardUtils.isCellEnterEditModeKeys)(event) && !isModifierKeyPressed && !(event.key === ' ' && event.shiftKey)) {
223
223
  apiRef.current.publishEvent('cellEditStart', params, event);
224
224
  }
225
225
 
@@ -289,7 +289,7 @@ const useCellEditing = (apiRef, props) => {
289
289
 
290
290
  apiRef.current.setCellMode(params.id, params.field, _gridEditRowModel.GridCellModes.Edit);
291
291
 
292
- if ((0, _keyboardUtils.isKeyboardEvent)(event) && (0, _keyboardUtils.isPrintableKey)(event.key)) {
292
+ if ((0, _keyboardUtils.isKeyboardEvent)(event) && (0, _keyboardUtils.isPrintableKey)(event)) {
293
293
  apiRef.current.unstable_setEditCellProps({
294
294
  id: params.id,
295
295
  field: params.field,
@@ -53,6 +53,10 @@ const useGridEditing = (apiRef, props) => {
53
53
  return isCellEditableProp(params);
54
54
  }
55
55
 
56
+ if (params.rowNode.isPinned) {
57
+ return false;
58
+ }
59
+
56
60
  return true;
57
61
  }, [isCellEditableProp]);
58
62
 
@@ -56,7 +56,7 @@ function useGridEditing(apiRef, props) {
56
56
  stateSelector: _gridEditRowsSelector.gridEditRowsStateSelector,
57
57
  changeEvent: 'editRowsModelChange'
58
58
  });
59
- const isCellEditable = React.useCallback(params => !params.rowNode.isAutoGenerated && !!params.colDef.editable && !!params.colDef.renderEditCell && (!props.isCellEditable || props.isCellEditable(params)), // eslint-disable-next-line react-hooks/exhaustive-deps
59
+ const isCellEditable = React.useCallback(params => !params.rowNode.isAutoGenerated && !params.rowNode.isPinned && !!params.colDef.editable && !!params.colDef.renderEditCell && (!props.isCellEditable || props.isCellEditable(params)), // eslint-disable-next-line react-hooks/exhaustive-deps
60
60
  [props.isCellEditable]);
61
61
 
62
62
  const maybeDebounce = (id, field, debounceMs, callback) => {
@@ -175,15 +175,14 @@ const useGridRowEditing = (apiRef, props) => {
175
175
  } else if (params.isEditable) {
176
176
  let reason;
177
177
 
178
- if ((0, _keyboardUtils.isPrintableKey)(event.key)) {
179
- if (event.ctrlKey && event.key !== 'v' || event.metaKey && event.key !== 'v' || event.altKey) {
180
- return;
181
- }
182
-
178
+ if ((0, _keyboardUtils.isPrintableKey)(event)) {
179
+ reason = _gridRowParams.GridRowEditStartReasons.printableKeyDown;
180
+ } else if ((event.ctrlKey || event.metaKey) && event.key === 'v') {
183
181
  reason = _gridRowParams.GridRowEditStartReasons.printableKeyDown;
184
182
  } else if (event.key === 'Enter') {
185
183
  reason = _gridRowParams.GridRowEditStartReasons.enterKeyDown;
186
- } else if (event.key === 'Delete') {
184
+ } else if (event.key === 'Delete' || event.key === 'Backspace') {
185
+ // Delete on Windows, Backspace on macOS
187
186
  reason = _gridRowParams.GridRowEditStartReasons.deleteKeyDown;
188
187
  }
189
188
 
@@ -234,7 +233,7 @@ const useGridRowEditing = (apiRef, props) => {
234
233
  let ignoreModifications = reason === 'escapeKeyDown';
235
234
  const editingState = (0, _gridEditRowsSelector.gridEditRowsStateSelector)(apiRef.current.state);
236
235
 
237
- if (!ignoreModifications) {
236
+ if (!ignoreModifications && !props.disableIgnoreModificationsIfProcessingProps) {
238
237
  // The user wants to stop editing the cell but we can't wait for the props to be processed.
239
238
  // In this case, discard the modifications if any field is processing its props.
240
239
  ignoreModifications = Object.values(editingState[id]).some(fieldProps => {
@@ -248,7 +247,7 @@ const useGridRowEditing = (apiRef, props) => {
248
247
  field,
249
248
  cellToFocusAfter
250
249
  });
251
- }, [apiRef]);
250
+ }, [apiRef, props.disableIgnoreModificationsIfProcessingProps]);
252
251
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'cellDoubleClick', runIfEditModeIsRow(handleCellDoubleClick));
253
252
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'cellFocusIn', runIfEditModeIsRow(handleCellFocusIn));
254
253
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'cellFocusOut', runIfEditModeIsRow(handleCellFocusOut));
@@ -9,6 +9,8 @@ var _columns = require("../columns");
9
9
 
10
10
  var _filter = require("../filter");
11
11
 
12
+ var _gridRowsSelector = require("../rows/gridRowsSelector");
13
+
12
14
  const getColumnsToExport = ({
13
15
  apiRef,
14
16
  options
@@ -28,14 +30,27 @@ exports.getColumnsToExport = getColumnsToExport;
28
30
  const defaultGetRowsToExport = ({
29
31
  apiRef
30
32
  }) => {
33
+ var _pinnedRows$top, _pinnedRows$bottom;
34
+
31
35
  const filteredSortedRowIds = (0, _filter.gridFilteredSortedRowIdsSelector)(apiRef);
36
+ const rowTree = (0, _gridRowsSelector.gridRowTreeSelector)(apiRef);
32
37
  const selectedRows = apiRef.current.getSelectedRows();
38
+ const bodyRows = filteredSortedRowIds.filter(id => {
39
+ var _rowTree$id$position;
40
+
41
+ return ((_rowTree$id$position = rowTree[id].position) != null ? _rowTree$id$position : 'body') === 'body';
42
+ });
43
+ const pinnedRows = (0, _gridRowsSelector.gridPinnedRowsSelector)(apiRef);
44
+ const topPinnedRowsIds = (pinnedRows == null ? void 0 : (_pinnedRows$top = pinnedRows.top) == null ? void 0 : _pinnedRows$top.map(row => row.id)) || [];
45
+ const bottomPinnedRowsIds = (pinnedRows == null ? void 0 : (_pinnedRows$bottom = pinnedRows.bottom) == null ? void 0 : _pinnedRows$bottom.map(row => row.id)) || [];
46
+ bodyRows.unshift(...topPinnedRowsIds);
47
+ bodyRows.push(...bottomPinnedRowsIds);
33
48
 
34
49
  if (selectedRows.size > 0) {
35
- return filteredSortedRowIds.filter(id => selectedRows.has(id));
50
+ return bodyRows.filter(id => selectedRows.has(id));
36
51
  }
37
52
 
38
- return filteredSortedRowIds;
53
+ return bodyRows;
39
54
  };
40
55
 
41
56
  exports.defaultGetRowsToExport = defaultGetRowsToExport;
@@ -15,6 +15,8 @@ var _warning = require("../../../utils/warning");
15
15
 
16
16
  var _columns = require("../columns");
17
17
 
18
+ var _gridRowsSelector = require("../rows/gridRowsSelector");
19
+
18
20
  /**
19
21
  * Adds default values to the optional fields of a filter items.
20
22
  * @param {GridFilterItem} item The raw filter item.
@@ -101,6 +103,7 @@ const buildAggregatedFilterItemsApplier = (filterModel, apiRef) => {
101
103
  items,
102
104
  linkOperator = _models.GridLinkOperator.And
103
105
  } = filterModel;
106
+ const tree = (0, _gridRowsSelector.gridRowTreeSelector)(apiRef);
104
107
 
105
108
  const getFilterCallbackFromItem = filterItem => {
106
109
  if (!filterItem.columnField || !filterItem.operatorValue) {
@@ -163,6 +166,10 @@ const buildAggregatedFilterItemsApplier = (filterModel, apiRef) => {
163
166
  }
164
167
 
165
168
  return (rowId, shouldApplyFilter) => {
169
+ if (tree[rowId].position === 'footer') {
170
+ return true;
171
+ }
172
+
166
173
  const filteredAppliers = shouldApplyFilter ? appliers.filter(applier => shouldApplyFilter(applier.item.columnField)) : appliers; // Return `false` as soon as we have a failing filter
167
174
 
168
175
  if (linkOperator === _models.GridLinkOperator.And) {
@@ -67,7 +67,7 @@ const filterStateInitializer = (state, props, apiRef) => {
67
67
  exports.filterStateInitializer = filterStateInitializer;
68
68
 
69
69
  const useGridFilter = (apiRef, props) => {
70
- var _props$componentsProp2;
70
+ var _props$initialState3, _props$initialState3$, _props$componentsProp2;
71
71
 
72
72
  const logger = (0, _useGridLogger.useGridLogger)(apiRef, 'useGridFilter');
73
73
  apiRef.current.unstable_registerControlState({
@@ -243,10 +243,17 @@ const useGridFilter = (apiRef, props) => {
243
243
  * PRE-PROCESSING
244
244
  */
245
245
 
246
- const stateExportPreProcessing = React.useCallback(prevState => {
246
+ const stateExportPreProcessing = React.useCallback((prevState, context) => {
247
+ var _props$initialState2, _props$initialState2$;
248
+
247
249
  const filterModelToExport = (0, _gridFilterSelector.gridFilterModelSelector)(apiRef);
250
+ const shouldExportFilterModel = // Always export if the `exportOnlyDirtyModels` property is activated
251
+ !context.exportOnlyDirtyModels || // Always export if the model is controlled
252
+ props.filterModel != null || // Always export if the model has been initialized
253
+ ((_props$initialState2 = props.initialState) == null ? void 0 : (_props$initialState2$ = _props$initialState2.filter) == null ? void 0 : _props$initialState2$.filterModel) != null || // Export if the model is not equal to the default value
254
+ !(0, _utils.isDeepEqual)(filterModelToExport, (0, _gridFilterState.getDefaultGridFilterModel)());
248
255
 
249
- if (filterModelToExport.items.length === 0 && filterModelToExport.linkOperator === (0, _gridFilterState.getDefaultGridFilterModel)().linkOperator) {
256
+ if (!shouldExportFilterModel) {
250
257
  return prevState;
251
258
  }
252
259
 
@@ -255,7 +262,7 @@ const useGridFilter = (apiRef, props) => {
255
262
  filterModel: filterModelToExport
256
263
  }
257
264
  });
258
- }, [apiRef]);
265
+ }, [apiRef, props.filterModel, (_props$initialState3 = props.initialState) == null ? void 0 : (_props$initialState3$ = _props$initialState3.filter) == null ? void 0 : _props$initialState3$.filterModel]);
259
266
  const stateRestorePreProcessing = React.useCallback((params, context) => {
260
267
  var _context$stateToResto;
261
268