@mui/x-data-grid 6.4.0 → 6.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (403) hide show
  1. package/CHANGELOG.md +134 -2
  2. package/DataGrid/DataGrid.js +10 -3
  3. package/DataGrid/useDataGridProps.js +5 -12
  4. package/README.md +2 -2
  5. package/colDef/gridNumericOperators.js +0 -6
  6. package/components/GridColumnHeaders.js +4 -9
  7. package/components/GridHeader.d.ts +2 -2
  8. package/components/base/GridBody.d.ts +1 -1
  9. package/components/base/GridFooterPlaceholder.d.ts +2 -2
  10. package/components/base/GridOverlays.d.ts +2 -2
  11. package/components/cell/GridActionsCell.d.ts +3 -3
  12. package/components/cell/GridActionsCell.js +3 -3
  13. package/components/cell/GridBooleanCell.d.ts +1 -1
  14. package/components/cell/GridEditBooleanCell.d.ts +2 -2
  15. package/components/cell/GridEditDateCell.d.ts +2 -2
  16. package/components/cell/GridEditInputCell.d.ts +1 -1
  17. package/components/cell/GridEditInputCell.js +4 -1
  18. package/components/cell/GridEditSingleSelectCell.d.ts +3 -3
  19. package/components/cell/GridEditSingleSelectCell.js +5 -5
  20. package/components/cell/GridSkeletonCell.d.ts +1 -1
  21. package/components/columnHeaders/ColumnHeaderMenuIcon.d.ts +1 -1
  22. package/components/columnHeaders/ColumnHeaderMenuIcon.js +3 -3
  23. package/components/columnHeaders/GridColumnGroupHeader.d.ts +2 -2
  24. package/components/columnHeaders/GridColumnHeaderFilterIconButton.d.ts +1 -1
  25. package/components/columnHeaders/GridColumnHeaderFilterIconButton.js +13 -4
  26. package/components/columnHeaders/GridColumnHeaderItem.d.ts +2 -2
  27. package/components/columnHeaders/GridColumnHeaderSeparator.d.ts +1 -1
  28. package/components/columnHeaders/GridColumnHeaderSortIcon.d.ts +1 -1
  29. package/components/columnHeaders/GridColumnHeaderTitle.d.ts +1 -1
  30. package/components/containers/GridRoot.js +1 -3
  31. package/components/index.d.ts +0 -1
  32. package/components/index.js +1 -2
  33. package/components/menu/GridMenu.d.ts +1 -1
  34. package/components/menu/columnMenu/GridColumnHeaderMenu.d.ts +1 -1
  35. package/components/menu/columnMenu/menuItems/GridColumnMenuColumnsItem.d.ts +2 -2
  36. package/components/menu/columnMenu/menuItems/GridColumnMenuFilterItem.d.ts +2 -2
  37. package/components/menu/columnMenu/menuItems/GridColumnMenuHideItem.d.ts +2 -2
  38. package/components/menu/columnMenu/menuItems/GridColumnMenuManageItem.d.ts +2 -2
  39. package/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.d.ts +2 -2
  40. package/components/panel/GridColumnsPanel.d.ts +2 -2
  41. package/components/panel/GridPanelContent.d.ts +1 -1
  42. package/components/panel/GridPanelFooter.d.ts +1 -1
  43. package/components/panel/GridPanelHeader.d.ts +1 -1
  44. package/components/panel/GridPreferencesPanel.js +3 -1
  45. package/components/panel/filterPanel/GridFilterInputBoolean.d.ts +15 -2
  46. package/components/panel/filterPanel/GridFilterInputBoolean.js +80 -36
  47. package/components/panel/filterPanel/GridFilterInputDate.d.ts +9 -2
  48. package/components/panel/filterPanel/GridFilterInputDate.js +27 -6
  49. package/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.d.ts +2 -2
  50. package/components/panel/filterPanel/GridFilterInputMultipleValue.d.ts +2 -2
  51. package/components/panel/filterPanel/GridFilterInputSingleSelect.d.ts +9 -2
  52. package/components/panel/filterPanel/GridFilterInputSingleSelect.js +56 -32
  53. package/components/panel/filterPanel/GridFilterInputValue.d.ts +11 -4
  54. package/components/panel/filterPanel/GridFilterInputValue.js +29 -6
  55. package/components/panel/filterPanel/GridFilterPanel.d.ts +2 -1
  56. package/components/panel/filterPanel/GridFilterPanel.js +1 -1
  57. package/components/panel/filterPanel/index.d.ts +3 -1
  58. package/components/panel/filterPanel/index.js +2 -1
  59. package/components/toolbar/GridToolbarColumnsButton.js +11 -6
  60. package/components/toolbar/GridToolbarDensitySelector.js +2 -2
  61. package/components/toolbar/GridToolbarExport.d.ts +2 -2
  62. package/components/toolbar/GridToolbarExportContainer.js +7 -7
  63. package/components/toolbar/GridToolbarFilterButton.js +11 -4
  64. package/components/toolbar/GridToolbarQuickFilter.d.ts +2 -2
  65. package/constants/localeTextConstants.js +26 -0
  66. package/context/GridContextProvider.d.ts +1 -1
  67. package/hooks/core/strategyProcessing/gridStrategyProcessingApi.d.ts +10 -2
  68. package/hooks/core/strategyProcessing/useGridStrategyProcessing.js +2 -1
  69. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +10 -3
  70. package/hooks/features/columnHeaders/useGridColumnHeaders.js +4 -2
  71. package/hooks/features/dimensions/useGridDimensions.js +2 -2
  72. package/hooks/features/editing/useGridEditing.js +0 -3
  73. package/hooks/features/filter/gridFilterSelector.d.ts +2 -2
  74. package/hooks/features/filter/gridFilterSelector.js +2 -2
  75. package/hooks/features/filter/gridFilterState.d.ts +6 -6
  76. package/hooks/features/filter/gridFilterState.js +6 -0
  77. package/hooks/features/filter/useGridFilter.js +29 -9
  78. package/hooks/features/focus/gridFocusState.d.ts +2 -0
  79. package/hooks/features/focus/gridFocusStateSelector.d.ts +2 -0
  80. package/hooks/features/focus/gridFocusStateSelector.js +6 -0
  81. package/hooks/features/focus/useGridFocus.js +55 -9
  82. package/hooks/features/headerFiltering/gridHeaderFilteringSelectors.d.ts +4 -0
  83. package/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +5 -0
  84. package/hooks/features/headerFiltering/index.d.ts +1 -0
  85. package/hooks/features/headerFiltering/index.js +1 -0
  86. package/hooks/features/headerFiltering/useGridHeaderFiltering.d.ts +6 -0
  87. package/hooks/features/headerFiltering/useGridHeaderFiltering.js +91 -0
  88. package/hooks/features/index.d.ts +1 -0
  89. package/hooks/features/index.js +2 -1
  90. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.d.ts +1 -1
  91. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +113 -4
  92. package/hooks/features/preferencesPanel/gridPreferencePanelState.d.ts +2 -0
  93. package/hooks/features/preferencesPanel/useGridPreferencesPanel.js +4 -2
  94. package/hooks/features/rows/useGridRows.js +16 -1
  95. package/hooks/features/rows/useGridRowsMeta.js +11 -12
  96. package/index.js +1 -1
  97. package/internals/index.d.ts +6 -1
  98. package/internals/index.js +4 -0
  99. package/internals/utils/index.d.ts +1 -0
  100. package/internals/utils/index.js +2 -1
  101. package/internals/utils/useProps.d.ts +8 -0
  102. package/internals/utils/useProps.js +33 -0
  103. package/legacy/DataGrid/DataGrid.js +10 -3
  104. package/legacy/DataGrid/useDataGridProps.js +8 -8
  105. package/legacy/colDef/gridNumericOperators.js +0 -6
  106. package/legacy/components/GridColumnHeaders.js +4 -9
  107. package/legacy/components/cell/GridActionsCell.js +3 -3
  108. package/legacy/components/cell/GridEditInputCell.js +4 -1
  109. package/legacy/components/cell/GridEditSingleSelectCell.js +5 -5
  110. package/legacy/components/columnHeaders/ColumnHeaderMenuIcon.js +3 -3
  111. package/legacy/components/columnHeaders/GridColumnHeaderFilterIconButton.js +13 -4
  112. package/legacy/components/containers/GridRoot.js +1 -3
  113. package/legacy/components/index.js +1 -2
  114. package/legacy/components/panel/GridPreferencesPanel.js +3 -1
  115. package/legacy/components/panel/filterPanel/GridFilterInputBoolean.js +79 -35
  116. package/legacy/components/panel/filterPanel/GridFilterInputDate.js +26 -5
  117. package/legacy/components/panel/filterPanel/GridFilterInputSingleSelect.js +55 -31
  118. package/legacy/components/panel/filterPanel/GridFilterInputValue.js +28 -5
  119. package/legacy/components/panel/filterPanel/GridFilterPanel.js +1 -1
  120. package/legacy/components/panel/filterPanel/index.js +2 -1
  121. package/legacy/components/toolbar/GridToolbarColumnsButton.js +11 -5
  122. package/legacy/components/toolbar/GridToolbarDensitySelector.js +2 -2
  123. package/legacy/components/toolbar/GridToolbarExportContainer.js +7 -7
  124. package/legacy/components/toolbar/GridToolbarFilterButton.js +11 -4
  125. package/legacy/constants/localeTextConstants.js +26 -0
  126. package/legacy/hooks/core/strategyProcessing/useGridStrategyProcessing.js +2 -1
  127. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +5 -5
  128. package/legacy/hooks/features/dimensions/useGridDimensions.js +2 -2
  129. package/legacy/hooks/features/editing/useGridEditing.js +0 -3
  130. package/legacy/hooks/features/filter/gridFilterSelector.js +4 -4
  131. package/legacy/hooks/features/filter/gridFilterState.js +6 -0
  132. package/legacy/hooks/features/filter/useGridFilter.js +29 -9
  133. package/legacy/hooks/features/focus/gridFocusStateSelector.js +10 -0
  134. package/legacy/hooks/features/focus/useGridFocus.js +58 -9
  135. package/legacy/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +11 -0
  136. package/legacy/hooks/features/headerFiltering/index.js +1 -0
  137. package/legacy/hooks/features/headerFiltering/useGridHeaderFiltering.js +93 -0
  138. package/legacy/hooks/features/index.js +2 -1
  139. package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +113 -4
  140. package/legacy/hooks/features/preferencesPanel/useGridPreferencesPanel.js +4 -2
  141. package/legacy/hooks/features/rows/useGridRows.js +16 -1
  142. package/legacy/hooks/features/rows/useGridRowsMeta.js +12 -20
  143. package/legacy/index.js +1 -1
  144. package/legacy/internals/index.js +4 -0
  145. package/legacy/internals/utils/index.js +2 -1
  146. package/legacy/internals/utils/useProps.js +33 -0
  147. package/legacy/locales/arSD.js +28 -0
  148. package/legacy/locales/beBY.js +28 -0
  149. package/legacy/locales/bgBG.js +28 -0
  150. package/legacy/locales/csCZ.js +36 -8
  151. package/legacy/locales/daDK.js +28 -0
  152. package/legacy/locales/deDE.js +28 -0
  153. package/legacy/locales/elGR.js +27 -0
  154. package/legacy/locales/esES.js +28 -0
  155. package/legacy/locales/faIR.js +28 -0
  156. package/legacy/locales/fiFI.js +28 -0
  157. package/legacy/locales/frFR.js +26 -0
  158. package/legacy/locales/heIL.js +30 -2
  159. package/legacy/locales/huHU.js +28 -0
  160. package/legacy/locales/itIT.js +28 -0
  161. package/legacy/locales/jaJP.js +28 -0
  162. package/legacy/locales/koKR.js +28 -0
  163. package/legacy/locales/nbNO.js +28 -0
  164. package/legacy/locales/nlNL.js +26 -0
  165. package/legacy/locales/plPL.js +28 -0
  166. package/legacy/locales/ptBR.js +28 -0
  167. package/legacy/locales/roRO.js +28 -0
  168. package/legacy/locales/ruRU.js +28 -0
  169. package/legacy/locales/skSK.js +28 -0
  170. package/legacy/locales/svSE.js +28 -0
  171. package/legacy/locales/trTR.js +28 -0
  172. package/legacy/locales/ukUA.js +28 -0
  173. package/legacy/locales/urPK.js +28 -0
  174. package/legacy/locales/viVN.js +27 -0
  175. package/legacy/locales/zhCN.js +28 -0
  176. package/legacy/locales/zhTW.js +28 -0
  177. package/legacy/material/index.js +2 -0
  178. package/legacy/models/api/gridHeaderFilteringApi.js +1 -0
  179. package/legacy/models/gridFilterItem.js +1 -1
  180. package/legacy/models/gridHeaderFilteringModel.js +1 -0
  181. package/legacy/models/index.js +0 -1
  182. package/locales/arSD.js +28 -0
  183. package/locales/beBY.js +28 -0
  184. package/locales/bgBG.js +28 -0
  185. package/locales/csCZ.js +36 -8
  186. package/locales/daDK.js +28 -0
  187. package/locales/deDE.js +28 -0
  188. package/locales/elGR.js +27 -0
  189. package/locales/esES.js +28 -0
  190. package/locales/faIR.js +28 -0
  191. package/locales/fiFI.js +28 -0
  192. package/locales/frFR.js +26 -0
  193. package/locales/heIL.js +30 -2
  194. package/locales/huHU.js +28 -0
  195. package/locales/itIT.js +28 -0
  196. package/locales/jaJP.js +28 -0
  197. package/locales/koKR.js +28 -0
  198. package/locales/nbNO.js +28 -0
  199. package/locales/nlNL.js +26 -0
  200. package/locales/plPL.js +28 -0
  201. package/locales/ptBR.js +28 -0
  202. package/locales/roRO.js +28 -0
  203. package/locales/ruRU.js +28 -0
  204. package/locales/skSK.js +28 -0
  205. package/locales/svSE.js +28 -0
  206. package/locales/trTR.js +28 -0
  207. package/locales/ukUA.js +28 -0
  208. package/locales/urPK.js +28 -0
  209. package/locales/viVN.js +27 -0
  210. package/locales/zhCN.js +28 -0
  211. package/locales/zhTW.js +28 -0
  212. package/material/components/MUISelectOption.d.ts +2 -2
  213. package/material/index.d.ts +3 -66
  214. package/material/index.js +2 -0
  215. package/models/api/gridApiCommon.d.ts +3 -2
  216. package/models/api/gridCoreApi.d.ts +4 -0
  217. package/models/api/gridFilterApi.d.ts +3 -1
  218. package/models/api/gridFocusApi.d.ts +6 -0
  219. package/models/api/gridHeaderFilteringApi.d.ts +30 -0
  220. package/models/api/gridHeaderFilteringApi.js +1 -0
  221. package/models/api/gridLocaleTextApi.d.ts +25 -0
  222. package/models/api/gridPreferencesPanelApi.d.ts +3 -1
  223. package/models/events/gridEventLookup.d.ts +27 -1
  224. package/models/gridFilterItem.d.ts +1 -1
  225. package/models/gridFilterItem.js +1 -1
  226. package/models/gridFilterOperator.d.ts +5 -1
  227. package/models/gridHeaderFilteringModel.d.ts +5 -0
  228. package/models/gridHeaderFilteringModel.js +1 -0
  229. package/models/gridSlotsComponent.d.ts +16 -4
  230. package/models/gridStateCommunity.d.ts +4 -0
  231. package/models/index.d.ts +1 -1
  232. package/models/index.js +0 -1
  233. package/models/props/DataGridProps.d.ts +5 -0
  234. package/modern/DataGrid/DataGrid.js +10 -3
  235. package/modern/DataGrid/useDataGridProps.js +5 -12
  236. package/modern/colDef/gridNumericOperators.js +0 -6
  237. package/modern/components/GridColumnHeaders.js +4 -9
  238. package/modern/components/cell/GridActionsCell.js +3 -3
  239. package/modern/components/cell/GridEditInputCell.js +4 -1
  240. package/modern/components/cell/GridEditSingleSelectCell.js +5 -5
  241. package/modern/components/columnHeaders/ColumnHeaderMenuIcon.js +3 -3
  242. package/modern/components/columnHeaders/GridColumnHeaderFilterIconButton.js +13 -4
  243. package/modern/components/containers/GridRoot.js +1 -3
  244. package/modern/components/index.js +1 -2
  245. package/modern/components/panel/GridPreferencesPanel.js +3 -1
  246. package/modern/components/panel/filterPanel/GridFilterInputBoolean.js +80 -36
  247. package/modern/components/panel/filterPanel/GridFilterInputDate.js +27 -6
  248. package/modern/components/panel/filterPanel/GridFilterInputSingleSelect.js +56 -32
  249. package/modern/components/panel/filterPanel/GridFilterInputValue.js +29 -6
  250. package/modern/components/panel/filterPanel/GridFilterPanel.js +1 -1
  251. package/modern/components/panel/filterPanel/index.js +2 -1
  252. package/modern/components/toolbar/GridToolbarColumnsButton.js +11 -6
  253. package/modern/components/toolbar/GridToolbarDensitySelector.js +2 -2
  254. package/modern/components/toolbar/GridToolbarExportContainer.js +7 -7
  255. package/modern/components/toolbar/GridToolbarFilterButton.js +11 -4
  256. package/modern/constants/localeTextConstants.js +26 -0
  257. package/modern/hooks/core/strategyProcessing/useGridStrategyProcessing.js +2 -1
  258. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +4 -2
  259. package/modern/hooks/features/dimensions/useGridDimensions.js +2 -2
  260. package/modern/hooks/features/editing/useGridEditing.js +0 -3
  261. package/modern/hooks/features/filter/gridFilterSelector.js +2 -2
  262. package/modern/hooks/features/filter/gridFilterState.js +6 -0
  263. package/modern/hooks/features/filter/useGridFilter.js +29 -9
  264. package/modern/hooks/features/focus/gridFocusStateSelector.js +6 -0
  265. package/modern/hooks/features/focus/useGridFocus.js +55 -9
  266. package/modern/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +5 -0
  267. package/modern/hooks/features/headerFiltering/index.js +1 -0
  268. package/modern/hooks/features/headerFiltering/useGridHeaderFiltering.js +90 -0
  269. package/modern/hooks/features/index.js +2 -1
  270. package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +113 -4
  271. package/modern/hooks/features/preferencesPanel/useGridPreferencesPanel.js +4 -2
  272. package/modern/hooks/features/rows/useGridRows.js +16 -1
  273. package/modern/hooks/features/rows/useGridRowsMeta.js +11 -12
  274. package/modern/index.js +1 -1
  275. package/modern/internals/index.js +4 -0
  276. package/modern/internals/utils/index.js +2 -1
  277. package/modern/internals/utils/useProps.js +32 -0
  278. package/modern/locales/arSD.js +28 -0
  279. package/modern/locales/beBY.js +28 -0
  280. package/modern/locales/bgBG.js +28 -0
  281. package/modern/locales/csCZ.js +36 -8
  282. package/modern/locales/daDK.js +28 -0
  283. package/modern/locales/deDE.js +28 -0
  284. package/modern/locales/elGR.js +27 -0
  285. package/modern/locales/esES.js +28 -0
  286. package/modern/locales/faIR.js +28 -0
  287. package/modern/locales/fiFI.js +28 -0
  288. package/modern/locales/frFR.js +26 -0
  289. package/modern/locales/heIL.js +30 -2
  290. package/modern/locales/huHU.js +28 -0
  291. package/modern/locales/itIT.js +28 -0
  292. package/modern/locales/jaJP.js +28 -0
  293. package/modern/locales/koKR.js +28 -0
  294. package/modern/locales/nbNO.js +28 -0
  295. package/modern/locales/nlNL.js +26 -0
  296. package/modern/locales/plPL.js +28 -0
  297. package/modern/locales/ptBR.js +28 -0
  298. package/modern/locales/roRO.js +28 -0
  299. package/modern/locales/ruRU.js +28 -0
  300. package/modern/locales/skSK.js +28 -0
  301. package/modern/locales/svSE.js +28 -0
  302. package/modern/locales/trTR.js +28 -0
  303. package/modern/locales/ukUA.js +28 -0
  304. package/modern/locales/urPK.js +28 -0
  305. package/modern/locales/viVN.js +27 -0
  306. package/modern/locales/zhCN.js +28 -0
  307. package/modern/locales/zhTW.js +28 -0
  308. package/modern/material/index.js +2 -0
  309. package/modern/models/api/gridHeaderFilteringApi.js +1 -0
  310. package/modern/models/gridFilterItem.js +1 -1
  311. package/modern/models/gridHeaderFilteringModel.js +1 -0
  312. package/modern/models/index.js +0 -1
  313. package/node/DataGrid/DataGrid.js +10 -3
  314. package/node/DataGrid/useDataGridProps.js +4 -11
  315. package/node/colDef/gridNumericOperators.js +0 -6
  316. package/node/components/GridColumnHeaders.js +3 -8
  317. package/node/components/cell/GridActionsCell.js +3 -3
  318. package/node/components/cell/GridEditInputCell.js +4 -1
  319. package/node/components/cell/GridEditSingleSelectCell.js +5 -5
  320. package/node/components/columnHeaders/ColumnHeaderMenuIcon.js +3 -3
  321. package/node/components/columnHeaders/GridColumnHeaderFilterIconButton.js +12 -3
  322. package/node/components/containers/GridRoot.js +1 -3
  323. package/node/components/index.js +0 -11
  324. package/node/components/panel/GridPreferencesPanel.js +3 -1
  325. package/node/components/panel/filterPanel/GridFilterInputBoolean.js +78 -35
  326. package/node/components/panel/filterPanel/GridFilterInputDate.js +27 -6
  327. package/node/components/panel/filterPanel/GridFilterInputSingleSelect.js +56 -32
  328. package/node/components/panel/filterPanel/GridFilterInputValue.js +29 -6
  329. package/node/components/panel/filterPanel/GridFilterPanel.js +2 -1
  330. package/node/components/panel/filterPanel/index.js +26 -8
  331. package/node/components/toolbar/GridToolbarColumnsButton.js +11 -6
  332. package/node/components/toolbar/GridToolbarDensitySelector.js +2 -2
  333. package/node/components/toolbar/GridToolbarExportContainer.js +7 -7
  334. package/node/components/toolbar/GridToolbarFilterButton.js +10 -3
  335. package/node/constants/localeTextConstants.js +26 -0
  336. package/node/hooks/core/strategyProcessing/useGridStrategyProcessing.js +2 -1
  337. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +4 -2
  338. package/node/hooks/features/dimensions/useGridDimensions.js +2 -2
  339. package/node/hooks/features/editing/useGridEditing.js +0 -3
  340. package/node/hooks/features/filter/gridFilterSelector.js +2 -2
  341. package/node/hooks/features/filter/gridFilterState.js +6 -0
  342. package/node/hooks/features/filter/useGridFilter.js +30 -10
  343. package/node/hooks/features/focus/gridFocusStateSelector.js +9 -1
  344. package/node/hooks/features/focus/useGridFocus.js +55 -9
  345. package/node/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +15 -0
  346. package/node/hooks/features/headerFiltering/index.js +16 -0
  347. package/node/hooks/features/headerFiltering/useGridHeaderFiltering.js +101 -0
  348. package/node/hooks/features/index.js +11 -0
  349. package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +113 -4
  350. package/node/hooks/features/preferencesPanel/useGridPreferencesPanel.js +4 -2
  351. package/node/hooks/features/rows/useGridRows.js +16 -1
  352. package/node/hooks/features/rows/useGridRowsMeta.js +11 -12
  353. package/node/index.js +1 -1
  354. package/node/internals/index.js +46 -0
  355. package/node/internals/utils/index.js +11 -0
  356. package/node/internals/utils/useProps.js +41 -0
  357. package/node/locales/arSD.js +28 -0
  358. package/node/locales/beBY.js +28 -0
  359. package/node/locales/bgBG.js +28 -0
  360. package/node/locales/csCZ.js +36 -8
  361. package/node/locales/daDK.js +28 -0
  362. package/node/locales/deDE.js +28 -0
  363. package/node/locales/elGR.js +27 -0
  364. package/node/locales/esES.js +28 -0
  365. package/node/locales/faIR.js +28 -0
  366. package/node/locales/fiFI.js +28 -0
  367. package/node/locales/frFR.js +26 -0
  368. package/node/locales/heIL.js +30 -2
  369. package/node/locales/huHU.js +28 -0
  370. package/node/locales/itIT.js +28 -0
  371. package/node/locales/jaJP.js +28 -0
  372. package/node/locales/koKR.js +28 -0
  373. package/node/locales/nbNO.js +28 -0
  374. package/node/locales/nlNL.js +26 -0
  375. package/node/locales/plPL.js +28 -0
  376. package/node/locales/ptBR.js +28 -0
  377. package/node/locales/roRO.js +28 -0
  378. package/node/locales/ruRU.js +28 -0
  379. package/node/locales/skSK.js +28 -0
  380. package/node/locales/svSE.js +28 -0
  381. package/node/locales/trTR.js +28 -0
  382. package/node/locales/ukUA.js +28 -0
  383. package/node/locales/urPK.js +28 -0
  384. package/node/locales/viVN.js +27 -0
  385. package/node/locales/zhCN.js +28 -0
  386. package/node/locales/zhTW.js +28 -0
  387. package/node/material/index.js +2 -0
  388. package/node/models/api/gridHeaderFilteringApi.js +5 -0
  389. package/node/models/gridFilterItem.js +1 -1
  390. package/node/models/gridHeaderFilteringModel.js +5 -0
  391. package/node/models/index.js +0 -11
  392. package/package.json +4 -4
  393. package/components/GridScrollArea.d.ts +0 -10
  394. package/components/GridScrollArea.js +0 -117
  395. package/legacy/components/GridScrollArea.js +0 -119
  396. package/legacy/lib/createDetectElementResize/index.js +0 -145
  397. package/lib/createDetectElementResize/index.d.ts +0 -18
  398. package/lib/createDetectElementResize/index.js +0 -145
  399. package/lib/createDetectElementResize/types.d.ts +0 -9
  400. package/modern/components/GridScrollArea.js +0 -117
  401. package/modern/lib/createDetectElementResize/index.js +0 -145
  402. package/node/components/GridScrollArea.js +0 -126
  403. package/node/lib/createDetectElementResize/index.js +0 -151
