@mui/x-data-grid 7.22.1 → 7.22.3

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 (204) hide show
  1. package/CHANGELOG.md +139 -0
  2. package/colDef/gridBooleanOperators.js +4 -6
  3. package/components/GridDetailPanels.js +0 -1
  4. package/components/GridPinnedRows.js +0 -1
  5. package/components/GridRow.d.ts +2 -2
  6. package/components/GridRow.js +1 -1
  7. package/components/base/GridOverlays.js +5 -6
  8. package/components/cell/GridCell.d.ts +41 -3
  9. package/components/cell/GridCell.js +1 -9
  10. package/components/cell/GridEditInputCell.js +0 -67
  11. package/components/columnsManagement/GridColumnsManagement.d.ts +2 -0
  12. package/components/columnsManagement/GridColumnsManagement.js +53 -6
  13. package/components/panel/GridPanel.d.ts +1 -1
  14. package/components/panel/filterPanel/GridFilterInputBoolean.d.ts +1 -0
  15. package/components/panel/filterPanel/GridFilterInputBoolean.js +14 -5
  16. package/components/toolbar/GridToolbar.d.ts +2 -2
  17. package/components/toolbar/GridToolbar.js +12 -4
  18. package/components/toolbar/GridToolbarExport.d.ts +2 -2
  19. package/components/toolbar/GridToolbarExport.js +4 -3
  20. package/components/toolbar/index.d.ts +1 -1
  21. package/components/virtualization/GridVirtualScrollbar.js +6 -0
  22. package/constants/gridClasses.d.ts +4 -0
  23. package/constants/gridClasses.js +1 -1
  24. package/constants/localeTextConstants.js +1 -0
  25. package/hooks/features/columnHeaders/useGridColumnHeaders.js +1 -1
  26. package/hooks/features/editing/useGridCellEditing.js +23 -4
  27. package/hooks/features/editing/useGridRowEditing.js +23 -2
  28. package/hooks/features/export/useGridCsvExport.js +1 -1
  29. package/hooks/features/export/useGridPrintExport.js +1 -1
  30. package/hooks/features/pagination/useGridPaginationModel.js +2 -2
  31. package/hooks/features/rowSelection/useGridRowSelection.d.ts +1 -1
  32. package/hooks/features/rowSelection/useGridRowSelection.js +30 -16
  33. package/hooks/features/rows/gridRowsUtils.d.ts +1 -1
  34. package/hooks/features/rows/gridRowsUtils.js +1 -5
  35. package/hooks/features/virtualization/useGridVirtualScroller.js +4 -4
  36. package/hooks/utils/useGridSelector.d.ts +3 -2
  37. package/hooks/utils/useGridSelector.js +27 -2
  38. package/index.d.ts +0 -1
  39. package/index.js +1 -1
  40. package/locales/arSD.js +1 -0
  41. package/locales/beBY.js +1 -0
  42. package/locales/bgBG.js +2 -0
  43. package/locales/csCZ.js +2 -0
  44. package/locales/daDK.js +2 -0
  45. package/locales/deDE.js +2 -0
  46. package/locales/elGR.js +1 -0
  47. package/locales/esES.js +6 -4
  48. package/locales/faIR.js +2 -0
  49. package/locales/fiFI.js +2 -0
  50. package/locales/frFR.js +2 -0
  51. package/locales/heIL.js +2 -0
  52. package/locales/hrHR.js +2 -0
  53. package/locales/huHU.js +2 -0
  54. package/locales/isIS.js +1 -0
  55. package/locales/itIT.js +2 -0
  56. package/locales/jaJP.js +2 -0
  57. package/locales/koKR.js +1 -0
  58. package/locales/nbNO.js +2 -0
  59. package/locales/nlNL.js +2 -0
  60. package/locales/nnNO.js +2 -0
  61. package/locales/plPL.js +1 -0
  62. package/locales/ptBR.js +2 -0
  63. package/locales/ptPT.js +2 -0
  64. package/locales/roRO.js +1 -0
  65. package/locales/ruRU.js +2 -0
  66. package/locales/skSK.js +1 -0
  67. package/locales/svSE.js +6 -5
  68. package/locales/trTR.js +4 -2
  69. package/locales/ukUA.js +1 -0
  70. package/locales/urPK.js +1 -0
  71. package/locales/viVN.js +2 -0
  72. package/locales/zhCN.js +6 -4
  73. package/locales/zhHK.js +1 -0
  74. package/locales/zhTW.js +1 -0
  75. package/models/api/gridLocaleTextApi.d.ts +1 -0
  76. package/models/props/DataGridProps.d.ts +1 -1
  77. package/modern/colDef/gridBooleanOperators.js +4 -6
  78. package/modern/components/GridDetailPanels.js +0 -1
  79. package/modern/components/GridPinnedRows.js +0 -1
  80. package/modern/components/GridRow.js +1 -1
  81. package/modern/components/base/GridOverlays.js +5 -6
  82. package/modern/components/cell/GridCell.js +1 -9
  83. package/modern/components/cell/GridEditInputCell.js +0 -67
  84. package/modern/components/columnsManagement/GridColumnsManagement.js +53 -6
  85. package/modern/components/panel/filterPanel/GridFilterInputBoolean.js +14 -5
  86. package/modern/components/toolbar/GridToolbar.js +12 -4
  87. package/modern/components/toolbar/GridToolbarExport.js +4 -3
  88. package/modern/components/virtualization/GridVirtualScrollbar.js +6 -0
  89. package/modern/constants/gridClasses.js +1 -1
  90. package/modern/constants/localeTextConstants.js +1 -0
  91. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +1 -1
  92. package/modern/hooks/features/editing/useGridCellEditing.js +23 -4
  93. package/modern/hooks/features/editing/useGridRowEditing.js +23 -2
  94. package/modern/hooks/features/export/useGridCsvExport.js +1 -1
  95. package/modern/hooks/features/export/useGridPrintExport.js +1 -1
  96. package/modern/hooks/features/pagination/useGridPaginationModel.js +2 -2
  97. package/modern/hooks/features/rowSelection/useGridRowSelection.js +30 -16
  98. package/modern/hooks/features/rows/gridRowsUtils.js +1 -5
  99. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +4 -4
  100. package/modern/hooks/utils/useGridSelector.js +27 -2
  101. package/modern/index.js +1 -1
  102. package/modern/locales/arSD.js +1 -0
  103. package/modern/locales/beBY.js +1 -0
  104. package/modern/locales/bgBG.js +2 -0
  105. package/modern/locales/csCZ.js +2 -0
  106. package/modern/locales/daDK.js +2 -0
  107. package/modern/locales/deDE.js +2 -0
  108. package/modern/locales/elGR.js +1 -0
  109. package/modern/locales/esES.js +6 -4
  110. package/modern/locales/faIR.js +2 -0
  111. package/modern/locales/fiFI.js +2 -0
  112. package/modern/locales/frFR.js +2 -0
  113. package/modern/locales/heIL.js +2 -0
  114. package/modern/locales/hrHR.js +2 -0
  115. package/modern/locales/huHU.js +2 -0
  116. package/modern/locales/isIS.js +1 -0
  117. package/modern/locales/itIT.js +2 -0
  118. package/modern/locales/jaJP.js +2 -0
  119. package/modern/locales/koKR.js +1 -0
  120. package/modern/locales/nbNO.js +2 -0
  121. package/modern/locales/nlNL.js +2 -0
  122. package/modern/locales/nnNO.js +2 -0
  123. package/modern/locales/plPL.js +1 -0
  124. package/modern/locales/ptBR.js +2 -0
  125. package/modern/locales/ptPT.js +2 -0
  126. package/modern/locales/roRO.js +1 -0
  127. package/modern/locales/ruRU.js +2 -0
  128. package/modern/locales/skSK.js +1 -0
  129. package/modern/locales/svSE.js +6 -5
  130. package/modern/locales/trTR.js +4 -2
  131. package/modern/locales/ukUA.js +1 -0
  132. package/modern/locales/urPK.js +1 -0
  133. package/modern/locales/viVN.js +2 -0
  134. package/modern/locales/zhCN.js +6 -4
  135. package/modern/locales/zhHK.js +1 -0
  136. package/modern/locales/zhTW.js +1 -0
  137. package/modern/utils/createSelector.js +11 -1
  138. package/modern/utils/utils.js +1 -3
  139. package/node/colDef/gridBooleanOperators.js +3 -5
  140. package/node/components/GridDetailPanels.js +0 -1
  141. package/node/components/GridPinnedRows.js +0 -1
  142. package/node/components/GridRow.js +1 -1
  143. package/node/components/base/GridOverlays.js +5 -6
  144. package/node/components/cell/GridCell.js +1 -9
  145. package/node/components/cell/GridEditInputCell.js +0 -67
  146. package/node/components/columnsManagement/GridColumnsManagement.js +53 -6
  147. package/node/components/panel/filterPanel/GridFilterInputBoolean.js +16 -5
  148. package/node/components/toolbar/GridToolbar.js +12 -4
  149. package/node/components/toolbar/GridToolbarExport.js +4 -3
  150. package/node/components/virtualization/GridVirtualScrollbar.js +6 -0
  151. package/node/constants/gridClasses.js +1 -1
  152. package/node/constants/localeTextConstants.js +1 -0
  153. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +1 -1
  154. package/node/hooks/features/editing/useGridCellEditing.js +23 -4
  155. package/node/hooks/features/editing/useGridRowEditing.js +23 -2
  156. package/node/hooks/features/export/useGridCsvExport.js +2 -2
  157. package/node/hooks/features/export/useGridPrintExport.js +2 -2
  158. package/node/hooks/features/pagination/useGridPaginationModel.js +2 -2
  159. package/node/hooks/features/rowSelection/useGridRowSelection.js +29 -15
  160. package/node/hooks/features/rows/gridRowsUtils.js +2 -8
  161. package/node/hooks/features/virtualization/useGridVirtualScroller.js +4 -4
  162. package/node/hooks/utils/useGridSelector.js +29 -3
  163. package/node/index.js +1 -1
  164. package/node/locales/arSD.js +1 -0
  165. package/node/locales/beBY.js +1 -0
  166. package/node/locales/bgBG.js +2 -0
  167. package/node/locales/csCZ.js +2 -0
  168. package/node/locales/daDK.js +2 -0
  169. package/node/locales/deDE.js +2 -0
  170. package/node/locales/elGR.js +1 -0
  171. package/node/locales/esES.js +6 -4
  172. package/node/locales/faIR.js +2 -0
  173. package/node/locales/fiFI.js +2 -0
  174. package/node/locales/frFR.js +2 -0
  175. package/node/locales/heIL.js +2 -0
  176. package/node/locales/hrHR.js +2 -0
  177. package/node/locales/huHU.js +2 -0
  178. package/node/locales/isIS.js +1 -0
  179. package/node/locales/itIT.js +2 -0
  180. package/node/locales/jaJP.js +2 -0
  181. package/node/locales/koKR.js +1 -0
  182. package/node/locales/nbNO.js +2 -0
  183. package/node/locales/nlNL.js +2 -0
  184. package/node/locales/nnNO.js +2 -0
  185. package/node/locales/plPL.js +1 -0
  186. package/node/locales/ptBR.js +2 -0
  187. package/node/locales/ptPT.js +2 -0
  188. package/node/locales/roRO.js +1 -0
  189. package/node/locales/ruRU.js +2 -0
  190. package/node/locales/skSK.js +1 -0
  191. package/node/locales/svSE.js +6 -5
  192. package/node/locales/trTR.js +4 -2
  193. package/node/locales/ukUA.js +1 -0
  194. package/node/locales/urPK.js +1 -0
  195. package/node/locales/viVN.js +2 -0
  196. package/node/locales/zhCN.js +6 -4
  197. package/node/locales/zhHK.js +1 -0
  198. package/node/locales/zhTW.js +1 -0
  199. package/node/utils/createSelector.js +11 -1
  200. package/node/utils/utils.js +1 -3
  201. package/package.json +1 -1
  202. package/utils/createSelector.d.ts +1 -1
  203. package/utils/createSelector.js +11 -1
  204. package/utils/utils.js +1 -3
