@mui/x-data-grid 7.0.0-beta.7 → 7.0.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 (190) hide show
  1. package/CHANGELOG.md +195 -12
  2. package/DataGrid/DataGrid.js +13 -17
  3. package/DataGrid/useDataGridProps.js +3 -5
  4. package/README.md +1 -1
  5. package/components/GridFooter.js +2 -3
  6. package/components/GridHeader.js +1 -2
  7. package/components/GridPagination.d.ts +6 -5
  8. package/components/GridPagination.js +12 -4
  9. package/components/GridRow.js +13 -17
  10. package/components/base/GridFooterPlaceholder.js +1 -2
  11. package/components/base/GridOverlays.js +3 -6
  12. package/components/cell/GridActionsCell.js +4 -6
  13. package/components/cell/GridActionsCellItem.d.ts +8 -25
  14. package/components/cell/GridActionsCellItem.js +8 -5
  15. package/components/cell/GridBooleanCell.d.ts +1 -0
  16. package/components/cell/GridBooleanCell.js +3 -2
  17. package/components/cell/GridCell.js +7 -8
  18. package/components/cell/GridEditBooleanCell.js +1 -2
  19. package/components/cell/GridEditDateCell.js +2 -3
  20. package/components/cell/GridEditInputCell.js +2 -2
  21. package/components/cell/GridEditSingleSelectCell.js +5 -8
  22. package/components/columnHeaders/ColumnHeaderMenuIcon.js +2 -3
  23. package/components/columnHeaders/GridColumnGroupHeader.js +4 -5
  24. package/components/columnHeaders/GridColumnHeaderFilterIconButton.js +2 -3
  25. package/components/columnHeaders/GridColumnHeaderItem.js +5 -6
  26. package/components/columnHeaders/GridColumnHeaderSortIcon.js +1 -2
  27. package/components/columnHeaders/GridColumnHeaderTitle.js +2 -3
  28. package/components/columnHeaders/GridGenericColumnHeaderItem.js +1 -1
  29. package/components/columnSelection/GridCellCheckboxRenderer.js +3 -5
  30. package/components/columnSelection/GridHeaderCheckbox.js +1 -2
  31. package/components/columnsManagement/GridColumnsManagement.js +17 -21
  32. package/components/containers/GridRoot.js +3 -3
  33. package/components/menu/GridMenu.js +4 -6
  34. package/components/menu/columnMenu/GridColumnHeaderMenu.js +1 -1
  35. package/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +2 -3
  36. package/components/panel/GridColumnsPanel.js +1 -2
  37. package/components/panel/GridPanel.d.ts +1 -10
  38. package/components/panel/GridPanel.js +1 -2
  39. package/components/panel/GridPreferencesPanel.js +2 -3
  40. package/components/panel/filterPanel/GridFilterForm.js +24 -27
  41. package/components/panel/filterPanel/GridFilterInputBoolean.d.ts +1 -1
  42. package/components/panel/filterPanel/GridFilterInputBoolean.js +6 -7
  43. package/components/panel/filterPanel/GridFilterInputDate.d.ts +1 -1
  44. package/components/panel/filterPanel/GridFilterInputDate.js +3 -4
  45. package/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +11 -15
  46. package/components/panel/filterPanel/GridFilterInputMultipleValue.js +10 -14
  47. package/components/panel/filterPanel/GridFilterInputSingleSelect.d.ts +1 -1
  48. package/components/panel/filterPanel/GridFilterInputSingleSelect.js +10 -11
  49. package/components/panel/filterPanel/GridFilterInputValue.d.ts +1 -1
  50. package/components/panel/filterPanel/GridFilterInputValue.js +5 -7
  51. package/components/panel/filterPanel/GridFilterPanel.js +5 -9
  52. package/components/panel/filterPanel/filterPanelUtils.js +1 -1
  53. package/components/toolbar/GridToolbarColumnsButton.js +3 -5
  54. package/components/toolbar/GridToolbarDensitySelector.js +8 -10
  55. package/components/toolbar/GridToolbarExport.js +2 -2
  56. package/components/toolbar/GridToolbarExportContainer.js +3 -5
  57. package/components/toolbar/GridToolbarFilterButton.js +3 -5
  58. package/components/toolbar/GridToolbarQuickFilter.js +4 -5
  59. package/components/virtualization/GridVirtualScrollerContent.js +1 -2
  60. package/components/virtualization/GridVirtualScrollerRenderZone.js +1 -2
  61. package/hooks/core/strategyProcessing/useGridStrategyProcessing.js +1 -2
  62. package/hooks/core/useGridApiInitialization.js +4 -6
  63. package/hooks/features/clipboard/useGridClipboard.js +6 -5
  64. package/hooks/features/columnGrouping/gridColumnGroupsSelector.js +4 -16
  65. package/hooks/features/columnGrouping/gridColumnGroupsUtils.js +4 -8
  66. package/hooks/features/columnGrouping/useGridColumnGrouping.js +12 -23
  67. package/hooks/features/columnHeaders/useGridColumnHeaders.js +6 -8
  68. package/hooks/features/columnMenu/useGridColumnMenuSlots.js +2 -2
  69. package/hooks/features/columnResize/useGridColumnResize.js +9 -19
  70. package/hooks/features/columns/gridColumnsSelector.js +1 -2
  71. package/hooks/features/columns/gridColumnsUtils.d.ts +0 -9
  72. package/hooks/features/columns/gridColumnsUtils.js +2 -22
  73. package/hooks/features/columns/useGridColumnSpanning.js +1 -2
  74. package/hooks/features/columns/useGridColumns.js +11 -19
  75. package/hooks/features/density/densitySelector.d.ts +4 -2
  76. package/hooks/features/density/densitySelector.js +8 -2
  77. package/hooks/features/density/densityState.d.ts +1 -4
  78. package/hooks/features/density/useGridDensity.d.ts +2 -4
  79. package/hooks/features/density/useGridDensity.js +21 -29
  80. package/hooks/features/dimensions/useGridDimensions.js +3 -5
  81. package/hooks/features/editing/useGridCellEditing.js +4 -6
  82. package/hooks/features/editing/useGridEditing.js +1 -2
  83. package/hooks/features/editing/useGridRowEditing.js +4 -6
  84. package/hooks/features/export/serializers/csvSerializer.d.ts +2 -0
  85. package/hooks/features/export/serializers/csvSerializer.js +25 -16
  86. package/hooks/features/export/useGridCsvExport.js +9 -10
  87. package/hooks/features/export/useGridPrintExport.js +9 -15
  88. package/hooks/features/export/utils.js +2 -3
  89. package/hooks/features/filter/gridFilterSelector.js +15 -22
  90. package/hooks/features/filter/gridFilterUtils.js +10 -16
  91. package/hooks/features/filter/useGridFilter.js +9 -15
  92. package/hooks/features/focus/useGridFocus.js +5 -6
  93. package/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +1 -4
  94. package/hooks/features/headerFiltering/useGridHeaderFiltering.js +12 -17
  95. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +1 -2
  96. package/hooks/features/pagination/gridPaginationSelector.js +1 -2
  97. package/hooks/features/pagination/useGridPagination.js +2 -3
  98. package/hooks/features/pagination/useGridPaginationModel.js +6 -11
  99. package/hooks/features/pagination/useGridRowCount.js +3 -6
  100. package/hooks/features/preferencesPanel/useGridPreferencesPanel.js +7 -12
  101. package/hooks/features/rowSelection/useGridRowSelection.js +11 -16
  102. package/hooks/features/rows/gridRowsSelector.js +11 -19
  103. package/hooks/features/rows/gridRowsUtils.js +7 -9
  104. package/hooks/features/rows/useGridParamsApi.js +1 -1
  105. package/hooks/features/rows/useGridRows.js +4 -13
  106. package/hooks/features/rows/useGridRowsMeta.js +7 -13
  107. package/hooks/features/scroll/useGridScroll.js +2 -3
  108. package/hooks/features/sorting/gridSortingSelector.js +4 -7
  109. package/hooks/features/sorting/useGridSorting.js +8 -14
  110. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +1 -1
  111. package/hooks/features/virtualization/useGridVirtualScroller.js +220 -71
  112. package/hooks/utils/useGridApiEventHandler.js +5 -10
  113. package/hooks/utils/useGridNativeEventListener.js +1 -2
  114. package/index.js +1 -1
  115. package/internals/index.d.ts +2 -0
  116. package/internals/index.js +1 -0
  117. package/internals/utils/useProps.js +1 -2
  118. package/joy/joySlots.js +7 -13
  119. package/models/api/gridRowsMetaApi.d.ts +1 -1
  120. package/models/api/index.d.ts +1 -1
  121. package/models/api/index.js +0 -1
  122. package/models/events/gridEventLookup.d.ts +7 -0
  123. package/models/gridExport.d.ts +6 -0
  124. package/models/gridStateCommunity.d.ts +1 -0
  125. package/models/props/DataGridProps.d.ts +23 -27
  126. package/modern/DataGrid/DataGrid.js +13 -17
  127. package/modern/DataGrid/useDataGridProps.js +3 -5
  128. package/modern/components/GridPagination.js +11 -2
  129. package/modern/components/cell/GridActionsCell.js +1 -1
  130. package/modern/components/cell/GridActionsCellItem.js +4 -0
  131. package/modern/components/cell/GridBooleanCell.js +3 -2
  132. package/modern/components/containers/GridRoot.js +3 -3
  133. package/modern/components/panel/filterPanel/GridFilterInputBoolean.js +1 -1
  134. package/modern/components/panel/filterPanel/GridFilterInputDate.js +1 -1
  135. package/modern/components/panel/filterPanel/GridFilterInputSingleSelect.js +1 -1
  136. package/modern/components/panel/filterPanel/GridFilterInputValue.js +1 -1
  137. package/modern/components/toolbar/GridToolbarDensitySelector.js +5 -5
  138. package/modern/hooks/features/clipboard/useGridClipboard.js +4 -2
  139. package/modern/hooks/features/columnResize/useGridColumnResize.js +1 -1
  140. package/modern/hooks/features/columns/gridColumnsUtils.js +0 -19
  141. package/modern/hooks/features/density/densitySelector.js +8 -2
  142. package/modern/hooks/features/density/useGridDensity.js +21 -29
  143. package/modern/hooks/features/editing/useGridCellEditing.js +1 -1
  144. package/modern/hooks/features/editing/useGridRowEditing.js +1 -1
  145. package/modern/hooks/features/export/serializers/csvSerializer.js +23 -12
  146. package/modern/hooks/features/export/useGridCsvExport.js +2 -1
  147. package/modern/hooks/features/filter/gridFilterUtils.js +1 -1
  148. package/modern/hooks/features/rowSelection/useGridRowSelection.js +3 -2
  149. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +211 -57
  150. package/modern/index.js +1 -1
  151. package/modern/internals/index.js +1 -0
  152. package/modern/models/api/index.js +0 -1
  153. package/modern/utils/createSelector.js +1 -1
  154. package/modern/utils/domUtils.js +1 -1
  155. package/modern/utils/keyboardUtils.js +1 -1
  156. package/node/DataGrid/DataGrid.js +13 -17
  157. package/node/DataGrid/useDataGridProps.js +3 -5
  158. package/node/components/GridPagination.js +9 -1
  159. package/node/components/cell/GridActionsCell.js +1 -1
  160. package/node/components/cell/GridActionsCellItem.js +4 -0
  161. package/node/components/cell/GridBooleanCell.js +3 -2
  162. package/node/components/containers/GridRoot.js +2 -2
  163. package/node/components/panel/filterPanel/GridFilterInputBoolean.js +1 -1
  164. package/node/components/panel/filterPanel/GridFilterInputDate.js +1 -1
  165. package/node/components/panel/filterPanel/GridFilterInputSingleSelect.js +1 -1
  166. package/node/components/panel/filterPanel/GridFilterInputValue.js +1 -1
  167. package/node/components/toolbar/GridToolbarDensitySelector.js +4 -4
  168. package/node/hooks/features/clipboard/useGridClipboard.js +4 -2
  169. package/node/hooks/features/columnResize/useGridColumnResize.js +1 -1
  170. package/node/hooks/features/columns/gridColumnsUtils.js +0 -20
  171. package/node/hooks/features/density/densitySelector.js +9 -3
  172. package/node/hooks/features/density/useGridDensity.js +22 -30
  173. package/node/hooks/features/editing/useGridCellEditing.js +1 -1
  174. package/node/hooks/features/editing/useGridRowEditing.js +1 -1
  175. package/node/hooks/features/export/serializers/csvSerializer.js +23 -12
  176. package/node/hooks/features/export/useGridCsvExport.js +2 -1
  177. package/node/hooks/features/filter/gridFilterUtils.js +1 -1
  178. package/node/hooks/features/rowSelection/useGridRowSelection.js +2 -1
  179. package/node/hooks/features/virtualization/useGridVirtualScroller.js +211 -57
  180. package/node/index.js +1 -1
  181. package/node/internals/index.js +12 -0
  182. package/node/models/api/index.js +0 -11
  183. package/node/utils/createSelector.js +1 -1
  184. package/node/utils/domUtils.js +1 -1
  185. package/node/utils/keyboardUtils.js +1 -1
  186. package/package.json +4 -4
  187. package/utils/createSelector.js +9 -9
  188. package/utils/domUtils.js +4 -7
  189. package/utils/getGridLocalization.js +9 -12
  190. package/utils/keyboardUtils.js +1 -1