@@ -28,18 +28,28 @@ const filterStateInitializer = (state, props, apiRef) => {
28
28
  return (0, _extends2.default)({}, state, {
29
29
  filter: {
30
30
  filterModel: (0, _gridFilterUtils.sanitizeFilterModel)(filterModel, props.disableMultipleColumnsFiltering, apiRef),
31
- visibleRowsLookup: {},
32
31
  filteredDescendantCountLookup: {}
33
- }
32
+ },
33
+ visibleRowsLookup: {}
34
34
  });
35
35
  };
36
+ exports.filterStateInitializer = filterStateInitializer;
37
+ const getVisibleRowsLookup = params => {
38
+ // For flat tree, the `visibleRowsLookup` and the `filteredRowsLookup` are equals since no row is collapsed.
39
+ return params.filteredRowsLookup;
40
+ };
41
+ function getVisibleRowsLookupState(apiRef, state) {
42
+ return apiRef.current.applyStrategyProcessor('visibleRowsLookupCreation', {
43
+ tree: state.rows.tree,
44
+ filteredRowsLookup: state.filter.filteredRowsLookup
45
+ });
46
+ }
36
47
 
37
48
  /**
38
49
  * @requires useGridColumns (method, event)
39
50
  * @requires useGridParamsApi (method)
40
51
  * @requires useGridRows (event)
41
52
  */
