@mui/x-data-grid 7.0.0-beta.7 → 7.1.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 (203) hide show
  1. package/CHANGELOG.md +266 -12
  2. package/DataGrid/DataGrid.js +18 -17
  3. package/DataGrid/useDataGridProps.js +4 -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 +8 -7
  26. package/components/columnHeaders/GridColumnHeaderSortIcon.js +1 -2
  27. package/components/columnHeaders/GridColumnHeaderTitle.js +2 -3
  28. package/components/columnHeaders/GridGenericColumnHeaderItem.js +4 -2
  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 +21 -7
  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.d.ts +1 -1
  81. package/hooks/features/dimensions/useGridDimensions.js +6 -7
  82. package/hooks/features/editing/useGridCellEditing.js +4 -6
  83. package/hooks/features/editing/useGridEditing.js +1 -2
  84. package/hooks/features/editing/useGridRowEditing.js +17 -10
  85. package/hooks/features/export/serializers/csvSerializer.d.ts +2 -0
  86. package/hooks/features/export/serializers/csvSerializer.js +25 -16
  87. package/hooks/features/export/useGridCsvExport.js +9 -10
  88. package/hooks/features/export/useGridPrintExport.js +9 -15
  89. package/hooks/features/export/utils.js +2 -3
  90. package/hooks/features/filter/gridFilterSelector.js +15 -22
  91. package/hooks/features/filter/gridFilterUtils.js +10 -16
  92. package/hooks/features/filter/useGridFilter.js +9 -15
  93. package/hooks/features/focus/useGridFocus.js +5 -6
  94. package/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +1 -4
  95. package/hooks/features/headerFiltering/useGridHeaderFiltering.js +12 -17
  96. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +1 -2
  97. package/hooks/features/pagination/gridPaginationSelector.js +1 -2
  98. package/hooks/features/pagination/useGridPagination.js +2 -3
  99. package/hooks/features/pagination/useGridPaginationModel.js +6 -11
  100. package/hooks/features/pagination/useGridRowCount.js +3 -6
  101. package/hooks/features/preferencesPanel/useGridPreferencesPanel.js +7 -12
  102. package/hooks/features/rowSelection/useGridRowSelection.js +11 -16
  103. package/hooks/features/rows/gridRowsSelector.js +11 -19
  104. package/hooks/features/rows/gridRowsUtils.js +7 -9
  105. package/hooks/features/rows/useGridParamsApi.js +1 -1
  106. package/hooks/features/rows/useGridRows.js +4 -13
  107. package/hooks/features/rows/useGridRowsMeta.js +7 -13
  108. package/hooks/features/scroll/useGridScroll.js +2 -3
  109. package/hooks/features/sorting/gridSortingSelector.js +4 -7
  110. package/hooks/features/sorting/useGridSorting.js +8 -14
  111. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +1 -1
  112. package/hooks/features/virtualization/useGridVirtualScroller.js +220 -71
  113. package/hooks/utils/useGridApiEventHandler.js +5 -10
  114. package/hooks/utils/useGridNativeEventListener.js +1 -2
  115. package/index.js +1 -1
  116. package/internals/index.d.ts +2 -0
  117. package/internals/index.js +1 -0
  118. package/internals/utils/useProps.js +1 -2
  119. package/joy/joySlots.js +7 -13
  120. package/models/api/gridRowsMetaApi.d.ts +1 -1
  121. package/models/api/index.d.ts +1 -1
  122. package/models/api/index.js +0 -1
  123. package/models/events/gridEventLookup.d.ts +7 -0
  124. package/models/gridExport.d.ts +6 -0
  125. package/models/gridStateCommunity.d.ts +1 -0
  126. package/models/props/DataGridProps.d.ts +26 -25
  127. package/modern/DataGrid/DataGrid.js +18 -17
  128. package/modern/DataGrid/useDataGridProps.js +4 -5
  129. package/modern/components/GridPagination.js +11 -2
  130. package/modern/components/cell/GridActionsCell.js +1 -1
  131. package/modern/components/cell/GridActionsCellItem.js +4 -0
  132. package/modern/components/cell/GridBooleanCell.js +3 -2
  133. package/modern/components/columnHeaders/GridColumnHeaderItem.js +3 -1
  134. package/modern/components/columnHeaders/GridGenericColumnHeaderItem.js +3 -1
  135. package/modern/components/containers/GridRoot.js +3 -3
  136. package/modern/components/panel/filterPanel/GridFilterInputBoolean.js +1 -1
  137. package/modern/components/panel/filterPanel/GridFilterInputDate.js +1 -1
  138. package/modern/components/panel/filterPanel/GridFilterInputSingleSelect.js +1 -1
  139. package/modern/components/panel/filterPanel/GridFilterInputValue.js +1 -1
  140. package/modern/components/toolbar/GridToolbarDensitySelector.js +5 -5
  141. package/modern/components/toolbar/GridToolbarQuickFilter.js +17 -2
  142. package/modern/hooks/features/clipboard/useGridClipboard.js +4 -2
  143. package/modern/hooks/features/columnResize/useGridColumnResize.js +1 -1
  144. package/modern/hooks/features/columns/gridColumnsUtils.js +0 -19
  145. package/modern/hooks/features/density/densitySelector.js +8 -2
  146. package/modern/hooks/features/density/useGridDensity.js +21 -29
  147. package/modern/hooks/features/dimensions/useGridDimensions.js +3 -2
  148. package/modern/hooks/features/editing/useGridCellEditing.js +1 -1
  149. package/modern/hooks/features/editing/useGridRowEditing.js +14 -5
  150. package/modern/hooks/features/export/serializers/csvSerializer.js +23 -12
  151. package/modern/hooks/features/export/useGridCsvExport.js +2 -1
  152. package/modern/hooks/features/filter/gridFilterUtils.js +1 -1
  153. package/modern/hooks/features/rowSelection/useGridRowSelection.js +3 -2
  154. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +211 -57
  155. package/modern/index.js +1 -1
  156. package/modern/internals/index.js +1 -0
  157. package/modern/models/api/index.js +0 -1
  158. package/modern/utils/createSelector.js +1 -1
  159. package/modern/utils/domUtils.js +1 -1
  160. package/modern/utils/keyboardUtils.js +1 -1
  161. package/modern/utils/throttle.js +19 -0
  162. package/node/DataGrid/DataGrid.js +18 -17
  163. package/node/DataGrid/useDataGridProps.js +4 -5
  164. package/node/components/GridPagination.js +9 -1
  165. package/node/components/cell/GridActionsCell.js +1 -1
  166. package/node/components/cell/GridActionsCellItem.js +4 -0
  167. package/node/components/cell/GridBooleanCell.js +3 -2
  168. package/node/components/columnHeaders/GridColumnHeaderItem.js +3 -1
  169. package/node/components/columnHeaders/GridGenericColumnHeaderItem.js +3 -1
  170. package/node/components/containers/GridRoot.js +2 -2
  171. package/node/components/panel/filterPanel/GridFilterInputBoolean.js +1 -1
  172. package/node/components/panel/filterPanel/GridFilterInputDate.js +1 -1
  173. package/node/components/panel/filterPanel/GridFilterInputSingleSelect.js +1 -1
  174. package/node/components/panel/filterPanel/GridFilterInputValue.js +1 -1
  175. package/node/components/toolbar/GridToolbarDensitySelector.js +4 -4
  176. package/node/components/toolbar/GridToolbarQuickFilter.js +17 -2
  177. package/node/hooks/features/clipboard/useGridClipboard.js +4 -2
  178. package/node/hooks/features/columnResize/useGridColumnResize.js +1 -1
  179. package/node/hooks/features/columns/gridColumnsUtils.js +0 -20
  180. package/node/hooks/features/density/densitySelector.js +9 -3
  181. package/node/hooks/features/density/useGridDensity.js +22 -30
  182. package/node/hooks/features/dimensions/useGridDimensions.js +2 -1
  183. package/node/hooks/features/editing/useGridCellEditing.js +1 -1
  184. package/node/hooks/features/editing/useGridRowEditing.js +14 -5
  185. package/node/hooks/features/export/serializers/csvSerializer.js +23 -12
  186. package/node/hooks/features/export/useGridCsvExport.js +2 -1
  187. package/node/hooks/features/filter/gridFilterUtils.js +1 -1
  188. package/node/hooks/features/rowSelection/useGridRowSelection.js +2 -1
  189. package/node/hooks/features/virtualization/useGridVirtualScroller.js +211 -57
  190. package/node/index.js +1 -1
  191. package/node/internals/index.js +12 -0
  192. package/node/models/api/index.js +0 -11
  193. package/node/utils/createSelector.js +1 -1
  194. package/node/utils/domUtils.js +1 -1
  195. package/node/utils/keyboardUtils.js +1 -1
  196. package/node/utils/throttle.js +25 -0
  197. package/package.json +4 -4
  198. package/utils/createSelector.js +9 -9
  199. package/utils/domUtils.js +4 -7
  200. package/utils/getGridLocalization.js +9 -12
  201. package/utils/keyboardUtils.js +1 -1
  202. package/utils/throttle.d.ts +4 -0
  203. package/utils/throttle.js +19 -0