@@ -41,19 +41,15 @@ const createGroupLookup = columnGroupingModel => {
41
41
  return _extends({}, groupLookup);
42
42
  };
43
43
  export const columnGroupsStateInitializer = (state, props, apiRef) => {
44
- var _props$columnGrouping, _props$columnGrouping2, _apiRef$current$state;
45
44
  if (!props.columnGroupingModel) {
46
45
  return state;
47
46
  }
48
47
  const columnFields = gridColumnFieldsSelector(apiRef);
49
48
  const visibleColumnFields = gridVisibleColumnFieldsSelector(apiRef);
50
- const groupLookup = createGroupLookup((_props$columnGrouping = props.columnGroupingModel) != null ? _props$columnGrouping : []);
51
- const unwrappedGroupingModel = unwrapGroupingColumnModel((_props$columnGrouping2 = props.columnGroupingModel) != null ? _props$columnGrouping2 : []);
52
- const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(columnFields, unwrappedGroupingModel, (_apiRef$current$state = apiRef.current.state.pinnedColumns) != null ? _apiRef$current$state : {});
53
- const maxDepth = visibleColumnFields.length === 0 ? 0 : Math.max(...visibleColumnFields.map(field => {
54
- var _unwrappedGroupingMod, _unwrappedGroupingMod2;
55
- return (_unwrappedGroupingMod = (_unwrappedGroupingMod2 = unwrappedGroupingModel[field]) == null ? void 0 : _unwrappedGroupingMod2.length) != null ? _unwrappedGroupingMod : 0;
56
- }));
49
+ const groupLookup = createGroupLookup(props.columnGroupingModel ?? []);
50
+ const unwrappedGroupingModel = unwrapGroupingColumnModel(props.columnGroupingModel ?? []);
51
+ const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(columnFields, unwrappedGroupingModel, apiRef.current.state.pinnedColumns ?? {});
52
+ const maxDepth = visibleColumnFields.length === 0 ? 0 : Math.max(...visibleColumnFields.map(field => unwrappedGroupingModel[field]?.length ?? 0));
57
53
  return _extends({}, state, {
58
54
  columnGrouping: {
59
55
  lookup: groupLookup,
@@ -73,9 +69,8 @@ export const useGridColumnGrouping = (apiRef, props) => {
73
69
  * API METHODS
74
70
  */
75
71
  const getColumnGroupPath = React.useCallback(field => {
76
- var _unwrappedGroupingMod3;
77
72
  const unwrappedGroupingModel = gridColumnGroupsUnwrappedModelSelector(apiRef);
78
- return (_unwrappedGroupingMod3 = unwrappedGroupingModel[field]) != null ? _unwrappedGroupingMod3 : [];
73
+ return unwrappedGroupingModel[field] ?? [];
79
74
  }, [apiRef]);
80
75
  const getAllGroupDetails = React.useCallback(() => {
81
76
  const columnGroupLookup = gridColumnGroupsLookupSelector(apiRef);
@@ -87,12 +82,10 @@ export const useGridColumnGrouping = (apiRef, props) => {
87
82
  };
88
83
  useGridApiMethod(apiRef, columnGroupingApi, 'public');
89
84
  const handleColumnIndexChange = React.useCallback(() => {
90
- var _props$columnGrouping3;
91
- const unwrappedGroupingModel = unwrapGroupingColumnModel((_props$columnGrouping3 = props.columnGroupingModel) != null ? _props$columnGrouping3 : []);
85
+ const unwrappedGroupingModel = unwrapGroupingColumnModel(props.columnGroupingModel ?? []);
92
86
  apiRef.current.setState(state => {
93
- var _state$columns$ordere, _state$columns, _state$pinnedColumns;
94
- const orderedFields = (_state$columns$ordere = (_state$columns = state.columns) == null ? void 0 : _state$columns.orderedFields) != null ? _state$columns$ordere : [];
95
- const pinnedColumns = (_state$pinnedColumns = state.pinnedColumns) != null ? _state$pinnedColumns : {};
87
+ const orderedFields = state.columns?.orderedFields ?? [];
88
+ const pinnedColumns = state.pinnedColumns ?? {};
96
89
  const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(orderedFields, unwrappedGroupingModel, pinnedColumns);
97
90
  return _extends({}, state, {
98
91
  columnGrouping: _extends({}, state.columnGrouping, {
@@ -102,18 +95,14 @@ export const useGridColumnGrouping = (apiRef, props) => {
102
95
  });
103
96
  }, [apiRef, props.columnGroupingModel]);
104
97
  const updateColumnGroupingState = React.useCallback(columnGroupingModel => {
105
- var _apiRef$current$getPi, _apiRef$current$getPi2, _apiRef$current;
106
98
  // @ts-expect-error Move this logic to `Pro` package
107
- const pinnedColumns = (_apiRef$current$getPi = (_apiRef$current$getPi2 = (_apiRef$current = apiRef.current).getPinnedColumns) == null ? void 0 : _apiRef$current$getPi2.call(_apiRef$current)) != null ? _apiRef$current$getPi : {};
99
+ const pinnedColumns = apiRef.current.getPinnedColumns?.() ?? {};
108
100
  const columnFields = gridColumnFieldsSelector(apiRef);
109
101
  const visibleColumnFields = gridVisibleColumnFieldsSelector(apiRef);
110
- const groupLookup = createGroupLookup(columnGroupingModel != null ? columnGroupingModel : []);
111
- const unwrappedGroupingModel = unwrapGroupingColumnModel(columnGroupingModel != null ? columnGroupingModel : []);
102
+ const groupLookup = createGroupLookup(columnGroupingModel ?? []);
103
+ const unwrappedGroupingModel = unwrapGroupingColumnModel(columnGroupingModel ?? []);
112
104
  const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(columnFields, unwrappedGroupingModel, pinnedColumns);
113
- const maxDepth = visibleColumnFields.length === 0 ? 0 : Math.max(...visibleColumnFields.map(field => {
114
- var _unwrappedGroupingMod4, _unwrappedGroupingMod5;
115
- return (_unwrappedGroupingMod4 = (_unwrappedGroupingMod5 = unwrappedGroupingModel[field]) == null ? void 0 : _unwrappedGroupingMod5.length) != null ? _unwrappedGroupingMod4 : 0;
116
- }));
105
+ const maxDepth = visibleColumnFields.length === 0 ? 0 : Math.max(...visibleColumnFields.map(field => unwrappedGroupingModel[field]?.length ?? 0));
117
106
  apiRef.current.setState(state => {
118
107
  return _extends({}, state, {
119
108
  columnGrouping: {
@@ -92,8 +92,8 @@ export const useGridColumnHeaders = props => {
92
92
  };
93
93
  };
94
94
  const getFillers = (params, children, leftOverflow, borderTop = false) => {
95
- const isPinnedRight = (params == null ? void 0 : params.position) === GridPinnedColumnPosition.RIGHT;
96
- const isNotPinned = (params == null ? void 0 : params.position) === undefined;
95
+ const isPinnedRight = params?.position === GridPinnedColumnPosition.RIGHT;
96
+ const isNotPinned = params?.position === undefined;
97
97
  const hasScrollbarFiller = pinnedColumns.right.length > 0 && isPinnedRight || pinnedColumns.right.length === 0 && isNotPinned;
98
98
  const leftOffsetWidth = offsetLeft - leftOverflow;
99
99
  return /*#__PURE__*/_jsxs(React.Fragment, {
@@ -146,7 +146,7 @@ export const useGridColumnHeaders = props => {
146
146
  const tabIndex = columnHeaderTabIndexState !== null && columnHeaderTabIndexState.field === colDef.field || isFirstColumn && !hasOtherElementInTabSequence ? 0 : -1;
147
147
  const hasFocus = columnHeaderFocus !== null && columnHeaderFocus.field === colDef.field;
148
148
  const open = columnMenuState.open && columnMenuState.field === colDef.field;
149
- const pinnedPosition = params == null ? void 0 : params.position;
149
+ const pinnedPosition = params?.position;
150
150
  const style = getCellOffsetStyle({
151
151
  pinnedPosition,
152
152
  columnIndex,
@@ -201,7 +201,6 @@ export const useGridColumnHeaders = props => {
201
201
  depth,
202
202
  params
203
203
  }) => {
204
- var _apiRef$current$getCo, _apiRef$current$getCo2;
205
204
  const columnsToRender = getColumnsToRender(params);
206
205
  if (columnsToRender.renderedColumns.length === 0) {
207
206
  return null;
@@ -213,13 +212,13 @@ export const useGridColumnHeaders = props => {
213
212
  } = columnsToRender;
214
213
  const rowStructure = columnGroupsHeaderStructure[depth];
215
214
  const firstColumnFieldToRender = visibleColumns[firstColumnToRender].field;
216
- const firstGroupToRender = (_apiRef$current$getCo = apiRef.current.getColumnGroupPath(firstColumnFieldToRender)[depth]) != null ? _apiRef$current$getCo : null;
215
+ const firstGroupToRender = apiRef.current.getColumnGroupPath(firstColumnFieldToRender)[depth] ?? null;
217
216
  const firstGroupIndex = rowStructure.findIndex(({
218
217
  groupId,
219
218
  columnFields
220
219
  }) => groupId === firstGroupToRender && columnFields.includes(firstColumnFieldToRender));
221
220
  const lastColumnFieldToRender = visibleColumns[lastColumnToRender - 1].field;
222
- const lastGroupToRender = (_apiRef$current$getCo2 = apiRef.current.getColumnGroupPath(lastColumnFieldToRender)[depth]) != null ? _apiRef$current$getCo2 : null;
221
+ const lastGroupToRender = apiRef.current.getColumnGroupPath(lastColumnFieldToRender)[depth] ?? null;
223
222
  const lastGroupIndex = rowStructure.findIndex(({
224
223
  groupId,
225
224
  columnFields
@@ -232,9 +231,8 @@ export const useGridColumnHeaders = props => {
232
231
  const firstVisibleColumnIndex = visibleColumnGroupHeader[0].columnFields.indexOf(firstColumnFieldToRender);
233
232
  const hiddenGroupColumns = visibleColumnGroupHeader[0].columnFields.slice(0, firstVisibleColumnIndex);
234
233
  const leftOverflow = hiddenGroupColumns.reduce((acc, field) => {
235
- var _column$computedWidth;
236
234
  const column = apiRef.current.getColumn(field);
237
- return acc + ((_column$computedWidth = column.computedWidth) != null ? _column$computedWidth : 0);
235
+ return acc + (column.computedWidth ?? 0);
238
236
  }, 0);
239
237
  let columnIndex = firstColumnToRender;
240
238
  const children = visibleColumnGroupHeader.map(({
@@ -37,8 +37,8 @@ const useGridColumnMenuSlots = props => {
37
37
  const sorted = cleansedItems.sort((a, b) => {
38
38
  const leftItemProps = processedSlotProps[a];
39
39
  const rightItemProps = processedSlotProps[b];
40
- const leftDisplayOrder = Number.isFinite(leftItemProps == null ? void 0 : leftItemProps.displayOrder) ? leftItemProps.displayOrder : 100;
41
- const rightDisplayOrder = Number.isFinite(rightItemProps == null ? void 0 : rightItemProps.displayOrder) ? rightItemProps.displayOrder : 100;
40
+ const leftDisplayOrder = Number.isFinite(leftItemProps?.displayOrder) ? leftItemProps.displayOrder : 100;
41
+ const rightDisplayOrder = Number.isFinite(rightItemProps?.displayOrder) ? rightItemProps.displayOrder : 100;
42
42
  return leftDisplayOrder - rightDisplayOrder;
43
43
  });
44
44
  return sorted.reduce((acc, key, index) => {
@@ -126,7 +126,7 @@ function excludeOutliers(inputValues, factor) {
126
126
  const iqr = q3 - q1;
127
127
 
128
128
  // We make a small adjustment if `iqr < 5` for the cases where the IQR is
129
- // very small (e.g. zero) due to very close by values in the input data.
129
+ // very small (for example zero) due to very close by values in the input data.
130
130
  // Otherwise, with an IQR of `0`, anything outside that would be considered
131
131
  // an outlier, but it makes more sense visually to allow for this 5px variance
132
132
  // rather than showing a cropped cell.
@@ -140,23 +140,21 @@ function extractColumnWidths(apiRef, options, columns) {
140
140
  columns.forEach(column => {
141
141
  const cells = findGridCells(apiRef.current, column.field);
142
142
  const widths = cells.map(cell => {
143
- var _cell$getBoundingClie;
144
- return (_cell$getBoundingClie = cell.getBoundingClientRect().width) != null ? _cell$getBoundingClie : 0;
143
+ return cell.getBoundingClientRect().width ?? 0;
145
144
  });
146
145
  const filteredWidths = options.includeOutliers ? widths : excludeOutliers(widths, options.outliersFactor);
147
146
  if (options.includeHeaders) {
148
147
  const header = findGridHeader(apiRef.current, column.field);
149
148
  if (header) {
150
- var _iconContainer$client, _menuContainer$client;
151
149
  const title = header.querySelector(`.${gridClasses.columnHeaderTitle}`);
152
150
  const content = header.querySelector(`.${gridClasses.columnHeaderTitleContainerContent}`);
153
151
  const iconContainer = header.querySelector(`.${gridClasses.iconButtonContainer}`);
154
152
  const menuContainer = header.querySelector(`.${gridClasses.menuIcon}`);
155
- const element = title != null ? title : content;
153
+ const element = title ?? content;
156
154
  const style = window.getComputedStyle(header, null);
157
155
  const paddingWidth = parseInt(style.paddingLeft, 10) + parseInt(style.paddingRight, 10);
158
156
  const contentWidth = element.scrollWidth + 1;
159
- const width = contentWidth + paddingWidth + ((_iconContainer$client = iconContainer == null ? void 0 : iconContainer.clientWidth) != null ? _iconContainer$client : 0) + ((_menuContainer$client = menuContainer == null ? void 0 : menuContainer.clientWidth) != null ? _menuContainer$client : 0);
157
+ const width = contentWidth + paddingWidth + (iconContainer?.clientWidth ?? 0) + (menuContainer?.clientWidth ?? 0);
160
158
  filteredWidths.push(width);
161
159
  }
162
160
  }
@@ -290,7 +288,6 @@ export const useGridColumnResize = (apiRef, props) => {
290
288
  });
291
289
  };
292
290
  const storeReferences = (colDef, separator, xStart) => {
293
- var _apiRef$current$colum;
294
291
  const root = apiRef.current.rootElementRef.current;
295
292
  colDefRef.current = colDef;
296
293
  columnHeaderElementRef.current = findHeaderElementFromField(apiRef.current.columnHeadersContainerRef.current, colDef.field);
@@ -298,7 +295,7 @@ export const useGridColumnResize = (apiRef, props) => {
298
295
  if (headerFilterElement) {
299
296
  headerFilterElementRef.current = headerFilterElement;
300
297
  }
301
- groupHeaderElementsRef.current = findGroupHeaderElementsFromField((_apiRef$current$colum = apiRef.current.columnHeadersContainerRef) == null ? void 0 : _apiRef$current$colum.current, colDef.field);
298
+ groupHeaderElementsRef.current = findGroupHeaderElementsFromField(apiRef.current.columnHeadersContainerRef?.current, colDef.field);
302
299
  cellElementsRef.current = findGridCellElementsFromCol(columnHeaderElementRef.current, apiRef.current);
303
300
  fillerLeftRef.current = findGridElement(apiRef.current, 'filler--pinnedLeft');
304
301
  fillerRightRef.current = findGridElement(apiRef.current, 'filler--pinnedRight');
@@ -471,8 +468,7 @@ export const useGridColumnResize = (apiRef, props) => {
471
468
  const columnVirtualizationDisabled = useColumnVirtualizationDisabled(apiRef);
472
469
  const isAutosizingRef = React.useRef(false);
473
470
  const autosizeColumns = React.useCallback(async userOptions => {
474
- var _apiRef$current$rootE, _userOptions$columns;
475
- const root = (_apiRef$current$rootE = apiRef.current.rootElementRef) == null ? void 0 : _apiRef$current$rootE.current;
471
+ const root = apiRef.current.rootElementRef?.current;
476
472
  if (!root) {
477
473
  return;
478
474
  }
@@ -482,7 +478,7 @@ export const useGridColumnResize = (apiRef, props) => {
482
478
  isAutosizingRef.current = true;
483
479
  const state = gridColumnsStateSelector(apiRef.current.state);
484
480
  const options = _extends({}, DEFAULT_GRID_AUTOSIZE_OPTIONS, userOptions, {
485
- columns: (_userOptions$columns = userOptions == null ? void 0 : userOptions.columns) != null ? _userOptions$columns : state.orderedFields
481
+ columns: userOptions?.columns ?? state.orderedFields
486
482
  });
487
483
  options.columns = options.columns.filter(c => state.columnVisibilityModel[c] !== false);
488
484
  const columns = options.columns.map(c => apiRef.current.state.columns.lookup[c]);
@@ -496,10 +492,7 @@ export const useGridColumnResize = (apiRef, props) => {
496
492
  }));
497
493
  if (options.expand) {
498
494
  const visibleColumns = state.orderedFields.map(field => state.lookup[field]).filter(c => state.columnVisibilityModel[c.field] !== false);
499
- const totalWidth = visibleColumns.reduce((total, column) => {
500
- var _ref, _widthByField$column$;
501
- return total + ((_ref = (_widthByField$column$ = widthByField[column.field]) != null ? _widthByField$column$ : column.computedWidth) != null ? _ref : column.width);
502
- }, 0);
495
+ const totalWidth = visibleColumns.reduce((total, column) => total + (widthByField[column.field] ?? column.computedWidth ?? column.width), 0);
503
496
  const availableWidth = apiRef.current.getRootDimensions().viewportInnerSize.width;
504
497
  const remainingWidth = availableWidth - totalWidth;
505
498
  if (remainingWidth > 0) {
@@ -539,10 +532,7 @@ export const useGridColumnResize = (apiRef, props) => {
539
532
  });
540
533
  }
541
534
  });
542
- useGridNativeEventListener(apiRef, () => {
543
- var _apiRef$current$colum2;
544
- return (_apiRef$current$colum2 = apiRef.current.columnHeadersContainerRef) == null ? void 0 : _apiRef$current$colum2.current;
545
- }, 'touchstart', handleTouchStart, {
535
+ useGridNativeEventListener(apiRef, () => apiRef.current.columnHeadersContainerRef?.current, 'touchstart', handleTouchStart, {
546
536
  passive: doesSupportTouchActionNone()
547
537
  });
548
538
  useGridApiMethod(apiRef, {
@@ -64,11 +64,10 @@ export const gridVisiblePinnedColumnDefinitionsSelector = createSelectorMemoized
64
64
  return visiblePinnedColumns;
65
65
  });
66
66
  function filterVisibleColumns(pinnedColumns, columns, invert) {
67
- var _pinnedColumns$left, _pinnedColumns$right;
68
67
  if (!Array.isArray(pinnedColumns.left) && !Array.isArray(pinnedColumns.right)) {
69
68
  return EMPTY_PINNED_COLUMN_FIELDS;
70
69
  }
71
- if (((_pinnedColumns$left = pinnedColumns.left) == null ? void 0 : _pinnedColumns$left.length) === 0 && ((_pinnedColumns$right = pinnedColumns.right) == null ? void 0 : _pinnedColumns$right.length) === 0) {
70
+ if (pinnedColumns.left?.length === 0 && pinnedColumns.right?.length === 0) {
72
71
  return EMPTY_PINNED_COLUMN_FIELDS;
73
72
  }
74
73
  const filter = (newPinnedColumns, remainingColumns) => {
@@ -51,13 +51,4 @@ export declare function getFirstNonSpannedColumnToRender({ firstColumnToRender,
51
51
  lastRowToRender: number;
52
52
  visibleRows: GridRowEntry[];
53
53
  }): number;
54
- export declare function getFirstColumnIndexToRender({ firstColumnIndex, minColumnIndex, columnBuffer, firstRowToRender, lastRowToRender, apiRef, visibleRows, }: {
55
- firstColumnIndex: number;
56
- minColumnIndex: number;
57
- columnBuffer: number;
58
- apiRef: React.MutableRefObject<GridApiCommon>;
59
- firstRowToRender: number;
60
- lastRowToRender: number;
61
- visibleRows: GridRowEntry[];
62
- }): number;
63
54
  export declare function getTotalHeaderHeight(apiRef: React.MutableRefObject<GridApiCommunity>, headerHeight: number): number;
@@ -213,7 +213,6 @@ export const createColumnsState = ({
213
213
  columnVisibilityModel = gridColumnVisibilityModelSelector(apiRef),
214
214
  keepOnlyColumnsToUpsert = false
215
215
  }) => {
216
- var _apiRef$current$getRo, _apiRef$current$getRo2, _apiRef$current;
217
216
  const isInsideStateInitializer = !apiRef.current.state.columns;
218
217
  let columnsState;
219
218
  if (isInsideStateInitializer) {
@@ -283,7 +282,7 @@ export const createColumnsState = ({
283
282
  }
284
283
  const columnsStateWithPreProcessing = apiRef.current.unstable_applyPipeProcessors('hydrateColumns', columnsState);
285
284
  const columnsStateWithPortableColumns = applyInitialState(columnsStateWithPreProcessing, initialState);
286
- return hydrateColumnsWidth(columnsStateWithPortableColumns, (_apiRef$current$getRo = (_apiRef$current$getRo2 = (_apiRef$current = apiRef.current).getRootDimensions) == null ? void 0 : _apiRef$current$getRo2.call(_apiRef$current).viewportInnerSize.width) != null ? _apiRef$current$getRo : 0);
285
+ return hydrateColumnsWidth(columnsStateWithPortableColumns, apiRef.current.getRootDimensions?.().viewportInnerSize.width ?? 0);
287
286
  };
288
287
  export function getFirstNonSpannedColumnToRender({
289
288
  firstColumnToRender,
@@ -305,29 +304,10 @@ export function getFirstNonSpannedColumnToRender({
305
304
  }
306
305
  return firstNonSpannedColumnToRender;
307
306
  }
308
- export function getFirstColumnIndexToRender({
309
- firstColumnIndex,
310
- minColumnIndex,
311
- columnBuffer,
312
- firstRowToRender,
313
- lastRowToRender,
314
- apiRef,
315
- visibleRows
316
- }) {
317
- const initialFirstColumnToRender = Math.max(firstColumnIndex - columnBuffer, minColumnIndex);
318
- const firstColumnToRender = getFirstNonSpannedColumnToRender({
319
- firstColumnToRender: initialFirstColumnToRender,
320
- apiRef,
321
- firstRowToRender,
322
- lastRowToRender,
323
- visibleRows
324
- });
325
- return firstColumnToRender;
326
- }
327
307
  export function getTotalHeaderHeight(apiRef, headerHeight) {
328
308
  const densityFactor = gridDensityFactorSelector(apiRef);
329
309
  const maxDepth = gridColumnGroupsHeaderMaxDepthSelector(apiRef);
330
310
  const isHeaderFilteringEnabled = gridHeaderFilteringEnabledSelector(apiRef);
331
311
  const multiplicationFactor = isHeaderFilteringEnabled ? 2 : 1;
332
- return Math.floor(headerHeight * densityFactor) * ((maxDepth != null ? maxDepth : 0) + multiplicationFactor);
312
+ return Math.floor(headerHeight * densityFactor) * ((maxDepth ?? 0) + multiplicationFactor);
333
313
  }
@@ -8,8 +8,7 @@ import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
8
8
  export const useGridColumnSpanning = apiRef => {
9
9
  const lookup = React.useRef({});
10
10
  const getCellColSpanInfo = (rowId, columnIndex) => {
11
- var _lookup$current$rowId;
12
- return (_lookup$current$rowId = lookup.current[rowId]) == null ? void 0 : _lookup$current$rowId[columnIndex];
11
+ return lookup.current[rowId]?.[columnIndex];
13
12
  };
14
13
 
15
14
  // Calculate `colSpan` for each cell in the row
@@ -10,19 +10,18 @@ import { hydrateColumnsWidth, createColumnsState, COLUMNS_DIMENSION_PROPERTIES }
10
10
  import { GridPreferencePanelsValue } from '../preferencesPanel';
11
11
  import { jsx as _jsx } from "react/jsx-runtime";
12
12
  export const columnsStateInitializer = (state, props, apiRef) => {
13
- var _props$initialState, _ref, _props$columnVisibili, _props$initialState2, _state$pinnedColumns;
14
13
  const columnsState = createColumnsState({
15
14
  apiRef,
16
15
  columnsToUpsert: props.columns,
17
- initialState: (_props$initialState = props.initialState) == null ? void 0 : _props$initialState.columns,
18
- columnVisibilityModel: (_ref = (_props$columnVisibili = props.columnVisibilityModel) != null ? _props$columnVisibili : (_props$initialState2 = props.initialState) == null || (_props$initialState2 = _props$initialState2.columns) == null ? void 0 : _props$initialState2.columnVisibilityModel) != null ? _ref : {},
16
+ initialState: props.initialState?.columns,
17
+ columnVisibilityModel: props.columnVisibilityModel ?? props.initialState?.columns?.columnVisibilityModel ?? {},
19
18
  keepOnlyColumnsToUpsert: true
20
19
  });
21
20
  return _extends({}, state, {
22
21
  columns: columnsState,
23
22
  // In pro/premium, this part of the state is defined. We give it an empty but defined value
24
23
  // for the community version.
25
- pinnedColumns: (_state$pinnedColumns = state.pinnedColumns) != null ? _state$pinnedColumns : EMPTY_PINNED_COLUMN_FIELDS
24
+ pinnedColumns: state.pinnedColumns ?? EMPTY_PINNED_COLUMN_FIELDS
26
25
  });
27
26
  };
28
27
 
@@ -32,7 +31,6 @@ export const columnsStateInitializer = (state, props, apiRef) => {
32
31
  * TODO: Impossible priority - useGridParamsApi also needs to be after useGridColumns
33
32
  */
34
33
  export function useGridColumns(apiRef, props) {
35
- var _props$initialState4, _props$slotProps2;
36
34
  const logger = useGridLogger(apiRef, 'useGridColumns');
37
35
  const previousColumnsProp = React.useRef(props.columns);
38
36
  apiRef.current.registerControlState({
@@ -43,11 +41,10 @@ export function useGridColumns(apiRef, props) {
43
41
  changeEvent: 'columnVisibilityModelChange'
44
42
  });
45
43
  const setGridColumnsState = React.useCallback(columnsState => {
46
- var _apiRef$current$updat, _apiRef$current;
47
44
  logger.debug('Updating columns state.');
48
45
  apiRef.current.setState(mergeColumnsState(columnsState));
49
46
  apiRef.current.publishEvent('columnsChange', columnsState.orderedFields);
50
- (_apiRef$current$updat = (_apiRef$current = apiRef.current).updateRenderContext) == null || _apiRef$current$updat.call(_apiRef$current);
47
+ apiRef.current.updateRenderContext?.();
51
48
  apiRef.current.forceUpdate();
52
49
  }, [logger, apiRef]);
53
50
 
@@ -68,7 +65,6 @@ export function useGridColumns(apiRef, props) {
68
65
  const setColumnVisibilityModel = React.useCallback(model => {
69
66
  const currentModel = gridColumnVisibilityModelSelector(apiRef);
70
67
  if (currentModel !== model) {
71
- var _apiRef$current$updat2, _apiRef$current2;
72
68
  apiRef.current.setState(state => _extends({}, state, {
73
69
  columns: createColumnsState({
74
70
  apiRef,
@@ -78,7 +74,7 @@ export function useGridColumns(apiRef, props) {
78
74
  keepOnlyColumnsToUpsert: false
79
75
  })
80
76
  }));
81
- (_apiRef$current$updat2 = (_apiRef$current2 = apiRef.current).updateRenderContext) == null || _apiRef$current$updat2.call(_apiRef$current2);
77
+ apiRef.current.updateRenderContext?.();
82
78
  apiRef.current.forceUpdate();
83
79
  }
84
80
  }, [apiRef]);
@@ -92,9 +88,8 @@ export function useGridColumns(apiRef, props) {
92
88
  setGridColumnsState(columnsState);
93
89
  }, [apiRef, setGridColumnsState]);
94
90
  const setColumnVisibility = React.useCallback((field, isVisible) => {
95
- var _columnVisibilityMode;
96
91
  const columnVisibilityModel = gridColumnVisibilityModelSelector(apiRef);
97
- const isCurrentlyVisible = (_columnVisibilityMode = columnVisibilityModel[field]) != null ? _columnVisibilityMode : true;
92
+ const isCurrentlyVisible = columnVisibilityModel[field] ?? true;
98
93
  if (isVisible !== isCurrentlyVisible) {
99
94
  const newModel = _extends({}, columnVisibilityModel, {
100
95
  [field]: isVisible
@@ -167,7 +162,6 @@ export function useGridColumns(apiRef, props) {
167
162
  * PRE-PROCESSING
168
163
  */
169
164
  const stateExportPreProcessing = React.useCallback((prevState, context) => {
170
- var _props$initialState$c, _props$initialState3;
171
165
  const columnsStateToExport = {};
172
166
  const columnVisibilityModelToExport = gridColumnVisibilityModelSelector(apiRef);
173
167
  const shouldExportColumnVisibilityModel =
@@ -177,7 +171,7 @@ export function useGridColumns(apiRef, props) {
177
171
  props.columnVisibilityModel != null ||
178
172
  // Always export if the model has been initialized
179
173
  // TODO v6 Do a nullish check instead to export even if the initial model equals "{}"
180
- Object.keys((_props$initialState$c = (_props$initialState3 = props.initialState) == null || (_props$initialState3 = _props$initialState3.columns) == null ? void 0 : _props$initialState3.columnVisibilityModel) != null ? _props$initialState$c : {}).length > 0 ||
174
+ Object.keys(props.initialState?.columns?.columnVisibilityModel ?? {}).length > 0 ||
181
175
  // Always export if the model is not empty
182
176
  Object.keys(columnVisibilityModelToExport).length > 0;
183
177
  if (shouldExportColumnVisibilityModel) {
@@ -205,10 +199,9 @@ export function useGridColumns(apiRef, props) {
205
199
  return _extends({}, prevState, {
206
200
  columns: columnsStateToExport
207
201
  });
208
- }, [apiRef, props.columnVisibilityModel, (_props$initialState4 = props.initialState) == null ? void 0 : _props$initialState4.columns]);
202
+ }, [apiRef, props.columnVisibilityModel, props.initialState?.columns]);
209
203
  const stateRestorePreProcessing = React.useCallback((params, context) => {
210
- var _context$stateToResto;
211
- const columnVisibilityModelToImport = (_context$stateToResto = context.stateToRestore.columns) == null ? void 0 : _context$stateToResto.columnVisibilityModel;
204
+ const columnVisibilityModelToImport = context.stateToRestore.columns?.columnVisibilityModel;
212
205
  const initialState = context.stateToRestore.columns;
213
206
  if (columnVisibilityModelToImport == null && initialState == null) {
214
207
  return params;
@@ -228,12 +221,11 @@ export function useGridColumns(apiRef, props) {
228
221
  }, [apiRef]);
229
222
  const preferencePanelPreProcessing = React.useCallback((initialValue, value) => {
230
223
  if (value === GridPreferencePanelsValue.columns) {
231
- var _props$slotProps;
232
224
  const ColumnsPanel = props.slots.columnsPanel;
233
- return /*#__PURE__*/_jsx(ColumnsPanel, _extends({}, (_props$slotProps = props.slotProps) == null ? void 0 : _props$slotProps.columnsPanel));
225
+ return /*#__PURE__*/_jsx(ColumnsPanel, _extends({}, props.slotProps?.columnsPanel));
234
226
  }
235
227
  return initialValue;
236
- }, [props.slots.columnsPanel, (_props$slotProps2 = props.slotProps) == null ? void 0 : _props$slotProps2.columnsPanel]);
228
+ }, [props.slots.columnsPanel, props.slotProps?.columnsPanel]);
237
229
  const addColumnMenuItems = React.useCallback(columnMenuItems => {
238
230
  if (props.disableColumnSelector) {
239
231
  return columnMenuItems;
@@ -1,4 +1,6 @@
1
1
  import { GridStateCommunity } from '../../../models/gridStateCommunity';
2
- export declare const gridDensitySelector: (state: GridStateCommunity) => import("./densityState").GridDensityState;
3
- export declare const gridDensityValueSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, import("../../..").GridDensity>;
2
+ import { GridDensity } from '../../../models/gridDensity';
3
+ export declare const COMPACT_DENSITY_FACTOR = 0.7;
4
+ export declare const COMFORTABLE_DENSITY_FACTOR = 1.3;
5
+ export declare const gridDensitySelector: (state: GridStateCommunity) => GridDensity;
4
6
  export declare const gridDensityFactorSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, number>;
@@ -1,4 +1,10 @@
1
1
  import { createSelector } from '../../../utils/createSelector';
2
+ export const COMPACT_DENSITY_FACTOR = 0.7;
3
+ export const COMFORTABLE_DENSITY_FACTOR = 1.3;
4
+ const DENSITY_FACTORS = {
5
+ compact: COMPACT_DENSITY_FACTOR,
6
+ comfortable: COMFORTABLE_DENSITY_FACTOR,
7
+ standard: 1
8
+ };
2
9
  export const gridDensitySelector = state => state.density;
3
- export const gridDensityValueSelector = createSelector(gridDensitySelector, density => density.value);
4
- export const gridDensityFactorSelector = createSelector(gridDensitySelector, density => density.factor);
10
+ export const gridDensityFactorSelector = createSelector(gridDensitySelector, density => DENSITY_FACTORS[density]);
@@ -1,5 +1,2 @@
1
1
  import { GridDensity } from '../../../models/gridDensity';
2
- export interface GridDensityState {
3
- value: GridDensity;
4
- factor: number;
5
- }
2
+ export type GridDensityState = GridDensity;
@@ -2,7 +2,5 @@ import * as React from 'react';
2
2
  import { GridPrivateApiCommunity } from '../../../models/api/gridApiCommunity';
3
3
  import { DataGridProcessedProps } from '../../../models/props/DataGridProps';
4
4
  import { GridStateInitializer } from '../../utils/useGridInitializeState';
5
- export declare const COMPACT_DENSITY_FACTOR = 0.7;
6
- export declare const COMFORTABLE_DENSITY_FACTOR = 1.3;
7
- export declare const densityStateInitializer: GridStateInitializer<Pick<DataGridProcessedProps, 'density'>>;
8
- export declare const useGridDensity: (apiRef: React.MutableRefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, 'density'>) => void;
5
+ export declare const densityStateInitializer: GridStateInitializer<Pick<DataGridProcessedProps, 'initialState' | 'density'>>;
6
+ export declare const useGridDensity: (apiRef: React.MutableRefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, 'density' | 'onDensityChange'>) => void;
@@ -1,43 +1,35 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
+ import useEventCallback from '@mui/utils/useEventCallback';
3
4
  import { useGridLogger } from '../../utils/useGridLogger';
4
5
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
5
6
  import { gridDensitySelector } from './densitySelector';
6
- import { isDeepEqual } from '../../../utils/utils';
7
- export const COMPACT_DENSITY_FACTOR = 0.7;
8
- export const COMFORTABLE_DENSITY_FACTOR = 1.3;
9
- const DENSITY_FACTORS = {
10
- compact: COMPACT_DENSITY_FACTOR,
11
- comfortable: COMFORTABLE_DENSITY_FACTOR,
12
- standard: 1
13
- };
14
7
  export const densityStateInitializer = (state, props) => _extends({}, state, {
15
- density: {
16
- value: props.density,
17
- factor: DENSITY_FACTORS[props.density]
18
- }
8
+ density: props.initialState?.density ?? props.density ?? 'standard'
19
9
  });
20
10
  export const useGridDensity = (apiRef, props) => {
21
11
  const logger = useGridLogger(apiRef, 'useDensity');
22
- const setDensity = React.useCallback(newDensity => {
12
+ apiRef.current.registerControlState({
13
+ stateId: 'density',
14
+ propModel: props.density,
15
+ propOnChange: props.onDensityChange,
16
+ stateSelector: gridDensitySelector,
17
+ changeEvent: 'densityChange'
18
+ });
19
+ const setDensity = useEventCallback(newDensity => {
20
+ const currentDensity = gridDensitySelector(apiRef.current.state);
21
+ if (currentDensity === newDensity) {
22
+ return;
23
+ }
23
24
  logger.debug(`Set grid density to ${newDensity}`);
24
- apiRef.current.setState(state => {
25
- const currentDensityState = gridDensitySelector(state);
26
- const newDensityState = {
27
- value: newDensity,
28
- factor: DENSITY_FACTORS[newDensity]
29
- };
30
- if (isDeepEqual(currentDensityState, newDensityState)) {
31
- return state;
32
- }
33
- return _extends({}, state, {
34
- density: newDensityState
35
- });
36
- });
37
- apiRef.current.forceUpdate();
38
- }, [logger, apiRef]);
25
+ apiRef.current.setState(state => _extends({}, state, {
26
+ density: newDensity
27
+ }));
28
+ });
39
29
  React.useEffect(() => {
40
- apiRef.current.setDensity(props.density);
30
+ if (props.density) {
31
+ apiRef.current.setDensity(props.density);
32
+ }
41
33
  }, [apiRef, props.density]);
42
34
  const densityApi = {
43
35
  setDensity
@@ -66,7 +66,6 @@ export function useGridDimensions(apiRef, props) {
66
66
  }));
67
67
  });
68
68
  const resize = React.useCallback(() => {
69
- var _previousSize$current, _previousSize$current2;
70
69
  const element = apiRef.current.mainElementRef.current;
71
70
  if (!element) {
72
71
  return;
@@ -74,8 +73,8 @@ export function useGridDimensions(apiRef, props) {
74
73
  const computedStyle = ownerWindow(element).getComputedStyle(element);
75
74
  const height = parseFloat(computedStyle.height) || 0;
76
75
  const width = parseFloat(computedStyle.width) || 0;
77
- const hasHeightChanged = height !== ((_previousSize$current = previousSize.current) == null ? void 0 : _previousSize$current.height);
78
- const hasWidthChanged = width !== ((_previousSize$current2 = previousSize.current) == null ? void 0 : _previousSize$current2.width);
76
+ const hasHeightChanged = height !== previousSize.current?.height;
77
+ const hasWidthChanged = width !== previousSize.current?.width;
79
78
  if (!previousSize.current || hasHeightChanged || hasWidthChanged) {
80
79
  const size = {
81
80
  width,
@@ -106,7 +105,6 @@ export function useGridDimensions(apiRef, props) {
106
105
  return Math.min(maximumPageSizeWithoutScrollBar, currentPage.rows.length);
107
106
  }, [apiRef, props.pagination, props.paginationMode, props.getRowHeight, rowHeight]);
108
107
  const updateDimensions = React.useCallback(() => {
109
- var _apiRef$current$updat, _apiRef$current;
110
108
  const rootElement = apiRef.current.rootElementRef.current;
111
109
  const pinnedRowsHeight = calculatePinnedRowsHeight(apiRef);
112
110
  const scrollbarSize = measureScrollbarSize(rootElement, columnsTotalWidth, props.scrollbarSize);
@@ -191,7 +189,7 @@ export function useGridDimensions(apiRef, props) {
191
189
  if (newDimensions.viewportInnerSize.width !== prevDimensions.viewportInnerSize.width || newDimensions.viewportInnerSize.height !== prevDimensions.viewportInnerSize.height) {
192
190
  apiRef.current.publishEvent('viewportInnerSizeChange', newDimensions.viewportInnerSize);
193
191
  }
194
- (_apiRef$current$updat = (_apiRef$current = apiRef.current).updateRenderContext) == null || _apiRef$current$updat.call(_apiRef$current);
192
+ apiRef.current.updateRenderContext?.();
195
193
  }, [apiRef, setDimensions, props.scrollbarSize, props.autoHeight, rowsMeta.currentPageTotalHeight, rowHeight, headerHeight, columnsTotalWidth, headersTotalHeight, leftPinnedWidth, rightPinnedWidth]);
196
194
  const apiPublic = {
197
195
  resize,
@@ -14,7 +14,7 @@ import { buildWarning } from '../../../utils/warning';
14
14
  import { gridRowsDataRowIdToIdLookupSelector } from '../rows/gridRowsSelector';
15
15
  import { deepClone } from '../../../utils/utils';
16
16
  import { GridCellEditStartReasons, GridCellEditStopReasons } from '../../../models/params/gridEditCellParams';
17
- const missingOnProcessRowUpdateErrorWarning = buildWarning(['MUI X: A call to `processRowUpdate` threw an error which was not handled because `onProcessRowUpdateError` is missing.', 'To handle the error pass a callback to the `onProcessRowUpdateError` prop, e.g. `<DataGrid onProcessRowUpdateError={(error) => ...} />`.', 'For more detail, see https://mui.com/x/react-data-grid/editing/#server-side-persistence.'], 'error');
17
+ const missingOnProcessRowUpdateErrorWarning = buildWarning(['MUI X: A call to `processRowUpdate` threw an error which was not handled because `onProcessRowUpdateError` is missing.', 'To handle the error pass a callback to the `onProcessRowUpdateError` prop, for example `<DataGrid onProcessRowUpdateError={(error) => ...} />`.', 'For more detail, see https://mui.com/x/react-data-grid/editing/#server-side-persistence.'], 'error');
18
18
  export const useGridCellEditing = (apiRef, props) => {
19
19
  const [cellModesModel, setCellModesModel] = React.useState({});
20
20
  const cellModesModelRef = React.useRef(cellModesModel);
@@ -339,7 +339,6 @@ export const useGridCellEditing = (apiRef, props) => {
339
339
  }
340
340
  });
341
341
  const setCellEditingEditCellValue = React.useCallback(async params => {
342
- var _editingState$id;
343
342
  const {
344
343
  id,
345
344
  field,
@@ -389,7 +388,7 @@ export const useGridCellEditing = (apiRef, props) => {
389
388
  newProps.value = column.preProcessEditCellProps ? editingState[id][field].value : parsedValue;
390
389
  updateOrDeleteFieldState(id, field, newProps);
391
390
  editingState = gridEditRowsStateSelector(apiRef.current.state);
392
- return !((_editingState$id = editingState[id]) != null && (_editingState$id = _editingState$id[field]) != null && _editingState$id.error);
391
+ return !editingState[id]?.[field]?.error;
393
392
  }, [apiRef, throwIfNotEditable, throwIfNotInMode, updateOrDeleteFieldState]);
394
393
  const getRowWithUpdatedValuesFromCellEditing = React.useCallback((id, field) => {
395
394
  const column = apiRef.current.getColumn(field);
@@ -432,9 +431,8 @@ export const useGridCellEditing = (apiRef, props) => {
432
431
 
433
432
  Object.entries(cellModesModel).forEach(([id, fields]) => {
434
433
  Object.entries(fields).forEach(([field, params]) => {
435
- var _copyOfPrevCellModes$, _idToIdLookup$id;
436
- const prevMode = ((_copyOfPrevCellModes$ = copyOfPrevCellModes[id]) == null || (_copyOfPrevCellModes$ = _copyOfPrevCellModes$[field]) == null ? void 0 : _copyOfPrevCellModes$.mode) || GridCellModes.View;
437
- const originalId = (_idToIdLookup$id = idToIdLookup[id]) != null ? _idToIdLookup$id : id;
434
+ const prevMode = copyOfPrevCellModes[id]?.[field]?.mode || GridCellModes.View;
435
+ const originalId = idToIdLookup[id] ?? id;
438
436
  if (params.mode === GridCellModes.Edit && prevMode === GridCellModes.View) {
439
437
  updateStateToStartCellEditMode(_extends({
440
438
  id: originalId,