42
- exports.filterStateInitializer = filterStateInitializer;
43
53
  const useGridFilter = (apiRef, props) => {
44
54
  const logger = (0, _useGridLogger.useGridLogger)(apiRef, 'useGridFilter');
45
55
  apiRef.current.registerControlState({
@@ -57,9 +67,13 @@ const useGridFilter = (apiRef, props) => {
57
67
  isRowMatchingFilters,
58
68
  filterModel: filterModel ?? (0, _gridFilterState.getDefaultGridFilterModel)()
59
69
  });
60
- return (0, _extends2.default)({}, state, {
70
+ const newState = (0, _extends2.default)({}, state, {
61
71
  filter: (0, _extends2.default)({}, state.filter, filteringResult)
62
72
  });
73
+ const visibleRowsLookupState = getVisibleRowsLookupState(apiRef, newState);
74
+ return (0, _extends2.default)({}, newState, {
75
+ visibleRowsLookup: visibleRowsLookupState
76
+ });
63
77
  });
64
78
  apiRef.current.publishEvent('filteredRowsSet');
65
79
  }, [props.filterMode, apiRef]);
@@ -115,7 +129,7 @@ const useGridFilter = (apiRef, props) => {
115
129
  items
116
130
  }), 'deleteFilterItem');
117
131
  }, [apiRef]);
