@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
@@ -15,7 +15,7 @@ var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
15
15
  var _useGridApiContext = require("../../hooks/utils/useGridApiContext");
16
16
  var _gridRowsUtils = require("../../hooks/features/rows/gridRowsUtils");
17
17
  var _jsxRuntime = require("react/jsx-runtime");
18
- const _excluded = ["id", "value", "formattedValue", "api", "field", "row", "rowNode", "colDef", "cellMode", "isEditable", "hasFocus", "tabIndex"];
18
+ const _excluded = ["id", "value", "formattedValue", "api", "field", "row", "rowNode", "colDef", "cellMode", "isEditable", "hasFocus", "tabIndex", "hideDescendantCount"];
19
19
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
20
20
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
21
21
  const useUtilityClasses = ownerState => {
@@ -85,6 +85,7 @@ process.env.NODE_ENV !== "production" ? GridBooleanCellRaw.propTypes = {
85
85
  * If true, the cell is the active element.
86
86
  */
87
87
  hasFocus: _propTypes.default.bool.isRequired,
88
+ hideDescendantCount: _propTypes.default.bool,
88
89
  /**
89
90
  * The grid row id.
90
91
  */
@@ -113,7 +114,7 @@ process.env.NODE_ENV !== "production" ? GridBooleanCellRaw.propTypes = {
113
114
  } : void 0;
114
115
  const GridBooleanCell = exports.GridBooleanCell = /*#__PURE__*/React.memo(GridBooleanCellRaw);
115
116
  const renderBooleanCell = params => {
116
- if ((0, _gridRowsUtils.isAutoGeneratedRow)(params.rowNode)) {
117
+ if (params.field !== '__row_group_by_columns_group__' && (0, _gridRowsUtils.isAutoGeneratedRow)(params.rowNode)) {
117
118
  return '';
118
119
  }
119
120
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridBooleanCell, (0, _extends2.default)({}, params));
@@ -47,11 +47,11 @@ const GridRoot = exports.GridRoot = /*#__PURE__*/React.forwardRef(function GridR
47
47
  } = props,
48
48
  other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
49
49
  const apiRef = (0, _useGridPrivateApiContext.useGridPrivateApiContext)();
50
- const densityValue = (0, _useGridSelector.useGridSelector)(apiRef, _densitySelector.gridDensityValueSelector);
50
+ const density = (0, _useGridSelector.useGridSelector)(apiRef, _densitySelector.gridDensitySelector);
51
51
  const rootElementRef = apiRef.current.rootElementRef;
52
52
  const handleRef = (0, _utils.unstable_useForkRef)(rootElementRef, ref);
53
53
  const ownerState = (0, _extends2.default)({}, rootProps, {
54
- density: densityValue
54
+ density
55
55
  });
56
56
  const classes = useUtilityClasses(ownerState);
57
57
 
@@ -107,7 +107,7 @@ process.env.NODE_ENV !== "production" ? GridFilterInputBoolean.propTypes = {
107
107
  focusElementRef: _utils.refType,
108
108
  /**
109
109
  * It is `true` if the filter either has a value or an operator with no value
110
- * required is selected (e.g. `isEmpty`)
110
+ * required is selected (for example `isEmpty`)
111
111
  */
112
112
  isFilterActive: _propTypes.default.bool,
113
113
  item: _propTypes.default.shape({
@@ -108,7 +108,7 @@ process.env.NODE_ENV !== "production" ? GridFilterInputDate.propTypes = {
108
108
  focusElementRef: _propTypes.default /* @typescript-to-proptypes-ignore */.oneOfType([_propTypes.default.func, _propTypes.default.object]),
109
109
  /**
110
110
  * It is `true` if the filter either has a value or an operator with no value
111
- * required is selected (e.g. `isEmpty`)
111
+ * required is selected (for example `isEmpty`)
112
112
  */
113
113
  isFilterActive: _propTypes.default.bool,
114
114
  item: _propTypes.default.shape({
@@ -142,7 +142,7 @@ process.env.NODE_ENV !== "production" ? GridFilterInputSingleSelect.propTypes =
142
142
  focusElementRef: _propTypes.default /* @typescript-to-proptypes-ignore */.oneOfType([_propTypes.default.func, _propTypes.default.object]),
143
143
  /**
144
144
  * It is `true` if the filter either has a value or an operator with no value
145
- * required is selected (e.g. `isEmpty`)
145
+ * required is selected (for example `isEmpty`)
146
146
  */
147
147
  isFilterActive: _propTypes.default.bool,
148
148
  item: _propTypes.default.shape({
@@ -95,7 +95,7 @@ process.env.NODE_ENV !== "production" ? GridFilterInputValue.propTypes = {
95
95
  focusElementRef: _propTypes.default /* @typescript-to-proptypes-ignore */.oneOfType([_propTypes.default.func, _propTypes.default.object]),
96
96
  /**
97
97
  * It is `true` if the filter either has a value or an operator with no value
98
- * required is selected (e.g. `isEmpty`)
98
+ * required is selected (for example `isEmpty`)
99
99
  */
100
100
  isFilterActive: _propTypes.default.bool,
101
101
  item: _propTypes.default.shape({
@@ -30,7 +30,7 @@ const GridToolbarDensitySelector = exports.GridToolbarDensitySelector = /*#__PUR
30
30
  const tooltipProps = slotProps.tooltip || {};
31
31
  const apiRef = (0, _useGridApiContext.useGridApiContext)();
32
32
  const rootProps = (0, _useGridRootProps.useGridRootProps)();
33
- const densityValue = (0, _useGridSelector.useGridSelector)(apiRef, _densitySelector.gridDensityValueSelector);
33
+ const density = (0, _useGridSelector.useGridSelector)(apiRef, _densitySelector.gridDensitySelector);
34
34
  const densityButtonId = (0, _utils.unstable_useId)();
35
35
  const densityMenuId = (0, _utils.unstable_useId)();
36
36
  const [open, setOpen] = React.useState(false);
@@ -50,7 +50,7 @@ const GridToolbarDensitySelector = exports.GridToolbarDensitySelector = /*#__PUR
50
50
  value: 'comfortable'
51
51
  }];
52
52
  const startIcon = React.useMemo(() => {
53
- switch (densityValue) {
53
+ switch (density) {
54
54
  case 'compact':
55
55
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.densityCompactIcon, {});
56
56
  case 'comfortable':
@@ -58,7 +58,7 @@ const GridToolbarDensitySelector = exports.GridToolbarDensitySelector = /*#__PUR
58
58
  default:
59
59
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.densityStandardIcon, {});
60
60
  }
61
- }, [densityValue, rootProps]);
61
+ }, [density, rootProps]);
62
62
  const handleDensitySelectorOpen = event => {
63
63
  setOpen(prevOpen => !prevOpen);
64
64
  buttonProps.onClick?.(event);
@@ -85,7 +85,7 @@ const GridToolbarDensitySelector = exports.GridToolbarDensitySelector = /*#__PUR
85
85
  }
86
86
  const densityElements = densityOptions.map((option, index) => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_MenuItem.default, {
87
87
  onClick: () => handleDensityUpdate(option.value),
88
- selected: option.value === densityValue,
88
+ selected: option.value === density,
89
89
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_ListItemIcon.default, {
90
90
  children: option.icon
91
91
  }), option.label]
@@ -75,7 +75,8 @@ const useGridClipboard = (apiRef, props) => {
75
75
  textToCopy = apiRef.current.getDataAsCsv({
76
76
  includeHeaders: false,
77
77
  // TODO: make it configurable
78
- delimiter: clipboardCopyCellDelimiter
78
+ delimiter: clipboardCopyCellDelimiter,
79
+ shouldAppendQuotes: false
79
80
  });
80
81
  } else {
81
82
  const focusedCell = (0, _gridFocusStateSelector.gridFocusCellSelector)(apiRef);
@@ -83,7 +84,8 @@ const useGridClipboard = (apiRef, props) => {
83
84
  const cellParams = apiRef.current.getCellParams(focusedCell.id, focusedCell.field);
84
85
  textToCopy = (0, _csvSerializer.serializeCellValue)(cellParams, {
85
86
  delimiterCharacter: clipboardCopyCellDelimiter,
86
- ignoreValueFormatter
87
+ ignoreValueFormatter,
88
+ shouldAppendQuotes: false
87
89
  });
88
90
  }
89
91
  }
@@ -135,7 +135,7 @@ function excludeOutliers(inputValues, factor) {
135
135
  const iqr = q3 - q1;
136
136
 
137
137
  // We make a small adjustment if `iqr < 5` for the cases where the IQR is
138
- // very small (e.g. zero) due to very close by values in the input data.
138
+ // very small (for example zero) due to very close by values in the input data.
139
139
  // Otherwise, with an IQR of `0`, anything outside that would be considered
140
140
  // an outlier, but it makes more sense visually to allow for this 5px variance
141
141
  // rather than showing a cropped cell.
@@ -7,7 +7,6 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.applyInitialState = exports.COLUMNS_DIMENSION_PROPERTIES = void 0;
8
8
  exports.computeFlexColumnsWidth = computeFlexColumnsWidth;
9
9
  exports.createColumnsState = void 0;
10
- exports.getFirstColumnIndexToRender = getFirstColumnIndexToRender;
11
10
  exports.getFirstNonSpannedColumnToRender = getFirstNonSpannedColumnToRender;
12
11
  exports.getTotalHeaderHeight = getTotalHeaderHeight;
13
12
  exports.hydrateColumnsWidth = void 0;
@@ -320,25 +319,6 @@ function getFirstNonSpannedColumnToRender({
320
319
  }
321
320
  return firstNonSpannedColumnToRender;
322
321
  }
323
- function getFirstColumnIndexToRender({
324
- firstColumnIndex,
325
- minColumnIndex,
326
- columnBuffer,
327
- firstRowToRender,
328
- lastRowToRender,
329
- apiRef,
330
- visibleRows
331
- }) {
332
- const initialFirstColumnToRender = Math.max(firstColumnIndex - columnBuffer, minColumnIndex);
333
- const firstColumnToRender = getFirstNonSpannedColumnToRender({
334
- firstColumnToRender: initialFirstColumnToRender,
335
- apiRef,
336
- firstRowToRender,
337
- lastRowToRender,
338
- visibleRows
339
- });
340
- return firstColumnToRender;
341
- }
342
322
  function getTotalHeaderHeight(apiRef, headerHeight) {
343
323
  const densityFactor = (0, _densitySelector.gridDensityFactorSelector)(apiRef);
344
324
  const maxDepth = (0, _gridColumnGroupsSelector.gridColumnGroupsHeaderMaxDepthSelector)(apiRef);
@@ -3,9 +3,15 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.gridDensityValueSelector = exports.gridDensitySelector = exports.gridDensityFactorSelector = void 0;
6
+ exports.gridDensitySelector = exports.gridDensityFactorSelector = exports.COMPACT_DENSITY_FACTOR = exports.COMFORTABLE_DENSITY_FACTOR = void 0;
7
7
  var _createSelector = require("../../../utils/createSelector");
8
+ const COMPACT_DENSITY_FACTOR = exports.COMPACT_DENSITY_FACTOR = 0.7;
9
+ const COMFORTABLE_DENSITY_FACTOR = exports.COMFORTABLE_DENSITY_FACTOR = 1.3;
10
+ const DENSITY_FACTORS = {
11
+ compact: COMPACT_DENSITY_FACTOR,
12
+ comfortable: COMFORTABLE_DENSITY_FACTOR,
13
+ standard: 1
14
+ };
8
15
  const gridDensitySelector = state => state.density;
9
16
  exports.gridDensitySelector = gridDensitySelector;
10
- const gridDensityValueSelector = exports.gridDensityValueSelector = (0, _createSelector.createSelector)(gridDensitySelector, density => density.value);
11
- const gridDensityFactorSelector = exports.gridDensityFactorSelector = (0, _createSelector.createSelector)(gridDensitySelector, density => density.factor);
17
+ const gridDensityFactorSelector = exports.gridDensityFactorSelector = (0, _createSelector.createSelector)(gridDensitySelector, density => DENSITY_FACTORS[density]);
@@ -4,50 +4,42 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.useGridDensity = exports.densityStateInitializer = exports.COMPACT_DENSITY_FACTOR = exports.COMFORTABLE_DENSITY_FACTOR = void 0;
7
+ exports.useGridDensity = exports.densityStateInitializer = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var React = _interopRequireWildcard(require("react"));
10
+ var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
10
11
  var _useGridLogger = require("../../utils/useGridLogger");
11
12
  var _useGridApiMethod = require("../../utils/useGridApiMethod");
12
13
  var _densitySelector = require("./densitySelector");
13
- var _utils = require("../../../utils/utils");
14
14
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
15
15
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
- const COMPACT_DENSITY_FACTOR = exports.COMPACT_DENSITY_FACTOR = 0.7;
17
- const COMFORTABLE_DENSITY_FACTOR = exports.COMFORTABLE_DENSITY_FACTOR = 1.3;
18
- const DENSITY_FACTORS = {
19
- compact: COMPACT_DENSITY_FACTOR,
20
- comfortable: COMFORTABLE_DENSITY_FACTOR,
21
- standard: 1
22
- };
23
16
  const densityStateInitializer = (state, props) => (0, _extends2.default)({}, state, {
24
- density: {
25
- value: props.density,
26
- factor: DENSITY_FACTORS[props.density]
27
- }
17
+ density: props.initialState?.density ?? props.density ?? 'standard'
28
18
  });
29
19
  exports.densityStateInitializer = densityStateInitializer;
30
20
  const useGridDensity = (apiRef, props) => {
31
21
  const logger = (0, _useGridLogger.useGridLogger)(apiRef, 'useDensity');
32
- const setDensity = React.useCallback(newDensity => {
22
+ apiRef.current.registerControlState({
23
+ stateId: 'density',
24
+ propModel: props.density,
25
+ propOnChange: props.onDensityChange,
26
+ stateSelector: _densitySelector.gridDensitySelector,
27
+ changeEvent: 'densityChange'
28
+ });
29
+ const setDensity = (0, _useEventCallback.default)(newDensity => {
30
+ const currentDensity = (0, _densitySelector.gridDensitySelector)(apiRef.current.state);
31
+ if (currentDensity === newDensity) {
32
+ return;
33
+ }
33
34
  logger.debug(`Set grid density to ${newDensity}`);
34
- apiRef.current.setState(state => {
35
- const currentDensityState = (0, _densitySelector.gridDensitySelector)(state);
36
- const newDensityState = {
37
- value: newDensity,
38
- factor: DENSITY_FACTORS[newDensity]
39
- };
40
- if ((0, _utils.isDeepEqual)(currentDensityState, newDensityState)) {
41
- return state;
42
- }
43
- return (0, _extends2.default)({}, state, {
44
- density: newDensityState
45
- });
46
- });
47
- apiRef.current.forceUpdate();
48
- }, [logger, apiRef]);
35
+ apiRef.current.setState(state => (0, _extends2.default)({}, state, {
36
+ density: newDensity
37
+ }));
38
+ });
49
39
  React.useEffect(() => {
50
- apiRef.current.setDensity(props.density);
40
+ if (props.density) {
41
+ apiRef.current.setDensity(props.density);
42
+ }
51
43
  }, [apiRef, props.density]);
52
44
  const densityApi = {
53
45
  setDensity
@@ -23,7 +23,7 @@ const _excluded = ["id", "field"],
23
23
  _excluded2 = ["id", "field"];
24
24
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
25
25
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
26
- const missingOnProcessRowUpdateErrorWarning = (0, _warning.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');
26
+ const missingOnProcessRowUpdateErrorWarning = (0, _warning.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');
27
27
  const useGridCellEditing = (apiRef, props) => {
28
28
  const [cellModesModel, setCellModesModel] = React.useState({});
29
29
  const cellModesModelRef = React.useRef(cellModesModel);
@@ -25,7 +25,7 @@ const _excluded = ["id"],
25
25
  _excluded2 = ["id"];
26
26
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
27
27
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
28
- const missingOnProcessRowUpdateErrorWarning = (0, _warning.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');
28
+ const missingOnProcessRowUpdateErrorWarning = (0, _warning.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');
29
29
  const useGridRowEditing = (apiRef, props) => {
30
30
  const [rowModesModel, setRowModesModel] = React.useState({});
31
31
  const rowModesModelRef = React.useRef(rowModesModel);
@@ -7,11 +7,14 @@ exports.buildCSV = buildCSV;
7
7
  exports.serializeCellValue = void 0;
8
8
  var _colDef = require("../../../../colDef");
9
9
  var _warning = require("../../../../utils/warning");
10
- function sanitizeCellValue(value, delimiterCharacter) {
10
+ function sanitizeCellValue(value, delimiterCharacter, shouldAppendQuotes) {
11
11
  if (typeof value === 'string') {
12
12
  // Make sure value containing delimiter or line break won't be split into multiple rows
13
13
  if ([delimiterCharacter, '\n', '\r', '"'].some(delimiter => value.includes(delimiter))) {
14
- return `"${value.replace(/"/g, '""')}"`;
14
+ if (shouldAppendQuotes) {
15
+ return `"${value.replace(/"/g, '""')}"`;
16
+ }
17
+ return `${value.replace(/"/g, '""')}`;
15
18
  }
16
19
  return value;
17
20
  }
@@ -20,7 +23,8 @@ function sanitizeCellValue(value, delimiterCharacter) {
20
23
  const serializeCellValue = (cellParams, options) => {
21
24
  const {
22
25
  delimiterCharacter,
23
- ignoreValueFormatter
26
+ ignoreValueFormatter,
27
+ shouldAppendQuotes
24
28
  } = options;
25
29
  let value;
26
30
  if (ignoreValueFormatter) {
@@ -37,7 +41,7 @@ const serializeCellValue = (cellParams, options) => {
37
41
  } else {
38
42
  value = cellParams.formattedValue;
39
43
  }
40
- return sanitizeCellValue(value, delimiterCharacter);
44
+ return sanitizeCellValue(value, delimiterCharacter, shouldAppendQuotes);
41
45
  };
42
46
  exports.serializeCellValue = serializeCellValue;
43
47
  const objectFormattedValueWarning = (0, _warning.buildWarning)(['MUI X: When the value of a field is an object or a `renderCell` is provided, the CSV export might not display the value correctly.', 'You can provide a `valueFormatter` with a string representation to be used.']);
@@ -55,7 +59,7 @@ class CSVRow {
55
59
  if (value === null || value === undefined) {
56
60
  this.rowString += '';
57
61
  } else if (typeof this.options.sanitizeCellValue === 'function') {
58
- this.rowString += this.options.sanitizeCellValue(value, this.options.delimiterCharacter);
62
+ this.rowString += this.options.sanitizeCellValue(value, this.options.delimiterCharacter, this.options.shouldAppendQuotes);
59
63
  } else {
60
64
  this.rowString += value;
61
65
  }
@@ -70,10 +74,12 @@ const serializeRow = ({
70
74
  columns,
71
75
  getCellParams,
72
76
  delimiterCharacter,
73
- ignoreValueFormatter
77
+ ignoreValueFormatter,
78
+ shouldAppendQuotes
74
79
  }) => {
75
80
  const row = new CSVRow({
76
- delimiterCharacter
81
+ delimiterCharacter,
82
+ shouldAppendQuotes
77
83
  });
78
84
  columns.forEach(column => {
79
85
  const cellParams = getCellParams(id, column.field);
@@ -84,7 +90,8 @@ const serializeRow = ({
84
90
  }
85
91
  row.addValue(serializeCellValue(cellParams, {
86
92
  delimiterCharacter,
87
- ignoreValueFormatter
93
+ ignoreValueFormatter,
94
+ shouldAppendQuotes
88
95
  }));
89
96
  });
90
97
  return row.getRowString();
@@ -97,14 +104,16 @@ function buildCSV(options) {
97
104
  includeHeaders,
98
105
  includeColumnGroupsHeaders,
99
106
  ignoreValueFormatter,
100
- apiRef
107
+ apiRef,
108
+ shouldAppendQuotes
101
109
  } = options;
102
110
  const CSVBody = rowIds.reduce((acc, id) => `${acc}${serializeRow({
103
111
  id,
104
112
  columns,
105
113
  getCellParams: apiRef.current.getCellParams,
106
114
  delimiterCharacter,
107
- ignoreValueFormatter
115
+ ignoreValueFormatter,
116
+ shouldAppendQuotes
108
117
  })}\r\n`, '').trim();
109
118
  if (!includeHeaders) {
110
119
  return CSVBody;
@@ -123,7 +132,8 @@ function buildCSV(options) {
123
132
  for (let i = 0; i < maxColumnGroupsDepth; i += 1) {
124
133
  const headerGroupRow = new CSVRow({
125
134
  delimiterCharacter,
126
- sanitizeCellValue
135
+ sanitizeCellValue,
136
+ shouldAppendQuotes
127
137
  });
128
138
  headerRows.push(headerGroupRow);
129
139
  filteredColumns.forEach(column => {
@@ -135,7 +145,8 @@ function buildCSV(options) {
135
145
  }
136
146
  const mainHeaderRow = new CSVRow({
137
147
  delimiterCharacter,
138
- sanitizeCellValue
148
+ sanitizeCellValue,
149
+ shouldAppendQuotes
139
150
  });
140
151
  filteredColumns.forEach(column => {
141
152
  mainHeaderRow.addValue(column.headerName || column.field);
@@ -43,7 +43,8 @@ const useGridCsvExport = (apiRef, props) => {
43
43
  includeHeaders: options.includeHeaders ?? true,
44
44
  includeColumnGroupsHeaders: options.includeColumnGroupsHeaders ?? true,
45
45
  ignoreValueFormatter,
46
- apiRef
46
+ apiRef,
47
+ shouldAppendQuotes: options.shouldAppendQuotes ?? true
47
48
  });
48
49
  }, [logger, apiRef, ignoreValueFormatter]);
49
50
  const exportDataAsCsv = React.useCallback(options => {
@@ -167,7 +167,7 @@ const buildAggregatedFilterItemsApplier = (filterModel, apiRef, disableEval) =>
167
167
  }
168
168
 
169
169
  // We generate a new function with `new Function()` to avoid expensive patterns for JS engines
170
- // such as a dynamic object assignment, e.g. `{ [dynamicKey]: value }`.
170
+ // such as a dynamic object assignment, for example `{ [dynamicKey]: value }`.
171
171
  const filterItemCore = new Function('appliers', 'row', 'shouldApplyFilter', `"use strict";
172
172
  ${appliers.map((applier, i) => `const shouldApply${i} = !shouldApplyFilter || shouldApplyFilter(${JSON.stringify(applier.item.field)});`).join('\n')}
173
173
 
@@ -284,7 +284,8 @@ const useGridRowSelection = (apiRef, props) => {
284
284
  const handleHeaderSelectionCheckboxChange = React.useCallback(params => {
285
285
  const shouldLimitSelectionToCurrentPage = props.checkboxSelectionVisibleOnly && props.pagination;
286
286
  const rowsToBeSelected = shouldLimitSelectionToCurrentPage ? (0, _pagination.gridPaginatedVisibleSortedGridRowIdsSelector)(apiRef) : (0, _gridFilterSelector.gridExpandedSortedRowIdsSelector)(apiRef);
287
- apiRef.current.selectRows(rowsToBeSelected, params.value);
287
+ const filterModel = (0, _gridFilterSelector.gridFilterModelSelector)(apiRef);
288
+ apiRef.current.selectRows(rowsToBeSelected, params.value, filterModel?.items.length > 0);
288
289
  }, [apiRef, props.checkboxSelectionVisibleOnly, props.pagination]);
289
290
  const handleCellKeyDown = React.useCallback((params, event) => {
290
291
  // Get the most recent cell mode because it may have been changed by another listener