@@ -12,8 +12,7 @@ export function unwrapPrivateAPI(publicApi) {
12
12
  }
13
13
  let globalId = 0;
14
14
  function createPrivateAPI(publicApiRef) {
15
- var _publicApiRef$current;
16
- const existingPrivateApi = (_publicApiRef$current = publicApiRef.current) == null ? void 0 : _publicApiRef$current[SYMBOL_API_PRIVATE];
15
+ const existingPrivateApi = publicApiRef.current?.[SYMBOL_API_PRIVATE];
17
16
  if (existingPrivateApi) {
18
17
  return existingPrivateApi;
19
18
  }
@@ -31,7 +30,7 @@ function createPrivateAPI(publicApiRef) {
31
30
  Object.keys(methods).forEach(methodName => {
32
31
  const method = methods[methodName];
33
32
  const currentPrivateMethod = privateApi[methodName];
34
- if ((currentPrivateMethod == null ? void 0 : currentPrivateMethod.spying) === true) {
33
+ if (currentPrivateMethod?.spying === true) {
35
34
  currentPrivateMethod.target = method;
36
35
  } else {
37
36
  privateApi[methodName] = method;
@@ -39,7 +38,7 @@ function createPrivateAPI(publicApiRef) {
39
38
  if (visibility === 'public') {
40
39
  const publicApi = publicApiRef.current;
41
40
  const currentPublicMethod = publicApi[methodName];
42
- if ((currentPublicMethod == null ? void 0 : currentPublicMethod.spying) === true) {
41
+ if (currentPublicMethod?.spying === true) {
43
42
  currentPublicMethod.target = method;
44
43
  } else {
45
44
  publicApi[methodName] = method;
@@ -69,7 +68,6 @@ function createPublicAPI(privateApiRef) {
69
68
  return publicApi;
70
69
  }
71
70
  export function useGridApiInitialization(inputApiRef, props) {
72
- var _inputApiRef$current;
73
71
  const publicApiRef = React.useRef();
74
72
  const privateApiRef = React.useRef();
75
73
  if (!privateApiRef.current) {
@@ -100,7 +98,7 @@ export function useGridApiInitialization(inputApiRef, props) {
100
98
  subscribeEvent,
101
99
  publishEvent
102
100
  }, 'public');
103
- if (inputApiRef && !((_inputApiRef$current = inputApiRef.current) != null && _inputApiRef$current.state)) {
101
+ if (inputApiRef && !inputApiRef.current?.state) {
104
102
  inputApiRef.current = publicApiRef.current;
105
103
  }
106
104
  React.useImperativeHandle(inputApiRef, () => publicApiRef.current, [publicApiRef]);
@@ -30,9 +30,8 @@ function copyToClipboard(data) {
30
30
  }
31
31
  }
32
32
  function hasNativeSelection(element) {
33
- var _window$getSelection;
34
33
  // When getSelection is called on an <iframe> that is not displayed Firefox will return null.
35
- if ((_window$getSelection = window.getSelection()) != null && _window$getSelection.toString()) {
34
+ if (window.getSelection()?.toString()) {
36
35
  return true;
37
36
  }
38
37
 
@@ -51,7 +50,7 @@ function hasNativeSelection(element) {
51
50
  */
52
51
  export const useGridClipboard = (apiRef, props) => {
53
52
  const ignoreValueFormatterProp = props.ignoreValueFormatterDuringExport;
54
- const ignoreValueFormatter = (typeof ignoreValueFormatterProp === 'object' ? ignoreValueFormatterProp == null ? void 0 : ignoreValueFormatterProp.clipboardExport : ignoreValueFormatterProp) || false;
53
+ const ignoreValueFormatter = (typeof ignoreValueFormatterProp === 'object' ? ignoreValueFormatterProp?.clipboardExport : ignoreValueFormatterProp) || false;
55
54
  const clipboardCopyCellDelimiter = props.clipboardCopyCellDelimiter;
56
55
  const handleCopy = React.useCallback(event => {
57
56
  if (!((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'c' && !event.shiftKey && !event.altKey)) {
@@ -68,7 +67,8 @@ export const useGridClipboard = (apiRef, props) => {
68
67
  textToCopy = apiRef.current.getDataAsCsv({
69
68
  includeHeaders: false,
70
69
  // TODO: make it configurable
71
- delimiter: clipboardCopyCellDelimiter
70
+ delimiter: clipboardCopyCellDelimiter,
71
+ shouldAppendQuotes: false
72
72
  });
73
73
  } else {
74
74
  const focusedCell = gridFocusCellSelector(apiRef);
@@ -76,7 +76,8 @@ export const useGridClipboard = (apiRef, props) => {
76
76
  const cellParams = apiRef.current.getCellParams(focusedCell.id, focusedCell.field);
77
77
  textToCopy = serializeCellValue(cellParams, {
78
78
  delimiterCharacter: clipboardCopyCellDelimiter,
79
- ignoreValueFormatter
79
+ ignoreValueFormatter,
80
+ shouldAppendQuotes: false
80
81
  });
81
82
  }
82
83
  }
@@ -4,19 +4,7 @@ import { createSelector, createSelectorMemoized } from '../../../utils/createSel
4
4
  * @ignore - do not document.
5
5
  */
6
6
  export const gridColumnGroupingSelector = state => state.columnGrouping;
7
- export const gridColumnGroupsUnwrappedModelSelector = createSelectorMemoized(gridColumnGroupingSelector, columnGrouping => {
8
- var _columnGrouping$unwra;
9
- return (_columnGrouping$unwra = columnGrouping == null ? void 0 : columnGrouping.unwrappedGroupingModel) != null ? _columnGrouping$unwra : {};
10
- });
11
- export const gridColumnGroupsLookupSelector = createSelectorMemoized(gridColumnGroupingSelector, columnGrouping => {
12
- var _columnGrouping$looku;
13
- return (_columnGrouping$looku = columnGrouping == null ? void 0 : columnGrouping.lookup) != null ? _columnGrouping$looku : {};
14
- });
15
- export const gridColumnGroupsHeaderStructureSelector = createSelectorMemoized(gridColumnGroupingSelector, columnGrouping => {
16
- var _columnGrouping$heade;
17
- return (_columnGrouping$heade = columnGrouping == null ? void 0 : columnGrouping.headerStructure) != null ? _columnGrouping$heade : [];
18
- });
19
- export const gridColumnGroupsHeaderMaxDepthSelector = createSelector(gridColumnGroupingSelector, columnGrouping => {
20
- var _columnGrouping$maxDe;
21
- return (_columnGrouping$maxDe = columnGrouping == null ? void 0 : columnGrouping.maxDepth) != null ? _columnGrouping$maxDe : 0;
22
- });
7
+ export const gridColumnGroupsUnwrappedModelSelector = createSelectorMemoized(gridColumnGroupingSelector, columnGrouping => columnGrouping?.unwrappedGroupingModel ?? {});
8
+ export const gridColumnGroupsLookupSelector = createSelectorMemoized(gridColumnGroupingSelector, columnGrouping => columnGrouping?.lookup ?? {});
9
+ export const gridColumnGroupsHeaderStructureSelector = createSelectorMemoized(gridColumnGroupingSelector, columnGrouping => columnGrouping?.headerStructure ?? []);
10
+ export const gridColumnGroupsHeaderMaxDepthSelector = createSelector(gridColumnGroupingSelector, columnGrouping => columnGrouping?.maxDepth ?? 0);
@@ -35,26 +35,22 @@ export const unwrapGroupingColumnModel = columnGroupingModel => {
35
35
  return unwrappedSubTree;
36
36
  };
37
37
  export const getColumnGroupsHeaderStructure = (orderedColumns, unwrappedGroupingModel, pinnedFields) => {
38
- const getParents = field => {
39
- var _unwrappedGroupingMod;
40
- return (_unwrappedGroupingMod = unwrappedGroupingModel[field]) != null ? _unwrappedGroupingMod : [];
41
- };
38
+ const getParents = field => unwrappedGroupingModel[field] ?? [];
42
39
  const groupingHeaderStructure = [];
43
40
  const maxDepth = Math.max(...orderedColumns.map(field => getParents(field).length));
44
41
  const haveSameParents = (field1, field2, depth) => isDeepEqual(getParents(field1).slice(0, depth + 1), getParents(field2).slice(0, depth + 1));
45
42
  const haveDifferentContainers = (field1, field2) => {
46
- if (pinnedFields != null && pinnedFields.left && pinnedFields.left.includes(field1) && !pinnedFields.left.includes(field2)) {
43
+ if (pinnedFields?.left && pinnedFields.left.includes(field1) && !pinnedFields.left.includes(field2)) {
47
44
  return true;
48
45
  }
49
- if (pinnedFields != null && pinnedFields.right && !pinnedFields.right.includes(field1) && pinnedFields.right.includes(field2)) {
46
+ if (pinnedFields?.right && !pinnedFields.right.includes(field1) && pinnedFields.right.includes(field2)) {
50
47
  return true;
51
48
  }
52
49
  return false;
53
50
  };
54
51
  for (let depth = 0; depth < maxDepth; depth += 1) {
55
52
  const depthStructure = orderedColumns.reduce((structure, newField) => {
56
- var _getParents$depth;
57
- const groupId = (_getParents$depth = getParents(newField)[depth]) != null ? _getParents$depth : null;
53
+ const groupId = getParents(newField)[depth] ?? null;
58
54
  if (structure.length === 0) {
59
55
  return [{
60
56
  columnFields: [newField],
@@ -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;