@@ -2,7 +2,7 @@ import * as React from 'react';
2
2
  import { GridToolbarContainerProps } from '../containers/GridToolbarContainer';
3
3
  import { GridToolbarExportProps } from './GridToolbarExport';
4
4
  import { GridToolbarQuickFilterProps } from './GridToolbarQuickFilter';
5
- export interface GridToolbarProps extends GridToolbarContainerProps, Omit<GridToolbarExportProps, 'color'> {
5
+ export interface GridToolbarProps extends GridToolbarContainerProps, GridToolbarExportProps {
6
6
  /**
7
7
  * Show the quick filter component.
8
8
  * @default false
@@ -13,5 +13,5 @@ export interface GridToolbarProps extends GridToolbarContainerProps, Omit<GridTo
13
13
  */
14
14
  quickFilterProps?: GridToolbarQuickFilterProps;
15
15
  }
16
- declare const GridToolbar: React.ForwardRefExoticComponent<Omit<GridToolbarProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
16
+ declare const GridToolbar: React.ForwardRefExoticComponent<GridToolbarProps & React.RefAttributes<HTMLDivElement>>;
17
17
  export { GridToolbar };
@@ -14,14 +14,15 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
14
  const GridToolbar = /*#__PURE__*/React.forwardRef(function GridToolbar(props, ref) {
15
15
  // TODO v7: think about where export option should be passed.
16
16
  // from slotProps={{ toolbarExport: { ...exportOption } }} seems to be more appropriate
17
- const {
17
+ const _ref = props,
18
+ {
18
19
  csvOptions,
19
20
  printOptions,
20
21
  excelOptions,
21
22
  showQuickFilter = false,
22
23
  quickFilterProps = {}
23
- } = props,
24
- other = _objectWithoutPropertiesLoose(props, _excluded);
24
+ } = _ref,
25
+ other = _objectWithoutPropertiesLoose(_ref, _excluded);
25
26
  const rootProps = useGridRootProps();
26
27
  if (rootProps.disableColumnFilter && rootProps.disableColumnSelector && rootProps.disableDensitySelector && !showQuickFilter) {
27
28
  return null;
@@ -32,7 +33,7 @@ const GridToolbar = /*#__PURE__*/React.forwardRef(function GridToolbar(props, re
32
33
  children: [/*#__PURE__*/_jsx(GridToolbarColumnsButton, {}), /*#__PURE__*/_jsx(GridToolbarFilterButton, {}), /*#__PURE__*/_jsx(GridToolbarDensitySelector, {}), /*#__PURE__*/_jsx(GridToolbarExport, {
33
34
  csvOptions: csvOptions,
34
35
  printOptions: printOptions
35
- // TODO: remove the reference to excelOptions in community package
36
+ // @ts-ignore
36
37
  ,
37
38
  excelOptions: excelOptions
38
39
  }), /*#__PURE__*/_jsx("div", {
@@ -47,6 +48,8 @@ process.env.NODE_ENV !== "production" ? GridToolbar.propTypes = {
47
48
  // | These PropTypes are generated from the TypeScript type definitions |
48
49
  // | To update them edit the TypeScript types and run "pnpm proptypes" |
49
50
  // ----------------------------------------------------------------------
51
+ csvOptions: PropTypes.object,
52
+ printOptions: PropTypes.object,
50
53
  /**
51
54
  * Props passed to the quick filter component.
52
55
  */
@@ -56,6 +59,11 @@ process.env.NODE_ENV !== "production" ? GridToolbar.propTypes = {
56
59
  * @default false
57
60
  */
58
61
  showQuickFilter: PropTypes.bool,
62
+ /**
63
+ * The props used for each slot inside.
64
+ * @default {}
65
+ */
66
+ slotProps: PropTypes.object,
59
67
  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
60
68
  } : void 0;
61
69
  export { GridToolbar };
@@ -26,7 +26,7 @@ export interface GridToolbarExportProps {
26
26
  button?: Partial<ButtonProps>;
27
27
  tooltip?: Partial<TooltipProps>;
28
28
  };
29
- [key: string]: any;
29
+ [x: `data-${string}`]: string;
30
30
  }
31
31
  declare function GridCsvExportMenuItem(props: GridCsvExportMenuItemProps): React.JSX.Element;
32
32
  declare namespace GridCsvExportMenuItem {
@@ -36,5 +36,5 @@ declare function GridPrintExportMenuItem(props: GridPrintExportMenuItemProps): R
36
36
  declare namespace GridPrintExportMenuItem {
37
37
  var propTypes: any;
38
38
  }
39
- declare const GridToolbarExport: React.ForwardRefExoticComponent<Omit<GridToolbarExportProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
39
+ declare const GridToolbarExport: React.ForwardRefExoticComponent<GridToolbarExportProps & React.RefAttributes<HTMLButtonElement>>;
40
40
  export { GridToolbarExport, GridCsvExportMenuItem, GridPrintExportMenuItem };
@@ -82,12 +82,13 @@ process.env.NODE_ENV !== "production" ? GridPrintExportMenuItem.propTypes = {
82
82
  })
83
83
  } : void 0;
84
84
  const GridToolbarExport = /*#__PURE__*/React.forwardRef(function GridToolbarExport(props, ref) {
85
- const {
85
+ const _ref = props,
86
+ {
86
87
  csvOptions = {},
87
88
  printOptions = {},
88
89
  excelOptions
89
- } = props,
90
- other = _objectWithoutPropertiesLoose(props, _excluded3);
90
+ } = _ref,
91
+ other = _objectWithoutPropertiesLoose(_ref, _excluded3);
91
92
  const apiRef = useGridApiContext();
92
93
  const preProcessedButtons = apiRef.current.unstable_applyPipeProcessors('exportMenu', [], {
93
94
  excelOptions,
@@ -1,7 +1,7 @@
1
1
  export * from './GridToolbar';
2
2
  export * from './GridToolbarColumnsButton';
3
3
  export * from './GridToolbarDensitySelector';
4
- export type { GridExportDisplayOptions, GridExportMenuItemProps, GridCsvExportMenuItemProps, GridPrintExportMenuItemProps, } from './GridToolbarExport';
4
+ export type { GridExportDisplayOptions, GridExportMenuItemProps, GridCsvExportMenuItemProps, GridPrintExportMenuItemProps, GridToolbarExportProps, } from './GridToolbarExport';
5
5
  export { GridCsvExportMenuItem, GridPrintExportMenuItem, GridToolbarExport, } from './GridToolbarExport';
6
6
  export * from './GridToolbarFilterButton';
7
7
  export * from './GridToolbarExportContainer';
@@ -70,6 +70,9 @@ const GridVirtualScrollbar = /*#__PURE__*/React.forwardRef(function GridVirtualS
70
70
  const onScrollerScroll = useEventCallback(() => {
71
71
  const scroller = apiRef.current.virtualScrollerRef.current;
72
72
  const scrollbar = scrollbarRef.current;
73
+ if (!scrollbar) {
74
+ return;
75
+ }
73
76
  if (scroller[propertyScroll] === lastPosition.current) {
74
77
  return;
75
78
  }
@@ -85,6 +88,9 @@ const GridVirtualScrollbar = /*#__PURE__*/React.forwardRef(function GridVirtualS
85
88
  const onScrollbarScroll = useEventCallback(() => {
86
89
  const scroller = apiRef.current.virtualScrollerRef.current;
87
90
  const scrollbar = scrollbarRef.current;
91
+ if (!scrollbar) {
92
+ return;
93
+ }
88
94
  if (isLocked.current) {
89
95
  isLocked.current = false;
90
96
  return;
@@ -236,6 +236,10 @@ export interface GridClasses {
236
236
  * Styles applied to the columns management header element.
237
237
  */
238
238
  columnsManagementHeader: string;
239
+ /**
240
+ * Styles applied to the columns management search input element.
241
+ */
242
+ columnsManagementSearchInput: string;
239
243
  /**
240
244
  * Styles applied to the columns management footer element.
241
245
  */
@@ -2,4 +2,4 @@ import { unstable_generateUtilityClasses as generateUtilityClasses, unstable_gen
2
2
  export function getDataGridUtilityClass(slot) {
3
3
  return generateUtilityClass('MuiDataGrid', slot);
4
4
  }
5
- export const gridClasses = generateUtilityClasses('MuiDataGrid', ['actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'autoHeight', 'autosizing', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--flex', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--rangeTop', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell--pinnedLeft', 'cell--pinnedRight', 'cell--selectionMode', 'cell', 'cellCheckbox', 'cellEmpty', 'cellSkeleton', 'cellOffsetLeft', 'checkboxInput', 'columnHeader', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader--pinnedLeft', 'columnHeader--pinnedRight', 'columnHeader--last', 'columnHeader--lastUnpinned', 'columnHeader--siblingFocused', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnHeader--filledGroup', 'columnHeader--emptyGroup', 'columnHeaders', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsManagement', 'columnsManagementRow', 'columnsManagementHeader', 'columnsManagementFooter', 'container--top', 'container--bottom', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filler', 'filler--borderBottom', 'filler--pinnedLeft', 'filler--pinnedRight', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'headerFilterRow', 'iconButtonContainer', 'iconSeparator', 'main', 'main--hasPinnedRight', 'main--hasSkeletonLoadingOverlay', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'overlayWrapper', 'overlayWrapperInner', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'root--noToolbar', 'row', 'row--editable', 'row--editing', 'row--firstVisible', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'row--detailPanelExpanded', 'row--borderBottom', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'rowSkeleton', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'scrollbar', 'scrollbar--vertical', 'scrollbar--horizontal', 'scrollbarFiller', 'scrollbarFiller--header', 'scrollbarFiller--borderTop', 'scrollbarFiller--borderBottom', 'scrollbarFiller--pinnedRight', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScroller--hasScrollX', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'withVerticalBorder', 'withBorderColor', 'cell--withRightBorder', 'cell--withLeftBorder', 'columnHeader--withRightBorder', 'columnHeader--withLeftBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'treeDataGroupingCellLoadingContainer', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'groupingCriteriaCellLoadingContainer', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pinnedRowsRenderZone']);
5
+ export const gridClasses = generateUtilityClasses('MuiDataGrid', ['actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'autoHeight', 'autosizing', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--flex', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--rangeTop', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell--pinnedLeft', 'cell--pinnedRight', 'cell--selectionMode', 'cell', 'cellCheckbox', 'cellEmpty', 'cellSkeleton', 'cellOffsetLeft', 'checkboxInput', 'columnHeader', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader--pinnedLeft', 'columnHeader--pinnedRight', 'columnHeader--last', 'columnHeader--lastUnpinned', 'columnHeader--siblingFocused', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnHeader--filledGroup', 'columnHeader--emptyGroup', 'columnHeaders', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsManagement', 'columnsManagementRow', 'columnsManagementHeader', 'columnsManagementSearchInput', 'columnsManagementFooter', 'container--top', 'container--bottom', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filler', 'filler--borderBottom', 'filler--pinnedLeft', 'filler--pinnedRight', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'headerFilterRow', 'iconButtonContainer', 'iconSeparator', 'main', 'main--hasPinnedRight', 'main--hasSkeletonLoadingOverlay', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'overlayWrapper', 'overlayWrapperInner', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'root--noToolbar', 'row', 'row--editable', 'row--editing', 'row--firstVisible', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'row--detailPanelExpanded', 'row--borderBottom', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'rowSkeleton', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'scrollbar', 'scrollbar--vertical', 'scrollbar--horizontal', 'scrollbarFiller', 'scrollbarFiller--header', 'scrollbarFiller--borderTop', 'scrollbarFiller--borderBottom', 'scrollbarFiller--pinnedRight', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScroller--hasScrollX', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'withVerticalBorder', 'withBorderColor', 'cell--withRightBorder', 'cell--withLeftBorder', 'columnHeader--withRightBorder', 'columnHeader--withLeftBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'treeDataGroupingCellLoadingContainer', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'groupingCriteriaCellLoadingContainer', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pinnedRowsRenderZone']);
@@ -32,6 +32,7 @@ export const GRID_DEFAULT_LOCALE_TEXT = {
32
32
  columnsManagementNoColumns: 'No columns',
33
33
  columnsManagementShowHideAllText: 'Show/Hide All',
34
34
  columnsManagementReset: 'Reset',
35
+ columnsManagementDeleteIconLabel: 'Clear',
35
36
  // Filter panel text
36
37
  filterPanelAddFilter: 'Add filter',
37
38
  filterPanelRemoveAll: 'Remove all',
@@ -291,7 +291,7 @@ export const useGridColumnHeaders = props => {
291
291
  pinnedPosition: pinnedPosition,
292
292
  style: style,
293
293
  indexInSection: indexInSection,
294
- sectionLength: rowStructure.length,
294
+ sectionLength: visibleColumnGroupHeader.length,
295
295
  gridHasFiller: gridHasFiller
296
296
  }, index);
297
297
  });
@@ -241,26 +241,45 @@ export const useGridCellEditing = (apiRef, props) => {
241
241
  mode: GridCellModes.Edit
242
242
  }, other));
243
243
  }, [throwIfNotEditable, throwIfNotInMode, updateFieldInCellModesModel]);
244
- const updateStateToStartCellEditMode = useEventCallback(params => {
244
+ const updateStateToStartCellEditMode = useEventCallback(async params => {
245
245
  const {
246
246
  id,
247
247
  field,
248
248
  deleteValue,
249
249
  initialValue
250
250
  } = params;
251
- let newValue = apiRef.current.getCellValue(id, field);
251
+ const value = apiRef.current.getCellValue(id, field);
252
+ let newValue = value;
252
253
  if (deleteValue) {
253
254
  newValue = getDefaultCellValue(apiRef.current.getColumn(field));
254
255
  } else if (initialValue) {
255
256
  newValue = initialValue;
256
257
  }
257
- const newProps = {
258
+ const column = apiRef.current.getColumn(field);
259
+ const shouldProcessEditCellProps = !!column.preProcessEditCellProps && deleteValue;
260
+ let newProps = {
258
261
  value: newValue,
259
262
  error: false,
260
- isProcessingProps: false
263
+ isProcessingProps: shouldProcessEditCellProps
261
264
  };
262
265
  updateOrDeleteFieldState(id, field, newProps);
263
266
  apiRef.current.setCellFocus(id, field);
267
+ if (shouldProcessEditCellProps) {
268
+ newProps = await Promise.resolve(column.preProcessEditCellProps({
269
+ id,
270
+ row: apiRef.current.getRow(id),
271
+ props: newProps,
272
+ hasChanged: newValue !== value
273
+ }));
274
+ // Check if still in edit mode before updating
275
+ if (apiRef.current.getCellMode(id, field) === GridCellModes.Edit) {
276
+ const editingState = gridEditRowsStateSelector(apiRef.current.state);
277
+ updateOrDeleteFieldState(id, field, _extends({}, newProps, {
278
+ value: editingState[id][field].value,
279
+ isProcessingProps: false
280
+ }));
281
+ }
282
+ }
264
283
  });
265
284
  const stopCellEditMode = React.useCallback(params => {
266
285
  const {
@@ -318,10 +318,11 @@ export const useGridRowEditing = (apiRef, props) => {
318
318
  if (!cellParams.isEditable) {
319
319
  return acc;
320
320
  }
321
+ const column = apiRef.current.getColumn(field);
321
322
  let newValue = apiRef.current.getCellValue(id, field);
322
323
  if (fieldToFocus === field && (deleteValue || initialValue)) {
323
324
  if (deleteValue) {
324
- newValue = getDefaultCellValue(apiRef.current.getColumn(field));
325
+ newValue = getDefaultCellValue(column);
325
326
  } else if (initialValue) {
326
327
  newValue = initialValue;
327
328
  }
@@ -329,7 +330,7 @@ export const useGridRowEditing = (apiRef, props) => {
329
330
  acc[field] = {
330
331
  value: newValue,
331
332
  error: false,
332
- isProcessingProps: false
333
+ isProcessingProps: !!column.preProcessEditCellProps && deleteValue
333
334
  };
334
335
  return acc;
335
336
  }, {});
@@ -337,6 +338,26 @@ export const useGridRowEditing = (apiRef, props) => {
337
338
  if (fieldToFocus) {
338
339
  apiRef.current.setCellFocus(id, fieldToFocus);
339
340
  }
341
+ columnFields.filter(field => !!apiRef.current.getColumn(field).preProcessEditCellProps && deleteValue).forEach(field => {
342
+ const column = apiRef.current.getColumn(field);
343
+ const value = apiRef.current.getCellValue(id, field);
344
+ const newValue = deleteValue ? getDefaultCellValue(column) : initialValue ?? value;
345
+ Promise.resolve(column.preProcessEditCellProps({
346
+ id,
347
+ row: apiRef.current.getRow(id),
348
+ props: newProps[field],
349
+ hasChanged: newValue !== value
350
+ })).then(processedProps => {
351
+ // Check if still in edit mode before updating
352
+ if (apiRef.current.getRowMode(id) === GridRowModes.Edit) {
353
+ const editingState = gridEditRowsStateSelector(apiRef.current.state);
354
+ updateOrDeleteFieldState(id, field, _extends({}, processedProps, {
355
+ value: editingState[id][field].value,
356
+ isProcessingProps: false
357
+ }));
358
+ }
359
+ });
360
+ });
340
361
  });
341
362
  const stopRowEditMode = React.useCallback(params => {
342
363
  const {
@@ -5,7 +5,7 @@ import { exportAs } from "../../../utils/exportAs.js";
5
5
  import { buildCSV } from "./serializers/csvSerializer.js";
6
6
  import { getColumnsToExport, defaultGetRowsToExport } from "./utils.js";
7
7
  import { useGridRegisterPipeProcessor } from "../../core/pipeProcessing/index.js";
8
- import { GridCsvExportMenuItem } from "../../../components/toolbar/GridToolbarExport.js";
8
+ import { GridCsvExportMenuItem } from "../../../components/toolbar/index.js";
9
9
  import { jsx as _jsx } from "react/jsx-runtime";
10
10
  /**
11
11
  * @requires useGridColumns (state)
@@ -11,7 +11,7 @@ import { GRID_ID_AUTOGENERATED } from "../rows/gridRowsUtils.js";
11
11
  import { defaultGetRowsToExport, getColumnsToExport } from "./utils.js";
12
12
  import { getDerivedPaginationModel } from "../pagination/useGridPaginationModel.js";
13
13
  import { useGridRegisterPipeProcessor } from "../../core/pipeProcessing/index.js";
14
- import { GridPrintExportMenuItem } from "../../../components/toolbar/GridToolbarExport.js";
14
+ import { GridPrintExportMenuItem } from "../../../components/toolbar/index.js";
15
15
  import { getTotalHeaderHeight } from "../columns/gridColumnsUtils.js";
16
16
  import { GRID_CHECKBOX_SELECTION_COL_DEF } from "../../../colDef/gridCheckboxSelectionColDef.js";
17
17
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -75,7 +75,7 @@ export const useGridPaginationModel = (apiRef, props) => {
75
75
  pagination: _extends({}, state.pagination, {
76
76
  paginationModel: getDerivedPaginationModel(state.pagination, props.signature, paginationModel)
77
77
  })
78
- }));
78
+ }), 'setPaginationModel');
79
79
  }, [apiRef, logger, props.signature]);
80
80
  const paginationModelApi = {
81
81
  setPage,
@@ -113,7 +113,7 @@ export const useGridPaginationModel = (apiRef, props) => {
113
113
  pagination: _extends({}, state.pagination, {
114
114
  paginationModel: getDerivedPaginationModel(state.pagination, props.signature, paginationModel)
115
115
  })
116
- }));
116
+ }), 'stateRestorePreProcessing');
117
117
  return params;
118
118
  }, [apiRef, props.autoPageSize, props.signature]);
119
119
  useGridRegisterPipeProcessor(apiRef, 'exportState', stateExportPreProcessing);
@@ -9,4 +9,4 @@ export declare const rowSelectionStateInitializer: GridStateInitializer<Pick<Dat
9
9
  * @requires useGridFocus (state) - can be after
10
10
  * @requires useGridKeyboardNavigation (`cellKeyDown` event must first be consumed by it)
11
11
  */
12
- export declare const useGridRowSelection: (apiRef: React.MutableRefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, "checkboxSelection" | "rowSelectionModel" | "onRowSelectionModelChange" | "disableMultipleRowSelection" | "disableRowSelectionOnClick" | "isRowSelectable" | "checkboxSelectionVisibleOnly" | "pagination" | "paginationMode" | "classes" | "keepNonExistentRowsSelected" | "rowSelection" | "rowSelectionPropagation" | "signature">) => void;
12
+ export declare const useGridRowSelection: (apiRef: React.MutableRefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, "checkboxSelection" | "rowSelectionModel" | "onRowSelectionModelChange" | "disableMultipleRowSelection" | "disableRowSelectionOnClick" | "isRowSelectable" | "checkboxSelectionVisibleOnly" | "pagination" | "paginationMode" | "filterMode" | "classes" | "keepNonExistentRowsSelected" | "rowSelection" | "rowSelectionPropagation" | "signature">) => void;
@@ -4,7 +4,7 @@ import { GridSignature, useGridApiEventHandler } from "../../utils/useGridApiEve
4
4
  import { useGridApiMethod } from "../../utils/useGridApiMethod.js";
5
5
  import { useGridLogger } from "../../utils/useGridLogger.js";
6
6
  import { useGridSelector } from "../../utils/useGridSelector.js";
7
- import { gridRowMaximumTreeDepthSelector, gridRowTreeSelector } from "../rows/gridRowsSelector.js";
7
+ import { gridRowsLookupSelector, gridRowMaximumTreeDepthSelector, gridRowTreeSelector } from "../rows/gridRowsSelector.js";
8
8
  import { gridRowSelectionStateSelector, selectedGridRowsSelector, selectedIdsLookupSelector } from "./gridRowSelectionSelector.js";
9
9
  import { gridPaginatedVisibleSortedGridRowIdsSelector } from "../pagination/index.js";
10
10
  import { gridFocusCellSelector } from "../focus/gridFocusStateSelector.js";
@@ -171,30 +171,33 @@ export const useGridRowSelection = (apiRef, props) => {
171
171
  let newSelection;
172
172
  if (resetSelection) {
173
173
  if (isSelected) {
174
- newSelection = selectableIds;
174
+ newSelection = new Set(selectableIds);
175
175
  if (applyAutoSelection) {
176
176
  const addRow = rowId => {
177
- newSelection.push(rowId);
177
+ newSelection.add(rowId);
178
178
  };
179
179
  selectableIds.forEach(id => {
180
180
  findRowsToSelect(apiRef, tree, id, props.rowSelectionPropagation?.descendants ?? false, props.rowSelectionPropagation?.parents ?? false, addRow);
181
181
  });
182
182
  }
183
183
  } else {
184
- newSelection = [];
184
+ newSelection = new Set();
185
+ }
186
+ const currentLookup = selectedIdsLookupSelector(apiRef);
187
+ if (newSelection.size === Object.keys(currentLookup).length && Array.from(newSelection).every(id => currentLookup[id] === id)) {
188
+ return;
185
189
  }
186
190
  } else {
187
- // We clone the existing object to avoid mutating the same object returned by the selector to others part of the project
188
- const selectionLookup = _extends({}, selectedIdsLookupSelector(apiRef));
191
+ newSelection = new Set(Object.values(selectedIdsLookupSelector(apiRef)));
189
192
  const addRow = rowId => {
190
- selectionLookup[rowId] = rowId;
193
+ newSelection.add(rowId);
191
194
  };
192
195
  const removeRow = rowId => {
193
- delete selectionLookup[rowId];
196
+ newSelection.delete(rowId);
194
197
  };
195
198
  selectableIds.forEach(id => {
196
199
  if (isSelected) {
197
- selectionLookup[id] = id;
200
+ newSelection.add(id);
198
201
  if (applyAutoSelection) {
199
202
  findRowsToSelect(apiRef, tree, id, props.rowSelectionPropagation?.descendants ?? false, props.rowSelectionPropagation?.parents ?? false, addRow);
200
203
  }
@@ -205,11 +208,10 @@ export const useGridRowSelection = (apiRef, props) => {
205
208
  }
206
209
  }
207
210
  });
208
- newSelection = Object.values(selectionLookup);
209
211
  }
210
- const isSelectionValid = newSelection.length < 2 || canHaveMultipleSelection;
212
+ const isSelectionValid = newSelection.size < 2 || canHaveMultipleSelection;
211
213
  if (isSelectionValid) {
212
- apiRef.current.setRowSelectionModel(newSelection);
214
+ apiRef.current.setRowSelectionModel(Array.from(newSelection));
213
215
  }
214
216
  }, [logger, applyAutoSelection, canHaveMultipleSelection, apiRef, tree, props.rowSelectionPropagation?.descendants, props.rowSelectionPropagation?.parents]);
215
217
  const selectRowRange = React.useCallback(({
@@ -252,13 +254,20 @@ export const useGridRowSelection = (apiRef, props) => {
252
254
  return;
253
255
  }
254
256
  const currentSelection = gridRowSelectionStateSelector(apiRef.current.state);
257
+ const rowsLookup = gridRowsLookupSelector(apiRef);
255
258
  const filteredRowsLookup = gridFilteredRowsLookupSelector(apiRef);
256
259
 
257
260
  // We clone the existing object to avoid mutating the same object returned by the selector to others part of the project
258
261
  const selectionLookup = _extends({}, selectedIdsLookupSelector(apiRef));
262
+ const isNonExistent = id => {
263
+ if (props.filterMode === 'server') {
264
+ return !rowsLookup[id];
265
+ }
266
+ return filteredRowsLookup[id] !== true;
267
+ };
259
268
  let hasChanged = false;
260
269
  currentSelection.forEach(id => {
261
- if (filteredRowsLookup[id] !== true) {
270
+ if (isNonExistent(id)) {
262
271
  if (props.keepNonExistentRowsSelected) {
263
272
  return;
264
273
  }
@@ -284,15 +293,20 @@ export const useGridRowSelection = (apiRef, props) => {
284
293
  }
285
294
  }
286
295
  });
287
- if (hasChanged || isNestedData && !sortModelUpdated) {
296
+
297
+ // For nested data, on row tree updation (filtering, adding rows, etc.) when the selection is
298
+ // not empty, we need to re-run scanning of the tree to propagate the selection changes
299
+ // Example: A parent whose de-selected children are filtered out should now be selected
300
+ const shouldReapplyPropagation = isNestedData && props.rowSelectionPropagation?.parents && Object.keys(selectionLookup).length > 0;
301
+ if (hasChanged || shouldReapplyPropagation && !sortModelUpdated) {
288
302
  const newSelection = Object.values(selectionLookup);
289
- if (isNestedData) {
303
+ if (shouldReapplyPropagation) {
290
304
  apiRef.current.selectRows(newSelection, true, true);
291
305
  } else {
292
306
  apiRef.current.setRowSelectionModel(newSelection);
293
307
  }
294
308
  }
295
- }, [apiRef, isNestedData, props.rowSelectionPropagation?.parents, props.keepNonExistentRowsSelected, tree]);
309
+ }, [apiRef, isNestedData, props.rowSelectionPropagation?.parents, props.keepNonExistentRowsSelected, props.filterMode, tree]);
296
310
  const handleSingleRowSelection = React.useCallback((id, event) => {
297
311
  const hasCtrlKey = event.metaKey || event.ctrlKey;
298
312
 
@@ -37,7 +37,7 @@ export declare function calculatePinnedRowsHeight(apiRef: React.MutableRefObject
37
37
  top: number;
38
38
  bottom: number;
39
39
  };
40
- export declare function getMinimalContentHeight(apiRef: React.MutableRefObject<GridApiCommunity>): string;
40
+ export declare const minimalContentHeight = "var(--DataGrid-overlayHeight, calc(var(--height) * 2))";
41
41
  export declare function computeRowsUpdates(apiRef: React.MutableRefObject<GridApiCommunity>, updates: GridRowModelUpdate[], getRowId: DataGridProcessedProps['getRowId']): GridRowModelUpdate[];
42
42
  export declare const getValidRowHeight: (rowHeightProp: any, defaultRowHeight: number, warningMessage: string) => number;
43
43
  export declare const rowHeightWarning: string;
@@ -1,6 +1,5 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import { gridPinnedRowsSelector } from "./gridRowsSelector.js";
3
- import { gridDimensionsSelector } from "../dimensions/gridDimensionsSelectors.js";
4
3
  export const GRID_ROOT_GROUP_ID = `auto-generated-group-node-root`;
5
4
  export const GRID_ID_AUTOGENERATED = Symbol('mui.id_autogenerated');
6
5
  export const buildRootGroup = () => ({
@@ -285,10 +284,7 @@ export function calculatePinnedRowsHeight(apiRef) {
285
284
  bottom: bottomPinnedRowsHeight
286
285
  };
287
286
  }
288
- export function getMinimalContentHeight(apiRef) {
289
- const dimensions = gridDimensionsSelector(apiRef.current.state);
290
- return `var(--DataGrid-overlayHeight, ${2 * dimensions.rowHeight}px)`;
291
- }
287
+ export const minimalContentHeight = 'var(--DataGrid-overlayHeight, calc(var(--height) * 2))';
292
288
  export function computeRowsUpdates(apiRef, updates, getRowId) {
293
289
  const nonPinnedRowsUpdates = [];
294
290
  updates.forEach(update => {
@@ -21,11 +21,11 @@ import { clamp, range } from "../../../utils/utils.js";
21
21
  import { selectedIdsLookupSelector } from "../rowSelection/gridRowSelectionSelector.js";
22
22
  import { gridRowsMetaSelector } from "../rows/gridRowsMetaSelector.js";
23
23
  import { getFirstNonSpannedColumnToRender } from "../columns/gridColumnsUtils.js";
24
- import { getMinimalContentHeight } from "../rows/gridRowsUtils.js";
25
24
  import { gridRenderContextSelector, gridVirtualizationRowEnabledSelector, gridVirtualizationColumnEnabledSelector } from "./gridVirtualizationSelectors.js";
26
25
  import { EMPTY_RENDER_CONTEXT } from "./useGridVirtualization.js";
27
26
  import { gridRowSpanningHiddenCellsOriginMapSelector } from "../rows/gridRowSpanningSelectors.js";
28
27
  import { gridListColumnSelector } from "../listView/gridListViewSelectors.js";
28
+ import { minimalContentHeight } from "../rows/gridRowsUtils.js";
29
29
  import { jsx as _jsx } from "react/jsx-runtime";
30
30
  const MINIMUM_COLUMN_WIDTH = 50;
31
31
  var ScrollDirection = /*#__PURE__*/function (ScrollDirection) {
@@ -381,11 +381,11 @@ export const useGridVirtualScroller = () => {
381
381
  flexBasis: contentHeight,
382
382
  flexShrink: 0
383
383
  };
384
- if (rootProps.autoHeight && currentPage.rows.length === 0) {
385
- size.flexBasis = getMinimalContentHeight(apiRef); // Give room to show the overlay when there no rows.
384
+ if (size.flexBasis === 0) {
385
+ size.flexBasis = minimalContentHeight; // Give room to show the overlay when there no rows.
386
386
  }
387
387
  return size;
388
- }, [apiRef, columnsTotalWidth, contentHeight, needsHorizontalScrollbar, rootProps.autoHeight, currentPage.rows.length]);
388
+ }, [columnsTotalWidth, contentHeight, needsHorizontalScrollbar]);
389
389
  React.useEffect(() => {
390
390
  apiRef.current.publishEvent('virtualScrollerContentSizeChange');
391
391
  }, [apiRef, contentSize]);
@@ -1,9 +1,10 @@
1
1
  import * as React from 'react';
2
2
  import { fastObjectShallowCompare } from '@mui/x-internals/fastObjectShallowCompare';
3
3
  import type { GridApiCommon } from '../../models/api/gridApiCommon';
4
- import { OutputSelector, OutputSelectorV8 } from '../../utils/createSelector';
4
+ import type { OutputSelector, OutputSelectorV8 } from '../../utils/createSelector';
5
5
  type Selector<Api extends GridApiCommon, Args, T> = ((state: Api['state']) => T) | OutputSelectorV8<Api['state'], Args, T>;
6
6
  export declare const objectShallowCompare: typeof fastObjectShallowCompare;
7
+ export declare const argsEqual: (prev: any, curr: any) => boolean;
7
8
  export declare const useGridSelector: <Api extends GridApiCommon, T>(apiRef: React.MutableRefObject<Api>, selector: ((state: Api["state"]) => T) | OutputSelector<Api["state"], T>, equals?: (a: T, b: T) => boolean) => T;
8
- export declare const useGridSelectorV8: <Api extends GridApiCommon, Args, T>(apiRef: React.MutableRefObject<Api>, selector: Selector<Api, Args, T>, args?: Args, equals?: (a: T, b: T) => boolean) => T;
9
+ export declare const useGridSelectorV8: <Api extends GridApiCommon, Args, T>(apiRef: React.MutableRefObject<Api>, selector: Selector<Api, Args, T>, args?: Args, equals?: <U = T>(a: U, b: U) => boolean) => T;
9
10
  export {};
@@ -23,10 +23,26 @@ function applySelectorV8(apiRef, selector, args, instanceId) {
23
23
  }
24
24
  const defaultCompare = Object.is;
25
25
  export const objectShallowCompare = fastObjectShallowCompare;
26
+ const arrayShallowCompare = (a, b) => {
27
+ if (a === b) {
28
+ return true;
29
+ }
30
+ return a.length === b.length && a.every((v, i) => v === b[i]);
31
+ };
32
+ export const argsEqual = (prev, curr) => {
33
+ let fn = Object.is;
34
+ if (curr instanceof Array) {
35
+ fn = arrayShallowCompare;
36
+ } else if (curr instanceof Object) {
37
+ fn = objectShallowCompare;
38
+ }
39
+ return fn(prev, curr);
40
+ };
26
41
  const createRefs = () => ({
27
42
  state: null,
28
43
  equals: null,
29
- selector: null
44
+ selector: null,
45
+ args: null
30
46
  });
31
47
 
32
48
  // TODO v8: Remove this function
@@ -71,9 +87,18 @@ export const useGridSelectorV8 = (apiRef, selector, args = undefined, equals = d
71
87
  refs.current.state = state;
72
88
  refs.current.equals = equals;
73
89
  refs.current.selector = selector;
90
+ const prevArgs = refs.current.args;
91
+ refs.current.args = args;
92
+ if (didInit && !argsEqual(prevArgs, args)) {
93
+ const newState = applySelectorV8(apiRef, refs.current.selector, refs.current.args, apiRef.current.instanceId);
94
+ if (!refs.current.equals(refs.current.state, newState)) {
95
+ refs.current.state = newState;
96
+ setState(newState);
97
+ }
98
+ }
74
99
  useOnMount(() => {
75
100
  return apiRef.current.store.subscribe(() => {
76
- const newState = applySelectorV8(apiRef, refs.current.selector, args, apiRef.current.instanceId);
101
+ const newState = applySelectorV8(apiRef, refs.current.selector, refs.current.args, apiRef.current.instanceId);
77
102
  if (!refs.current.equals(refs.current.state, newState)) {
78
103
  refs.current.state = newState;
79
104
  setState(newState);
package/index.d.ts CHANGED
@@ -13,7 +13,6 @@ export * from './context';
13
13
  export * from './colDef';
14
14
  export * from './utils';
15
15
  export type { DataGridProps, GridExperimentalFeatures } from './models/props/DataGridProps';
16
- export type { GridToolbarExportProps } from './components/toolbar/GridToolbarExport';
17
16
  export type { GridExportFormat, GridExportExtension } from './models/gridExport';
18
17
  export { GridColumnHeaders } from './components/GridColumnHeaders';
19
18
  export type { GridColumnHeadersProps } from './components/GridColumnHeaders';
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid v7.22.1
2
+ * @mui/x-data-grid v7.22.3
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
package/locales/arSD.js CHANGED
@@ -34,6 +34,7 @@ const arSDGrid = {
34
34
  // columnsManagementNoColumns: 'No columns',
35
35
  // columnsManagementShowHideAllText: 'Show/Hide All',
36
36
  // columnsManagementReset: 'Reset',
37
+ // columnsManagementDeleteIconLabel: 'Clear',
37
38
 
38
39
  // Filter panel text
39
40
  filterPanelAddFilter: 'إضافة مرشِح',
package/locales/beBY.js CHANGED
@@ -48,6 +48,7 @@ const beBYGrid = {
48
48
  // columnsManagementNoColumns: 'No columns',
49
49
  // columnsManagementShowHideAllText: 'Show/Hide All',
50
50
  // columnsManagementReset: 'Reset',
51
+ // columnsManagementDeleteIconLabel: 'Clear',
51
52
 
52
53
  // Filter panel text
53
54
  filterPanelAddFilter: 'Дадаць фільтр',
package/locales/bgBG.js CHANGED
@@ -34,6 +34,8 @@ const bgBGGrid = {
34
34
  columnsManagementNoColumns: 'Няма колони',
35
35
  columnsManagementShowHideAllText: 'Покажи/Скрий Всичко',
36
36
  columnsManagementReset: 'Нулирай',
37
+ // columnsManagementDeleteIconLabel: 'Clear',
38
+
37
39
  // Filter panel text
38
40
  filterPanelAddFilter: 'Добави Филтър',
39
41
  filterPanelRemoveAll: 'Премахни всички',
package/locales/csCZ.js CHANGED
@@ -42,6 +42,8 @@ const csCZGrid = {
42
42
  columnsManagementNoColumns: 'Žádné sloupce',
43
43
  columnsManagementShowHideAllText: 'Zobrazit/skrýt vše',
44
44
  columnsManagementReset: 'Resetovat',
45
+ // columnsManagementDeleteIconLabel: 'Clear',
46
+
45
47
  // Filter panel text
46
48
  filterPanelAddFilter: 'Přidat filtr',
47
49
  filterPanelRemoveAll: 'Odstranit vše',
package/locales/daDK.js CHANGED
@@ -34,6 +34,8 @@ const daDKGrid = {
34
34
  columnsManagementNoColumns: 'Ingen søjler',
35
35
  columnsManagementShowHideAllText: 'Vis/Skjul Alle',
36
36
  columnsManagementReset: 'Nulstil',
37
+ // columnsManagementDeleteIconLabel: 'Clear',
38
+
37
39
  // Filter panel text
38
40
  filterPanelAddFilter: 'Tilføj filter',
39
41
  filterPanelRemoveAll: 'Fjern alle',