118
- const showFilterPanel = React.useCallback(targetColumnField => {
132
+ const showFilterPanel = React.useCallback((targetColumnField, panelId, labelId) => {
119
133
  logger.debug('Displaying filter panel');
120
134
  if (targetColumnField) {
121
135
  const filterModel = (0, _gridFilterSelector.gridFilterModelSelector)(apiRef);
@@ -160,7 +174,7 @@ const useGridFilter = (apiRef, props) => {
160
174
  items: newFilterItems
161
175
  }));
162
176
  }
163
- apiRef.current.showPreferences(_gridPreferencePanelsValue.GridPreferencePanelsValue.filters);
177
+ apiRef.current.showPreferences(_gridPreferencePanelsValue.GridPreferencePanelsValue.filters, panelId, labelId);
164
178
  }, [apiRef, logger, props.disableMultipleColumnsFiltering]);
165
179
  const hideFilterPanel = React.useCallback(() => {
166
180
  logger.debug('Hiding filter panel');
@@ -266,13 +280,10 @@ const useGridFilter = (apiRef, props) => {
266
280
  }
267
281
  return {
268
282
  filteredRowsLookup,
269
- // For flat tree, the `visibleRowsLookup` and the `filteredRowsLookup` are equals since no row is collapsed.
270
- visibleRowsLookup: filteredRowsLookup,
271
283
  filteredDescendantCountLookup: {}
272
284
  };
273
285
  }
274
286
  return {
275
- visibleRowsLookup: {},
276
287
  filteredRowsLookup: {},
277
288
  filteredDescendantCountLookup: {}
278
289
  };
@@ -282,6 +293,7 @@ const useGridFilter = (apiRef, props) => {
282
293
  (0, _pipeProcessing.useGridRegisterPipeProcessor)(apiRef, 'restoreState', stateRestorePreProcessing);
283
294
  (0, _pipeProcessing.useGridRegisterPipeProcessor)(apiRef, 'preferencePanel', preferencePanelPreProcessing);
284
295
  (0, _strategyProcessing.useGridRegisterStrategyProcessor)(apiRef, _strategyProcessing.GRID_DEFAULT_STRATEGY, 'filtering', flatFilteringMethod);
296
+ (0, _strategyProcessing.useGridRegisterStrategyProcessor)(apiRef, _strategyProcessing.GRID_DEFAULT_STRATEGY, 'visibleRowsLookupCreation', getVisibleRowsLookup);
285
297
 
286
298
  /**
287
299
  * EVENTS
@@ -302,13 +314,21 @@ const useGridFilter = (apiRef, props) => {
302
314
  apiRef.current.unstable_applyFilters();
303
315
  }
304
316
  }, [apiRef]);
317
+ const updateVisibleRowsLookupState = React.useCallback(() => {
318
+ apiRef.current.setState(state => {
319
+ return (0, _extends2.default)({}, state, {
320
+ visibleRowsLookup: getVisibleRowsLookupState(apiRef, state)
321
+ });
322
+ });
323
+ apiRef.current.forceUpdate();
324
+ }, [apiRef]);
305
325
 
306
326
  // Do not call `apiRef.current.forceUpdate` to avoid re-render before updating the sorted rows.
307
327
  // Otherwise, the state is not consistent during the render
308
328
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'rowsSet', updateFilteredRows);
309
- (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'rowExpansionChange', apiRef.current.unstable_applyFilters);
310
329
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'columnsChange', handleColumnsChange);
311
330
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'activeStrategyProcessorChange', handleStrategyProcessorChange);
331
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'rowExpansionChange', updateVisibleRowsLookupState);
312
332
 
313
333
  /**
314
334
  * 1ST RENDER
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.unstable_gridTabIndexColumnGroupHeaderSelector = exports.unstable_gridFocusColumnGroupHeaderSelector = exports.gridTabIndexStateSelector = exports.gridTabIndexColumnHeaderSelector = exports.gridTabIndexCellSelector = exports.gridFocusStateSelector = exports.gridFocusColumnHeaderSelector = exports.gridFocusCellSelector = void 0;
6
+ exports.unstable_gridTabIndexColumnHeaderFilterSelector = exports.unstable_gridTabIndexColumnGroupHeaderSelector = exports.unstable_gridFocusColumnHeaderFilterSelector = exports.unstable_gridFocusColumnGroupHeaderSelector = exports.gridTabIndexStateSelector = exports.gridTabIndexColumnHeaderSelector = exports.gridTabIndexCellSelector = exports.gridFocusStateSelector = exports.gridFocusColumnHeaderSelector = exports.gridFocusCellSelector = void 0;
7
7
  var _createSelector = require("../../../utils/createSelector");
8
8
  const gridFocusStateSelector = state => state.focus;
9
9
  exports.gridFocusStateSelector = gridFocusStateSelector;
@@ -13,6 +13,10 @@ const gridFocusColumnHeaderSelector = (0, _createSelector.createSelector)(gridFo
13
13
 
14
14
  // eslint-disable-next-line @typescript-eslint/naming-convention
15
15
  exports.gridFocusColumnHeaderSelector = gridFocusColumnHeaderSelector;
16
+ const unstable_gridFocusColumnHeaderFilterSelector = (0, _createSelector.createSelector)(gridFocusStateSelector, focusState => focusState.columnHeaderFilter);
17
+
18
+ // eslint-disable-next-line @typescript-eslint/naming-convention
19
+ exports.unstable_gridFocusColumnHeaderFilterSelector = unstable_gridFocusColumnHeaderFilterSelector;
16
20
  const unstable_gridFocusColumnGroupHeaderSelector = (0, _createSelector.createSelector)(gridFocusStateSelector, focusState => focusState.columnGroupHeader);
17
21
  exports.unstable_gridFocusColumnGroupHeaderSelector = unstable_gridFocusColumnGroupHeaderSelector;
18
22
  const gridTabIndexStateSelector = state => state.tabIndex;
@@ -23,5 +27,9 @@ const gridTabIndexColumnHeaderSelector = (0, _createSelector.createSelector)(gri
23
27
 
24
28
  // eslint-disable-next-line @typescript-eslint/naming-convention
25
29
  exports.gridTabIndexColumnHeaderSelector = gridTabIndexColumnHeaderSelector;
30
+ const unstable_gridTabIndexColumnHeaderFilterSelector = (0, _createSelector.createSelector)(gridTabIndexStateSelector, state => state.columnHeaderFilter);
31
+
32
+ // eslint-disable-next-line @typescript-eslint/naming-convention
33
+ exports.unstable_gridTabIndexColumnHeaderFilterSelector = unstable_gridTabIndexColumnHeaderFilterSelector;
26
34
  const unstable_gridTabIndexColumnGroupHeaderSelector = (0, _createSelector.createSelector)(gridTabIndexStateSelector, state => state.columnGroupHeader);
27
35
  exports.unstable_gridTabIndexColumnGroupHeaderSelector = unstable_gridTabIndexColumnGroupHeaderSelector;
@@ -16,17 +16,20 @@ var _gridFocusStateSelector = require("./gridFocusStateSelector");
16
16
  var _gridColumnsSelector = require("../columns/gridColumnsSelector");
17
17
  var _useGridVisibleRows = require("../../utils/useGridVisibleRows");
18
18
  var _utils2 = require("../../../utils/utils");
19
+ var _gridRowsSelector = require("../rows/gridRowsSelector");
19
20
  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); }
20
21
  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; }
21
22
  const focusStateInitializer = state => (0, _extends2.default)({}, state, {
22
23
  focus: {
23
24
  cell: null,
24
25
  columnHeader: null,
26
+ columnHeaderFilter: null,
25
27
  columnGroupHeader: null
26
28
  },
27
29
  tabIndex: {
28
30
  cell: null,
29
31
  columnHeader: null,
32
+ columnHeaderFilter: null,
30
33
  columnGroupHeader: null
31
34
  }
32
35
  });
@@ -62,6 +65,7 @@ const useGridFocus = (apiRef, props) => {
62
65
  field
63
66
  },
64
67
  columnHeader: null,
68
+ columnHeaderFilter: null,
65
69
  columnGroupHeader: null
66
70
  },
67
71
  focus: {
@@ -70,6 +74,7 @@ const useGridFocus = (apiRef, props) => {
70
74
  field
71
75
  },
72
76
  columnHeader: null,
77
+ columnHeaderFilter: null,
73
78
  columnGroupHeader: null
74
79
  }
75
80
  });
@@ -97,6 +102,7 @@ const useGridFocus = (apiRef, props) => {
97
102
  columnHeader: {
98
103
  field
99
104
  },
105
+ columnHeaderFilter: null,
100
106
  cell: null,
101
107
  columnGroupHeader: null
102
108
  },
@@ -104,6 +110,33 @@ const useGridFocus = (apiRef, props) => {
104
110
  columnHeader: {
105
111
  field
106
112
  },
113
+ columnHeaderFilter: null,
114
+ cell: null,
115
+ columnGroupHeader: null
116
+ }
117
+ });
118
+ });
119
+ apiRef.current.forceUpdate();
120
+ }, [apiRef, logger, publishCellFocusOut]);
121
+ const setColumnHeaderFilterFocus = React.useCallback((field, event = {}) => {
122
+ const cell = (0, _gridFocusStateSelector.gridFocusCellSelector)(apiRef);
123
+ publishCellFocusOut(cell, event);
124
+ apiRef.current.setState(state => {
125
+ logger.debug(`Focusing on column header filter with colIndex=${field}`);
126
+ return (0, _extends2.default)({}, state, {
127
+ tabIndex: {
128
+ columnHeader: null,
129
+ columnHeaderFilter: {
130
+ field
131
+ },
132
+ cell: null,
133
+ columnGroupHeader: null
134
+ },
135
+ focus: {
136
+ columnHeader: null,
137
+ columnHeaderFilter: {
138
+ field
139
+ },
107
140
  cell: null,
108
141
  columnGroupHeader: null
109
142
  }
@@ -124,6 +157,7 @@ const useGridFocus = (apiRef, props) => {
124
157
  depth
125
158
  },
126
159
  columnHeader: null,
160
+ columnHeaderFilter: null,
127
161
  cell: null
128
162
  },
129
163
  focus: {
@@ -132,6 +166,7 @@ const useGridFocus = (apiRef, props) => {
132
166
  depth
133
167
  },
134
168
  columnHeader: null,
169
+ columnHeaderFilter: null,
135
170
  cell: null
136
171
  }
137
172
  });
@@ -141,8 +176,16 @@ const useGridFocus = (apiRef, props) => {
141
176
  const getColumnGroupHeaderFocus = React.useCallback(() => (0, _gridFocusStateSelector.unstable_gridFocusColumnGroupHeaderSelector)(apiRef), [apiRef]);
142
177
  const moveFocusToRelativeCell = React.useCallback((id, field, direction) => {
143
178
  let columnIndexToFocus = apiRef.current.getColumnIndex(field);
144
- let rowIndexToFocus = apiRef.current.getRowIndexRelativeToVisibleRows(id);
145
179
  const visibleColumns = (0, _gridColumnsSelector.gridVisibleColumnDefinitionsSelector)(apiRef);
180
+ const currentPage = (0, _useGridVisibleRows.getVisibleRows)(apiRef, {
181
+ pagination: props.pagination,
182
+ paginationMode: props.paginationMode
183
+ });
184
+ const pinnedRows = (0, _gridRowsSelector.gridPinnedRowsSelector)(apiRef);
185
+
186
+ // Include pinned rows as well
187
+ const currentPageRows = [].concat(pinnedRows.top || [], currentPage.rows, pinnedRows.bottom || []);
188
+ let rowIndexToFocus = currentPageRows.findIndex(row => row.id === id);
146
189
  if (direction === 'right') {
147
190
  columnIndexToFocus += 1;
148
191
  } else if (direction === 'left') {
@@ -150,14 +193,10 @@ const useGridFocus = (apiRef, props) => {
150
193
  } else {
151
194
  rowIndexToFocus += 1;
152
195
  }
153
- const currentPage = (0, _useGridVisibleRows.getVisibleRows)(apiRef, {
154
- pagination: props.pagination,
155
- paginationMode: props.paginationMode
156
- });
157
196
  if (columnIndexToFocus >= visibleColumns.length) {
158
197
  // Go to next row if we are after the last column
159
198
  rowIndexToFocus += 1;
160
- if (rowIndexToFocus < currentPage.rows.length) {
199
+ if (rowIndexToFocus < currentPageRows.length) {
161
200
  // Go to first column of the next row if there's one more row
162
201
  columnIndexToFocus = 0;
163
202
  }
@@ -169,8 +208,11 @@ const useGridFocus = (apiRef, props) => {
169
208
  columnIndexToFocus = visibleColumns.length - 1;
170
209
  }
171
210
  }
172
- rowIndexToFocus = (0, _utils2.clamp)(rowIndexToFocus, 0, currentPage.rows.length - 1);
173
- const rowToFocus = currentPage.rows[rowIndexToFocus];
211
+ rowIndexToFocus = (0, _utils2.clamp)(rowIndexToFocus, 0, currentPageRows.length - 1);
212
+ const rowToFocus = currentPageRows[rowIndexToFocus];
213
+ if (!rowToFocus) {
214
+ return;
215
+ }
174
216
  const colSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowToFocus.id, columnIndexToFocus);
175
217
  if (colSpanInfo && colSpanInfo.spannedByColSpan) {
176
218
  if (direction === 'left' || direction === 'below') {
@@ -224,6 +266,7 @@ const useGridFocus = (apiRef, props) => {
224
266
  focus: {
225
267
  cell: null,
226
268
  columnHeader: null,
269
+ columnHeaderFilter: null,
227
270
  columnGroupHeader: null
228
271
  }
229
272
  }));
@@ -262,6 +305,7 @@ const useGridFocus = (apiRef, props) => {
262
305
  focus: {
263
306
  cell: null,
264
307
  columnHeader: null,
308
+ columnHeaderFilter: null,
265
309
  columnGroupHeader: null
266
310
  }
267
311
  }));
@@ -290,6 +334,7 @@ const useGridFocus = (apiRef, props) => {
290
334
  focus: {
291
335
  cell: null,
292
336
  columnHeader: null,
337
+ columnHeaderFilter: null,
293
338
  columnGroupHeader: null
294
339
  }
295
340
  }));
@@ -297,7 +342,8 @@ const useGridFocus = (apiRef, props) => {
297
342
  }, [apiRef]);
298
343
  const focusApi = {
299
344
  setCellFocus,
300
- setColumnHeaderFocus
345
+ setColumnHeaderFocus,
346
+ setColumnHeaderFilterFocus
301
347
  };
302
348
  const focusPrivateApi = {
303
349
  moveFocusToRelativeCell,
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.unstable_gridHeaderFilteringStateSelector = exports.unstable_gridHeaderFilteringMenuSelector = exports.unstable_gridHeaderFilteringEditFieldSelector = void 0;
7
+ var _createSelector = require("../../../utils/createSelector");
8
+ /* eslint-disable @typescript-eslint/naming-convention */
9
+
10
+ const unstable_gridHeaderFilteringStateSelector = state => state.headerFiltering;
11
+ exports.unstable_gridHeaderFilteringStateSelector = unstable_gridHeaderFilteringStateSelector;
12
+ const unstable_gridHeaderFilteringEditFieldSelector = (0, _createSelector.createSelector)(unstable_gridHeaderFilteringStateSelector, headerFilteringState => headerFilteringState.editing);
13
+ exports.unstable_gridHeaderFilteringEditFieldSelector = unstable_gridHeaderFilteringEditFieldSelector;
14
+ const unstable_gridHeaderFilteringMenuSelector = (0, _createSelector.createSelector)(unstable_gridHeaderFilteringStateSelector, headerFilteringState => headerFilteringState.menuOpen);
15
+ exports.unstable_gridHeaderFilteringMenuSelector = unstable_gridHeaderFilteringMenuSelector;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _gridHeaderFilteringSelectors = require("./gridHeaderFilteringSelectors");
7
+ Object.keys(_gridHeaderFilteringSelectors).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _gridHeaderFilteringSelectors[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _gridHeaderFilteringSelectors[key];
14
+ }
15
+ });
16
+ });
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useGridHeaderFiltering = exports.headerFilteringStateInitializer = void 0;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var React = _interopRequireWildcard(require("react"));
10
+ var _useGridApiMethod = require("../../utils/useGridApiMethod");
11
+ var _utils = require("../../utils");
12
+ var _gridColumnsSelector = require("../columns/gridColumnsSelector");
13
+ 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); }
14
+ 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; }
15
+ const headerFilteringStateInitializer = state => (0, _extends2.default)({}, state, {
16
+ headerFiltering: {
17
+ editing: null,
18
+ menuOpen: null
19
+ }
20
+ });
21
+ exports.headerFilteringStateInitializer = headerFilteringStateInitializer;
22
+ const useGridHeaderFiltering = (apiRef, props) => {
23
+ const logger = (0, _utils.useGridLogger)(apiRef, 'useGridHeaderFiltering');
24
+ const setHeaderFilterState = React.useCallback(headerFilterState => {
25
+ apiRef.current.setState(state => {
26
+ // Safety check to avoid MIT users from using it
27
+ // This hook should ultimately be moved to the Pro package
28
+ if (props.signature === 'DataGrid') {
29
+ return state;
30
+ }
31
+ return (0, _extends2.default)({}, state, {
32
+ headerFiltering: {
33
+ editing: headerFilterState.editing ?? null,
34
+ menuOpen: headerFilterState.menuOpen ?? null
35
+ }
36
+ });
37
+ });
38
+ apiRef.current.forceUpdate();
39
+ }, [apiRef, props.signature]);
40
+ const startHeaderFilterEditMode = React.useCallback(field => {
41
+ logger.debug(`Starting edit mode on header filter for field: ${field}`);
42
+ apiRef.current.setHeaderFilterState({
43
+ editing: field
44
+ });
45
+ }, [apiRef, logger]);
46
+ const stopHeaderFilterEditMode = React.useCallback(() => {
47
+ logger.debug(`Stopping edit mode on header filter`);
48
+ apiRef.current.setHeaderFilterState({
49
+ editing: null
50
+ });
51
+ }, [apiRef, logger]);
52
+ const showHeaderFilterMenu = React.useCallback(field => {
53
+ logger.debug(`Opening header filter menu for field: ${field}`);
54
+ apiRef.current.setHeaderFilterState({
55
+ menuOpen: field
56
+ });
57
+ }, [apiRef, logger]);
58
+ const hideHeaderFilterMenu = React.useCallback(() => {
59
+ logger.debug(`Hiding header filter menu for active field`);
60
+ let fieldToFocus = apiRef.current.state.headerFiltering.menuOpen;
61
+ if (fieldToFocus) {
62
+ const columnLookup = (0, _gridColumnsSelector.gridColumnLookupSelector)(apiRef);
63
+ const columnVisibilityModel = (0, _gridColumnsSelector.gridColumnVisibilityModelSelector)(apiRef);
64
+ const orderedFields = (0, _gridColumnsSelector.gridColumnFieldsSelector)(apiRef);
65
+
66
+ // If the column was removed from the grid, we need to find the closest visible field
67
+ if (!columnLookup[fieldToFocus]) {
68
+ fieldToFocus = orderedFields[0];
69
+ }
70
+
71
+ // If the field to focus is hidden, we need to find the closest visible field
72
+ if (columnVisibilityModel[fieldToFocus] === false) {
73
+ // contains visible column fields + the field that was just hidden
74
+ const visibleOrderedFields = orderedFields.filter(field => {
75
+ if (field === fieldToFocus) {
76
+ return true;
77
+ }
78
+ return columnVisibilityModel[field] !== false;
79
+ });
80
+ const fieldIndex = visibleOrderedFields.indexOf(fieldToFocus);
81
+ fieldToFocus = visibleOrderedFields[fieldIndex + 1] || visibleOrderedFields[fieldIndex - 1];
82
+ }
83
+ apiRef.current.setHeaderFilterState({
84
+ menuOpen: null
85
+ });
86
+ apiRef.current.setColumnHeaderFilterFocus(fieldToFocus);
87
+ }
88
+ }, [apiRef, logger]);
89
+ const headerFilterPrivateApi = {
90
+ setHeaderFilterState
91
+ };
92
+ const headerFilterApi = {
93
+ startHeaderFilterEditMode,
94
+ stopHeaderFilterEditMode,
95
+ showHeaderFilterMenu,
96
+ hideHeaderFilterMenu
97
+ };
98
+ (0, _useGridApiMethod.useGridApiMethod)(apiRef, headerFilterApi, 'public');
99
+ (0, _useGridApiMethod.useGridApiMethod)(apiRef, headerFilterPrivateApi, 'private');
100
+ };
101
+ exports.useGridHeaderFiltering = useGridHeaderFiltering;
@@ -145,4 +145,15 @@ Object.keys(_statePersistence).forEach(function (key) {
145
145
  return _statePersistence[key];
146
146
  }
147
147
  });
148
+ });
149
+ var _headerFiltering = require("./headerFiltering");
150
+ Object.keys(_headerFiltering).forEach(function (key) {
151
+ if (key === "default" || key === "__esModule") return;
152
+ if (key in exports && exports[key] === _headerFiltering[key]) return;
153
+ Object.defineProperty(exports, key, {
154
+ enumerable: true,
155
+ get: function () {
156
+ return _headerFiltering[key];
157
+ }
158
+ });
148
159
  });
@@ -20,6 +20,7 @@ var _gridRowsSelector = require("../rows/gridRowsSelector");
20
20
  var _focus = require("../focus");
21
21
  var _gridColumnGroupsSelector = require("../columnGrouping/gridColumnGroupsSelector");
22
22
  var _useGridSelector = require("../../utils/useGridSelector");
23
+ var _gridHeaderFilteringSelectors = require("../headerFiltering/gridHeaderFilteringSelectors");
23
24
  var _pipeProcessing = require("../../core/pipeProcessing");
24
25
  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); }
25
26
  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; }
@@ -76,6 +77,9 @@ const useGridKeyboardNavigation = (apiRef, props) => {
76
77
  const initialCurrentPageRows = (0, _useGridVisibleRows.useGridVisibleRows)(apiRef, props).rows;
77
78
  const theme = (0, _styles.useTheme)();
78
79
  const currentPageRows = React.useMemo(() => enrichPageRowsWithPinnedRows(apiRef, initialCurrentPageRows), [apiRef, initialCurrentPageRows]);
80
+ const headerFilteringEnabled =
81
+ // @ts-expect-error // TODO move relevant code to the `DataGridPro`
82
+ props.signature !== 'DataGrid' && props.unstable_headerFilters;
79
83
 
80
84
  /**
81
85
  * @param {number} colIndex Index of the column to focus
@@ -112,6 +116,14 @@ const useGridKeyboardNavigation = (apiRef, props) => {
112
116
  const field = apiRef.current.getVisibleColumns()[colIndex].field;
113
117
  apiRef.current.setColumnHeaderFocus(field, event);
114
118
  }, [apiRef, logger]);
119
+ const goToHeaderFilter = React.useCallback((colIndex, event) => {
120
+ logger.debug(`Navigating to header filter col ${colIndex}`);
121
+ apiRef.current.scrollToIndexes({
122
+ colIndex
123
+ });
124
+ const field = apiRef.current.getVisibleColumns()[colIndex].field;
125
+ apiRef.current.setColumnHeaderFilterFocus(field, event);
126
+ }, [apiRef, logger]);
115
127
  const goToGroupHeader = React.useCallback((colIndex, depth, event) => {
116
128
  logger.debug(`Navigating to header col ${colIndex}`);
117
129
  apiRef.current.scrollToIndexes({
@@ -123,7 +135,7 @@ const useGridKeyboardNavigation = (apiRef, props) => {
123
135
  apiRef.current.setColumnGroupHeaderFocus(field, depth, event);
124
136
  }, [apiRef, logger]);
125
137
  const getRowIdFromIndex = React.useCallback(rowIndex => {
126
- return currentPageRows[rowIndex].id;
138
+ return currentPageRows?.[rowIndex].id;
127
139
  }, [currentPageRows]);
128
140
  const handleColumnHeaderKeyDown = React.useCallback((params, event) => {
129
141
  const headerTitleNode = event.currentTarget.querySelector(`.${_gridClasses.gridClasses.columnHeaderTitleContainerContent}`);
@@ -149,7 +161,11 @@ const useGridKeyboardNavigation = (apiRef, props) => {
149
161
  case 'ArrowDown':
150
162
  {
151
163
  if (firstRowIndexInPage !== null) {
152
- goToCell(colIndexBefore, getRowIdFromIndex(firstRowIndexInPage));
164
+ if (headerFilteringEnabled) {
165
+ goToHeaderFilter(colIndexBefore, event);
166
+ } else {
167
+ goToCell(colIndexBefore, getRowIdFromIndex(firstRowIndexInPage));
168
+ }
153
169
  }
154
170
  break;
155
171
  }
@@ -223,7 +239,97 @@ const useGridKeyboardNavigation = (apiRef, props) => {
223
239
  if (shouldPreventDefault) {
224
240
  event.preventDefault();
225
241
  }
226
- }, [apiRef, currentPageRows.length, theme.direction, goToCell, getRowIdFromIndex, goToHeader, goToGroupHeader]);
242
+ }, [apiRef, currentPageRows.length, headerFilteringEnabled, goToHeaderFilter, goToCell, getRowIdFromIndex, theme.direction, goToHeader, goToGroupHeader]);
243
+ const handleHeaderFilterKeyDown = React.useCallback((params, event) => {
244
+ const dimensions = apiRef.current.getRootDimensions();
245
+ if (!dimensions) {
246
+ return;
247
+ }
248
+ const isEditing = (0, _gridHeaderFilteringSelectors.unstable_gridHeaderFilteringEditFieldSelector)(apiRef) === params.field;
249
+ const isHeaderMenuOpen = (0, _gridHeaderFilteringSelectors.unstable_gridHeaderFilteringMenuSelector)(apiRef) === params.field;
250
+ if (isEditing || isHeaderMenuOpen || !(0, _keyboardUtils.isNavigationKey)(event.key)) {
251
+ return;
252
+ }
253
+ const viewportPageSize = apiRef.current.getViewportPageSize();
254
+ const colIndexBefore = params.field ? apiRef.current.getColumnIndex(params.field) : 0;
255
+ const firstRowIndexInPage = 0;
256
+ const lastRowIndexInPage = currentPageRows.length - 1;
257
+ const firstColIndex = 0;
258
+ const lastColIndex = (0, _gridColumnsSelector.gridVisibleColumnDefinitionsSelector)(apiRef).length - 1;
259
+ let shouldPreventDefault = true;
260
+ switch (event.key) {
261
+ case 'ArrowDown':
262
+ {
263
+ const rowId = getRowIdFromIndex(firstRowIndexInPage);
264
+ if (firstRowIndexInPage !== null && rowId != null) {
265
+ goToCell(colIndexBefore, rowId);
266
+ }
267
+ break;
268
+ }
269
+ case 'ArrowRight':
270
+ {
271
+ const rightColIndex = getRightColumnIndex({
272
+ currentColIndex: colIndexBefore,
273
+ firstColIndex,
274
+ lastColIndex,
275
+ direction: theme.direction
276
+ });
277
+ if (rightColIndex !== null) {
278
+ goToHeaderFilter(rightColIndex, event);
279
+ }
280
+ break;
281
+ }
282
+ case 'ArrowLeft':
283
+ {
284
+ const leftColIndex = getLeftColumnIndex({
285
+ currentColIndex: colIndexBefore,
286
+ firstColIndex,
287
+ lastColIndex,
288
+ direction: theme.direction
289
+ });
290
+ if (leftColIndex !== null) {
291
+ goToHeaderFilter(leftColIndex, event);
292
+ } else {
293
+ apiRef.current.setColumnHeaderFilterFocus(params.field, event);
294
+ }
295
+ break;
296
+ }
297
+ case 'ArrowUp':
298
+ {
299
+ goToHeader(colIndexBefore, event);
300
+ break;
301
+ }
302
+ case 'PageDown':
303
+ {
304
+ if (firstRowIndexInPage !== null && lastRowIndexInPage !== null) {
305
+ goToCell(colIndexBefore, getRowIdFromIndex(Math.min(firstRowIndexInPage + viewportPageSize, lastRowIndexInPage)));
306
+ }
307
+ break;
308
+ }
309
+ case 'Home':
310
+ {
311
+ goToHeaderFilter(firstColIndex, event);
312
+ break;
313
+ }
314
+ case 'End':
315
+ {
316
+ goToHeaderFilter(lastColIndex, event);
317
+ break;
318
+ }
319
+ case ' ':
320
+ {
321
+ // prevent Space event from scrolling
322
+ break;
323
+ }
324
+ default:
325
+ {
326
+ shouldPreventDefault = false;
327
+ }
328
+ }
329
+ if (shouldPreventDefault) {
330
+ event.preventDefault();
331
+ }
332
+ }, [apiRef, currentPageRows.length, goToHeaderFilter, theme.direction, goToHeader, goToCell, getRowIdFromIndex]);
227
333
  const focusedColumnGroup = (0, _useGridSelector.useGridSelector)(apiRef, _focus.unstable_gridFocusColumnGroupHeaderSelector);
228
334
  const handleColumnGroupHeaderKeyDown = React.useCallback((params, event) => {
229
335
  const dimensions = apiRef.current.getRootDimensions();
@@ -358,6 +464,8 @@ const useGridKeyboardNavigation = (apiRef, props) => {
358
464
  {
359
465
  if (rowIndexBefore > firstRowIndexInPage) {
360
466
  goToCell(colIndexBefore, getRowIdFromIndex(rowIndexBefore - 1));
467
+ } else if (headerFilteringEnabled) {
468
+ goToHeaderFilter(colIndexBefore, event);
361
469
  } else {
362
470
  goToHeader(colIndexBefore, event);
363
471
  }
@@ -458,7 +566,7 @@ const useGridKeyboardNavigation = (apiRef, props) => {
458
566
  if (shouldPreventDefault) {
459
567
  event.preventDefault();
460
568
  }
461
- }, [apiRef, currentPageRows, theme.direction, getRowIdFromIndex, goToCell, goToHeader]);
569
+ }, [apiRef, currentPageRows, theme.direction, goToCell, getRowIdFromIndex, headerFilteringEnabled, goToHeaderFilter, goToHeader]);
462
570
  const checkIfCanStartEditing = React.useCallback((initialValue, {
463
571
  event
464
572
  }) => {
@@ -470,6 +578,7 @@ const useGridKeyboardNavigation = (apiRef, props) => {
470
578
  }, []);
471
579
  (0, _pipeProcessing.useGridRegisterPipeProcessor)(apiRef, 'canStartEditing', checkIfCanStartEditing);
472
580
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'columnHeaderKeyDown', handleColumnHeaderKeyDown);
581
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'headerFilterKeyDown', handleHeaderFilterKeyDown);
473
582
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'columnGroupHeaderKeyDown', handleColumnGroupHeaderKeyDown);
474
583
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'cellKeyDown', handleCellKeyDown);
475
584
  };
@@ -58,13 +58,15 @@ const useGridPreferencesPanel = (apiRef, props) => {
58
58
  const hidePreferencesDelayed = React.useCallback(() => {
59
59
  hideTimeout.current = setTimeout(hidePreferences, 100);
60
60
  }, [hidePreferences]);
61
- const showPreferences = React.useCallback(newValue => {
61
+ const showPreferences = React.useCallback((newValue, panelId, labelId) => {
62
62
  logger.debug('Opening Preferences Panel');
63
63
  doNotHidePanel();
64
64
  apiRef.current.setState(state => (0, _extends2.default)({}, state, {
65
65
  preferencePanel: (0, _extends2.default)({}, state.preferencePanel, {
66
66
  open: true,
67
- openedPanelValue: newValue
67
+ openedPanelValue: newValue,
68
+ panelId,
69
+ labelId
68
70
  })
69
71
  }));
70
72
  apiRef.current.publishEvent('preferencePanelOpen', {