@mui/x-data-grid 7.19.0 → 7.21.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 (175) hide show
  1. package/CHANGELOG.md +224 -43
  2. package/DataGrid/DataGrid.js +8 -0
  3. package/DataGrid/index.d.ts +0 -1
  4. package/DataGrid/index.js +1 -2
  5. package/DataGrid/useDataGridComponent.js +4 -1
  6. package/DataGrid/useDataGridProps.d.ts +1 -5
  7. package/DataGrid/useDataGridProps.js +3 -62
  8. package/components/GridPagination.js +1 -0
  9. package/components/GridRow.js +25 -36
  10. package/components/base/GridOverlays.js +8 -0
  11. package/components/columnHeaders/GridColumnHeaderItem.js +1 -0
  12. package/components/containers/GridRootStyles.js +1 -0
  13. package/components/menu/columnMenu/GridColumnMenu.js +32 -0
  14. package/components/toolbar/GridToolbarExport.d.ts +9 -3
  15. package/components/toolbar/GridToolbarExport.js +55 -3
  16. package/components/virtualization/GridVirtualScrollbar.js +4 -0
  17. package/components/virtualization/GridVirtualScroller.js +2 -2
  18. package/constants/dataGridPropsDefaultValues.d.ts +5 -0
  19. package/constants/dataGridPropsDefaultValues.js +60 -0
  20. package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +2 -1
  21. package/hooks/core/useGridRefs.js +4 -0
  22. package/hooks/features/clipboard/useGridClipboard.js +2 -1
  23. package/hooks/features/columnHeaders/useGridColumnHeaders.js +3 -1
  24. package/hooks/features/columns/gridColumnsUtils.d.ts +1 -1
  25. package/hooks/features/columns/gridColumnsUtils.js +3 -0
  26. package/hooks/features/dimensions/useGridDimensions.js +6 -4
  27. package/hooks/features/editing/useGridCellEditing.js +3 -1
  28. package/hooks/features/editing/useGridRowEditing.js +3 -1
  29. package/hooks/features/events/useGridEvents.d.ts +1 -1
  30. package/hooks/features/events/useGridEvents.js +1 -0
  31. package/hooks/features/filter/gridFilterUtils.js +1 -1
  32. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.d.ts +1 -1
  33. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +9 -5
  34. package/hooks/features/listView/gridListViewSelectors.d.ts +5 -0
  35. package/hooks/features/listView/gridListViewSelectors.js +4 -0
  36. package/hooks/features/listView/useGridListView.d.ts +10 -0
  37. package/hooks/features/listView/useGridListView.js +54 -0
  38. package/hooks/features/rowSelection/useGridRowSelection.js +11 -2
  39. package/hooks/features/rowSelection/utils.js +6 -6
  40. package/hooks/features/rows/gridRowsMetaInterfaces.d.ts +16 -0
  41. package/hooks/features/rows/gridRowsMetaInterfaces.js +1 -0
  42. package/hooks/features/rows/gridRowsUtils.d.ts +3 -0
  43. package/hooks/features/rows/gridRowsUtils.js +15 -2
  44. package/hooks/features/rows/useGridParamsApi.d.ts +2 -1
  45. package/hooks/features/rows/useGridParamsApi.js +4 -3
  46. package/hooks/features/rows/useGridRowSpanning.js +1 -1
  47. package/hooks/features/rows/useGridRowsMeta.js +135 -154
  48. package/hooks/features/scroll/useGridScroll.d.ts +1 -1
  49. package/hooks/features/scroll/useGridScroll.js +10 -5
  50. package/hooks/features/sorting/gridSortingUtils.js +1 -1
  51. package/hooks/features/virtualization/useGridVirtualScroller.js +25 -11
  52. package/hooks/utils/useGridApiContext.js +1 -1
  53. package/hooks/utils/useGridApiEventHandler.d.ts +1 -1
  54. package/hooks/utils/useGridApiEventHandler.js +1 -1
  55. package/hooks/utils/useGridApiMethod.js +2 -1
  56. package/hooks/utils/useGridConfiguration.js +1 -1
  57. package/hooks/utils/useGridPrivateApiContext.js +1 -1
  58. package/index.d.ts +3 -2
  59. package/index.js +4 -3
  60. package/internals/index.d.ts +2 -1
  61. package/internals/index.js +2 -1
  62. package/joy/icons.js +0 -1
  63. package/locales/jaJP.js +4 -4
  64. package/models/api/gridApiCommunity.d.ts +1 -1
  65. package/models/api/gridCoreApi.d.ts +9 -1
  66. package/models/api/gridFilterApi.d.ts +1 -1
  67. package/models/api/gridRowsMetaApi.d.ts +15 -14
  68. package/models/colDef/gridColDef.d.ts +6 -0
  69. package/models/colDef/index.d.ts +1 -1
  70. package/models/events/gridEventLookup.d.ts +7 -0
  71. package/models/gridApiCaches.d.ts +2 -0
  72. package/models/gridStateCommunity.d.ts +4 -2
  73. package/models/props/DataGridProps.d.ts +37 -17
  74. package/modern/DataGrid/DataGrid.js +8 -0
  75. package/modern/DataGrid/index.js +1 -2
  76. package/modern/DataGrid/useDataGridComponent.js +4 -1
  77. package/modern/DataGrid/useDataGridProps.js +3 -62
  78. package/modern/components/GridPagination.js +1 -0
  79. package/modern/components/GridRow.js +25 -36
  80. package/modern/components/base/GridOverlays.js +8 -0
  81. package/modern/components/columnHeaders/GridColumnHeaderItem.js +1 -0
  82. package/modern/components/containers/GridRootStyles.js +1 -0
  83. package/modern/components/menu/columnMenu/GridColumnMenu.js +32 -0
  84. package/modern/components/toolbar/GridToolbarExport.js +55 -3
  85. package/modern/components/virtualization/GridVirtualScrollbar.js +4 -0
  86. package/modern/components/virtualization/GridVirtualScroller.js +2 -2
  87. package/modern/constants/dataGridPropsDefaultValues.js +60 -0
  88. package/modern/hooks/core/useGridRefs.js +4 -0
  89. package/modern/hooks/features/clipboard/useGridClipboard.js +2 -1
  90. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +3 -1
  91. package/modern/hooks/features/columns/gridColumnsUtils.js +3 -0
  92. package/modern/hooks/features/dimensions/useGridDimensions.js +6 -4
  93. package/modern/hooks/features/editing/useGridCellEditing.js +3 -1
  94. package/modern/hooks/features/editing/useGridRowEditing.js +3 -1
  95. package/modern/hooks/features/events/useGridEvents.js +1 -0
  96. package/modern/hooks/features/filter/gridFilterUtils.js +1 -1
  97. package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +9 -5
  98. package/modern/hooks/features/listView/gridListViewSelectors.js +4 -0
  99. package/modern/hooks/features/listView/useGridListView.js +54 -0
  100. package/modern/hooks/features/rowSelection/useGridRowSelection.js +11 -2
  101. package/modern/hooks/features/rowSelection/utils.js +6 -6
  102. package/modern/hooks/features/rows/gridRowsMetaInterfaces.js +1 -0
  103. package/modern/hooks/features/rows/gridRowsUtils.js +15 -2
  104. package/modern/hooks/features/rows/useGridParamsApi.js +4 -3
  105. package/modern/hooks/features/rows/useGridRowSpanning.js +1 -1
  106. package/modern/hooks/features/rows/useGridRowsMeta.js +135 -154
  107. package/modern/hooks/features/scroll/useGridScroll.js +10 -5
  108. package/modern/hooks/features/sorting/gridSortingUtils.js +1 -1
  109. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +25 -11
  110. package/modern/hooks/utils/useGridApiContext.js +1 -1
  111. package/modern/hooks/utils/useGridApiEventHandler.js +1 -1
  112. package/modern/hooks/utils/useGridApiMethod.js +2 -1
  113. package/modern/hooks/utils/useGridConfiguration.js +1 -1
  114. package/modern/hooks/utils/useGridPrivateApiContext.js +1 -1
  115. package/modern/index.js +4 -3
  116. package/modern/internals/index.js +2 -1
  117. package/modern/joy/icons.js +0 -1
  118. package/modern/locales/jaJP.js +4 -4
  119. package/modern/utils/ResizeObserver.js +10 -0
  120. package/modern/utils/domUtils.js +1 -1
  121. package/modern/utils/keyboardUtils.js +12 -4
  122. package/node/DataGrid/DataGrid.js +8 -0
  123. package/node/DataGrid/index.js +1 -12
  124. package/node/DataGrid/useDataGridComponent.js +4 -1
  125. package/node/DataGrid/useDataGridProps.js +6 -65
  126. package/node/components/GridPagination.js +1 -0
  127. package/node/components/GridRow.js +25 -36
  128. package/node/components/base/GridOverlays.js +8 -0
  129. package/node/components/columnHeaders/GridColumnHeaderItem.js +1 -0
  130. package/node/components/containers/GridRootStyles.js +1 -0
  131. package/node/components/menu/columnMenu/GridColumnMenu.js +32 -0
  132. package/node/components/toolbar/GridToolbarExport.js +52 -0
  133. package/node/components/virtualization/GridVirtualScrollbar.js +4 -0
  134. package/node/components/virtualization/GridVirtualScroller.js +2 -2
  135. package/node/constants/dataGridPropsDefaultValues.js +66 -0
  136. package/node/hooks/core/useGridRefs.js +4 -0
  137. package/node/hooks/features/clipboard/useGridClipboard.js +2 -1
  138. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +3 -1
  139. package/node/hooks/features/columns/gridColumnsUtils.js +3 -0
  140. package/node/hooks/features/dimensions/useGridDimensions.js +5 -3
  141. package/node/hooks/features/editing/useGridCellEditing.js +3 -1
  142. package/node/hooks/features/editing/useGridRowEditing.js +3 -1
  143. package/node/hooks/features/events/useGridEvents.js +1 -0
  144. package/node/hooks/features/filter/gridFilterUtils.js +1 -1
  145. package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +9 -5
  146. package/node/hooks/features/listView/gridListViewSelectors.js +11 -0
  147. package/node/hooks/features/listView/useGridListView.js +64 -0
  148. package/node/hooks/features/rowSelection/useGridRowSelection.js +11 -2
  149. package/node/hooks/features/rowSelection/utils.js +6 -6
  150. package/node/hooks/features/rows/gridRowsMetaInterfaces.js +5 -0
  151. package/node/hooks/features/rows/gridRowsUtils.js +17 -3
  152. package/node/hooks/features/rows/useGridParamsApi.js +4 -3
  153. package/node/hooks/features/rows/useGridRowSpanning.js +1 -1
  154. package/node/hooks/features/rows/useGridRowsMeta.js +136 -154
  155. package/node/hooks/features/scroll/useGridScroll.js +10 -5
  156. package/node/hooks/features/sorting/gridSortingUtils.js +1 -1
  157. package/node/hooks/features/virtualization/useGridVirtualScroller.js +25 -11
  158. package/node/hooks/utils/useGridApiContext.js +1 -1
  159. package/node/hooks/utils/useGridApiEventHandler.js +1 -1
  160. package/node/hooks/utils/useGridApiMethod.js +3 -1
  161. package/node/hooks/utils/useGridConfiguration.js +1 -1
  162. package/node/hooks/utils/useGridPrivateApiContext.js +1 -1
  163. package/node/index.js +13 -1
  164. package/node/internals/index.js +22 -0
  165. package/node/joy/icons.js +0 -1
  166. package/node/locales/jaJP.js +4 -4
  167. package/node/utils/ResizeObserver.js +16 -0
  168. package/node/utils/domUtils.js +1 -1
  169. package/node/utils/keyboardUtils.js +15 -5
  170. package/package.json +4 -4
  171. package/utils/ResizeObserver.d.ts +4 -0
  172. package/utils/ResizeObserver.js +10 -0
  173. package/utils/domUtils.js +1 -1
  174. package/utils/keyboardUtils.d.ts +1 -0
  175. package/utils/keyboardUtils.js +12 -4
@@ -53,6 +53,38 @@ const GridGenericColumnMenu = exports.GridGenericColumnMenu = /*#__PURE__*/React
53
53
  children: orderedSlots.map(([Component, otherProps], index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(Component, (0, _extends2.default)({}, otherProps), index))
54
54
  }));
55
55
  });
56
+ process.env.NODE_ENV !== "production" ? GridGenericColumnMenu.propTypes = {
57
+ // ----------------------------- Warning --------------------------------
58
+ // | These PropTypes are generated from the TypeScript type definitions |
59
+ // | To update them edit the TypeScript types and run "pnpm proptypes" |
60
+ // ----------------------------------------------------------------------
61
+ colDef: _propTypes.default.object.isRequired,
62
+ /**
63
+ * Initial `slotProps` - it is internal, to be overrriden by Pro or Premium packages
64
+ * @ignore - do not document.
65
+ */
66
+ defaultSlotProps: _propTypes.default.object.isRequired,
67
+ /**
68
+ * Initial `slots` - it is internal, to be overrriden by Pro or Premium packages
69
+ * @ignore - do not document.
70
+ */
71
+ defaultSlots: _propTypes.default.object.isRequired,
72
+ hideMenu: _propTypes.default.func.isRequired,
73
+ id: _propTypes.default.string,
74
+ labelledby: _propTypes.default.string,
75
+ open: _propTypes.default.bool.isRequired,
76
+ /**
77
+ * Could be used to pass new props or override props specific to a column menu component
78
+ * e.g. `displayOrder`
79
+ */
80
+ slotProps: _propTypes.default.object,
81
+ /**
82
+ * `slots` could be used to add new and (or) override default column menu items
83
+ * If you register a nee component you must pass it's `displayOrder` in `slotProps`
84
+ * or it will be placed in the end of the list
85
+ */
86
+ slots: _propTypes.default.object
87
+ } : void 0;
56
88
  const GridColumnMenu = exports.GridColumnMenu = /*#__PURE__*/React.forwardRef(function GridColumnMenu(props, ref) {
57
89
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridGenericColumnMenu, (0, _extends2.default)({}, props, {
58
90
  ref: ref,
@@ -35,6 +35,26 @@ function GridCsvExportMenuItem(props) {
35
35
  children: apiRef.current.getLocaleText('toolbarExportCSV')
36
36
  }));
37
37
  }
38
+ process.env.NODE_ENV !== "production" ? GridCsvExportMenuItem.propTypes = {
39
+ // ----------------------------- Warning --------------------------------
40
+ // | These PropTypes are generated from the TypeScript type definitions |
41
+ // | To update them edit the TypeScript types and run "pnpm proptypes" |
42
+ // ----------------------------------------------------------------------
43
+ hideMenu: _propTypes.default.func,
44
+ options: _propTypes.default.shape({
45
+ allColumns: _propTypes.default.bool,
46
+ delimiter: _propTypes.default.string,
47
+ disableToolbarButton: _propTypes.default.bool,
48
+ escapeFormulas: _propTypes.default.bool,
49
+ fields: _propTypes.default.arrayOf(_propTypes.default.string),
50
+ fileName: _propTypes.default.string,
51
+ getRowsToExport: _propTypes.default.func,
52
+ includeColumnGroupsHeaders: _propTypes.default.bool,
53
+ includeHeaders: _propTypes.default.bool,
54
+ shouldAppendQuotes: _propTypes.default.bool,
55
+ utf8WithBom: _propTypes.default.bool
56
+ })
57
+ } : void 0;
38
58
  function GridPrintExportMenuItem(props) {
39
59
  const apiRef = (0, _useGridApiContext.useGridApiContext)();
40
60
  const {
@@ -51,6 +71,38 @@ function GridPrintExportMenuItem(props) {
51
71
  children: apiRef.current.getLocaleText('toolbarExportPrint')
52
72
  }));
53
73
  }
74
+ process.env.NODE_ENV !== "production" ? GridPrintExportMenuItem.propTypes = {
75
+ // ----------------------------- Warning --------------------------------
76
+ // | These PropTypes are generated from the TypeScript type definitions |
77
+ // | To update them edit the TypeScript types and run "pnpm proptypes" |
78
+ // ----------------------------------------------------------------------
79
+ hideMenu: _propTypes.default.func,
80
+ options: _propTypes.default.shape({
81
+ allColumns: _propTypes.default.bool,
82
+ bodyClassName: _propTypes.default.string,
83
+ copyStyles: _propTypes.default.bool,
84
+ disableToolbarButton: _propTypes.default.bool,
85
+ fields: _propTypes.default.arrayOf(_propTypes.default.string),
86
+ fileName: _propTypes.default.string,
87
+ getRowsToExport: _propTypes.default.func,
88
+ hideFooter: _propTypes.default.bool,
89
+ hideToolbar: _propTypes.default.bool,
90
+ includeCheckboxes: _propTypes.default.bool,
91
+ pageStyle: _propTypes.default.oneOfType([_propTypes.default.shape({
92
+ '__@hasInstance@646': _propTypes.default.func.isRequired,
93
+ '__@metadata@648': _propTypes.default.any,
94
+ apply: _propTypes.default.func.isRequired,
95
+ arguments: _propTypes.default.any.isRequired,
96
+ bind: _propTypes.default.func.isRequired,
97
+ call: _propTypes.default.func.isRequired,
98
+ caller: _propTypes.default.object.isRequired,
99
+ length: _propTypes.default.number.isRequired,
100
+ name: _propTypes.default.string.isRequired,
101
+ prototype: _propTypes.default.any.isRequired,
102
+ toString: _propTypes.default.func.isRequired
103
+ }), _propTypes.default.string])
104
+ })
105
+ } : void 0;
54
106
  const GridToolbarExport = exports.GridToolbarExport = /*#__PURE__*/React.forwardRef(function GridToolbarExport(props, ref) {
55
107
  const {
56
108
  csvOptions = {},
@@ -126,6 +126,10 @@ const GridVirtualScrollbar = exports.GridVirtualScrollbar = /*#__PURE__*/React.f
126
126
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(Container, {
127
127
  ref: (0, _utils.unstable_useForkRef)(ref, scrollbarRef),
128
128
  className: classes.root,
129
+ style: props.position === 'vertical' && rootProps.unstable_listView ? {
130
+ height: '100%',
131
+ top: 0
132
+ } : undefined,
129
133
  tabIndex: -1,
130
134
  "aria-hidden": "true",
131
135
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
@@ -86,7 +86,7 @@ function GridVirtualScroller(props) {
86
86
  }, getScrollerProps(), {
87
87
  ownerState: rootProps,
88
88
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridTopContainer.GridTopContainer, {
89
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_GridHeaders.GridHeaders, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.pinnedRows, {
89
+ children: [!rootProps.unstable_listView && /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridHeaders.GridHeaders, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.pinnedRows, {
90
90
  position: "top",
91
91
  virtualScroller: virtualScroller
92
92
  })]
@@ -106,7 +106,7 @@ function GridVirtualScroller(props) {
106
106
  })]
107
107
  })), dimensions.hasScrollY && /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridVirtualScrollbar.GridVirtualScrollbar, (0, _extends2.default)({
108
108
  position: "vertical"
109
- }, getScrollbarVerticalProps())), dimensions.hasScrollX && /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridVirtualScrollbar.GridVirtualScrollbar, (0, _extends2.default)({
109
+ }, getScrollbarVerticalProps())), dimensions.hasScrollX && !rootProps.unstable_listView && /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridVirtualScrollbar.GridVirtualScrollbar, (0, _extends2.default)({
110
110
  position: "horizontal"
111
111
  }, getScrollbarHorizontalProps())), props.children]
112
112
  }));
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DATA_GRID_PROPS_DEFAULT_VALUES = void 0;
7
+ var _gridEditRowModel = require("../models/gridEditRowModel");
8
+ /**
9
+ * The default values of `DataGridPropsWithDefaultValues` to inject in the props of DataGrid.
10
+ */
11
+ const DATA_GRID_PROPS_DEFAULT_VALUES = exports.DATA_GRID_PROPS_DEFAULT_VALUES = {
12
+ autoHeight: false,
13
+ autoPageSize: false,
14
+ autosizeOnMount: false,
15
+ checkboxSelection: false,
16
+ checkboxSelectionVisibleOnly: false,
17
+ clipboardCopyCellDelimiter: '\t',
18
+ columnBufferPx: 150,
19
+ columnHeaderHeight: 56,
20
+ disableAutosize: false,
21
+ disableColumnFilter: false,
22
+ disableColumnMenu: false,
23
+ disableColumnReorder: false,
24
+ disableColumnResize: false,
25
+ disableColumnSelector: false,
26
+ disableColumnSorting: false,
27
+ disableDensitySelector: false,
28
+ disableEval: false,
29
+ disableMultipleColumnsFiltering: false,
30
+ disableMultipleColumnsSorting: false,
31
+ disableMultipleRowSelection: false,
32
+ disableRowSelectionOnClick: false,
33
+ disableVirtualization: false,
34
+ editMode: _gridEditRowModel.GridEditModes.Cell,
35
+ filterDebounceMs: 150,
36
+ filterMode: 'client',
37
+ hideFooter: false,
38
+ hideFooterPagination: false,
39
+ hideFooterRowCount: false,
40
+ hideFooterSelectedRowCount: false,
41
+ ignoreDiacritics: false,
42
+ ignoreValueFormatterDuringExport: false,
43
+ // TODO v8: Update to 'select'
44
+ indeterminateCheckboxAction: 'deselect',
45
+ keepColumnPositionIfDraggedOutside: false,
46
+ keepNonExistentRowsSelected: false,
47
+ loading: false,
48
+ logger: console,
49
+ logLevel: process.env.NODE_ENV === 'production' ? 'error' : 'warn',
50
+ pageSizeOptions: [25, 50, 100],
51
+ pagination: false,
52
+ paginationMode: 'client',
53
+ resizeThrottleMs: 60,
54
+ rowBufferPx: 150,
55
+ rowHeight: 52,
56
+ rowPositionsDebounceMs: 166,
57
+ rows: [],
58
+ rowSelection: true,
59
+ rowSpacingType: 'margin',
60
+ showCellVerticalBorder: false,
61
+ showColumnVerticalBorder: false,
62
+ sortingMode: 'client',
63
+ sortingOrder: ['asc', 'desc', null],
64
+ throttleRowsMs: 0,
65
+ unstable_rowSpanning: false
66
+ };
@@ -10,6 +10,8 @@ const useGridRefs = apiRef => {
10
10
  const rootElementRef = React.useRef(null);
11
11
  const mainElementRef = React.useRef(null);
12
12
  const virtualScrollerRef = React.useRef(null);
13
+ const virtualScrollbarVerticalRef = React.useRef(null);
14
+ const virtualScrollbarHorizontalRef = React.useRef(null);
13
15
  const columnHeadersContainerRef = React.useRef(null);
14
16
  apiRef.current.register('public', {
15
17
  rootElementRef
@@ -17,6 +19,8 @@ const useGridRefs = apiRef => {
17
19
  apiRef.current.register('private', {
18
20
  mainElementRef,
19
21
  virtualScrollerRef,
22
+ virtualScrollbarVerticalRef,
23
+ virtualScrollbarHorizontalRef,
20
24
  columnHeadersContainerRef
21
25
  });
22
26
  };
@@ -9,6 +9,7 @@ var React = _interopRequireWildcard(require("react"));
9
9
  var _utils = require("../../utils");
10
10
  var _gridFocusStateSelector = require("../focus/gridFocusStateSelector");
11
11
  var _csvSerializer = require("../export/serializers/csvSerializer");
12
+ var _keyboardUtils = require("../../../utils/keyboardUtils");
12
13
  function writeToClipboardPolyfill(data) {
13
14
  const span = document.createElement('span');
14
15
  span.style.whiteSpace = 'pre';
@@ -60,7 +61,7 @@ const useGridClipboard = (apiRef, props) => {
60
61
  const ignoreValueFormatter = (typeof ignoreValueFormatterProp === 'object' ? ignoreValueFormatterProp?.clipboardExport : ignoreValueFormatterProp) || false;
61
62
  const clipboardCopyCellDelimiter = props.clipboardCopyCellDelimiter;
62
63
  const handleCopy = React.useCallback(event => {
63
- if (!((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'c' && !event.shiftKey && !event.altKey)) {
64
+ if (!(0, _keyboardUtils.isCopyShortcut)(event)) {
64
65
  return;
65
66
  }
66
67
 
@@ -64,7 +64,9 @@ const useGridColumnHeaders = props => {
64
64
  const offsetLeft = (0, _useGridVirtualScroller.computeOffsetLeft)(columnPositions, renderContext, pinnedColumns.left.length);
65
65
  const gridHasFiller = dimensions.columnsTotalWidth < dimensions.viewportOuterSize.width;
66
66
  React.useEffect(() => {
67
- apiRef.current.columnHeadersContainerRef.current.scrollLeft = 0;
67
+ if (apiRef.current.columnHeadersContainerRef.current) {
68
+ apiRef.current.columnHeadersContainerRef.current.scrollLeft = 0;
69
+ }
68
70
  }, [apiRef]);
69
71
  const handleColumnResizeStart = React.useCallback(params => setResizeCol(params.field), []);
70
72
  const handleColumnResizeStop = React.useCallback(() => setResizeCol(''), []);
@@ -327,6 +327,9 @@ function getFirstNonSpannedColumnToRender({
327
327
  return firstNonSpannedColumnToRender;
328
328
  }
329
329
  function getTotalHeaderHeight(apiRef, props) {
330
+ if (props.unstable_listView) {
331
+ return 0;
332
+ }
330
333
  const densityFactor = (0, _densitySelector.gridDensityFactorSelector)(apiRef);
331
334
  const maxDepth = (0, _gridColumnGroupsSelector.gridColumnGroupsHeaderMaxDepthSelector)(apiRef);
332
335
  const isHeaderFilteringEnabled = (0, _gridHeaderFilteringSelectors.gridHeaderFilteringEnabledSelector)(apiRef);
@@ -23,6 +23,7 @@ var _useGridVisibleRows = require("../../utils/useGridVisibleRows");
23
23
  var _gridRowsMetaSelector = require("../rows/gridRowsMetaSelector");
24
24
  var _gridRowsUtils = require("../rows/gridRowsUtils");
25
25
  var _gridColumnsUtils = require("../columns/gridColumnsUtils");
26
+ var _dataGridPropsDefaultValues = require("../../../constants/dataGridPropsDefaultValues");
26
27
  const EMPTY_SIZE = {
27
28
  width: 0,
28
29
  height: 0
@@ -64,7 +65,8 @@ function useGridDimensions(apiRef, props) {
64
65
  const rowsMeta = (0, _utils2.useGridSelector)(apiRef, _gridRowsMetaSelector.gridRowsMetaSelector);
65
66
  const pinnedColumns = (0, _utils2.useGridSelector)(apiRef, _columns.gridVisiblePinnedColumnDefinitionsSelector);
66
67
  const densityFactor = (0, _utils2.useGridSelector)(apiRef, _density.gridDensityFactorSelector);
67
- const rowHeight = Math.floor(props.rowHeight * densityFactor);
68
+ const validRowHeight = React.useMemo(() => (0, _gridRowsUtils.getValidRowHeight)(props.rowHeight, _dataGridPropsDefaultValues.DATA_GRID_PROPS_DEFAULT_VALUES.rowHeight, _gridRowsUtils.rowHeightWarning), [props.rowHeight]);
69
+ const rowHeight = Math.floor(validRowHeight * densityFactor);
68
70
  const headerHeight = Math.floor(props.columnHeaderHeight * densityFactor);
69
71
  const groupHeaderHeight = Math.floor((props.columnGroupHeaderHeight ?? props.columnHeaderHeight) * densityFactor);
70
72
  const headerFilterHeight = Math.floor((props.headerFilterHeight ?? props.columnHeaderHeight) * densityFactor);
@@ -248,11 +250,11 @@ function useGridDimensions(apiRef, props) {
248
250
  // jsdom has no layout capabilities
249
251
  const isJSDOM = /jsdom/.test(window.navigator.userAgent);
250
252
  if (size.height === 0 && !errorShown.current && !props.autoHeight && !isJSDOM) {
251
- logger.error(['The parent DOM element of the data grid has an empty height.', 'Please make sure that this element has an intrinsic height.', 'The grid displays with a height of 0px.', '', 'More details: https://mui.com/r/x-data-grid-no-dimensions.'].join('\n'));
253
+ logger.error(['The parent DOM element of the Data Grid has an empty height.', 'Please make sure that this element has an intrinsic height.', 'The grid displays with a height of 0px.', '', 'More details: https://mui.com/r/x-data-grid-no-dimensions.'].join('\n'));
252
254
  errorShown.current = true;
253
255
  }
254
256
  if (size.width === 0 && !errorShown.current && !isJSDOM) {
255
- logger.error(['The parent DOM element of the data grid has an empty width.', 'Please make sure that this element has an intrinsic width.', 'The grid displays with a width of 0px.', '', 'More details: https://mui.com/r/x-data-grid-no-dimensions.'].join('\n'));
257
+ logger.error(['The parent DOM element of the Data Grid has an empty width.', 'Please make sure that this element has an intrinsic width.', 'The grid displays with a width of 0px.', '', 'More details: https://mui.com/r/x-data-grid-no-dimensions.'].join('\n'));
256
258
  errorShown.current = true;
257
259
  }
258
260
  if (isFirstSizing.current) {
@@ -332,7 +332,9 @@ const useGridCellEditing = (apiRef, props) => {
332
332
  };
333
333
  try {
334
334
  const row = apiRef.current.getRow(id);
335
- Promise.resolve(processRowUpdate(rowUpdate, row)).then(finalRowUpdate => {
335
+ Promise.resolve(processRowUpdate(rowUpdate, row, {
336
+ rowId: id
337
+ })).then(finalRowUpdate => {
336
338
  apiRef.current.updateRows([finalRowUpdate]);
337
339
  finishCellEditMode();
338
340
  }).catch(handleError);
@@ -405,7 +405,9 @@ const useGridRowEditing = (apiRef, props) => {
405
405
  }
406
406
  };
407
407
  try {
408
- Promise.resolve(processRowUpdate(rowUpdate, row)).then(finalRowUpdate => {
408
+ Promise.resolve(processRowUpdate(rowUpdate, row, {
409
+ rowId: id
410
+ })).then(finalRowUpdate => {
409
411
  apiRef.current.updateRows([finalRowUpdate]);
410
412
  finishRowEditMode();
411
413
  }).catch(handleError);
@@ -11,6 +11,7 @@ var _useGridApiEventHandler = require("../../utils/useGridApiEventHandler");
11
11
  */
12
12
  function useGridEvents(apiRef, props) {
13
13
  (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'columnHeaderClick', props.onColumnHeaderClick);
14
+ (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'columnHeaderContextMenu', props.onColumnHeaderContextMenu);
14
15
  (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'columnHeaderDoubleClick', props.onColumnHeaderDoubleClick);
15
16
  (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'columnHeaderOver', props.onColumnHeaderOver);
16
17
  (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'columnHeaderOut', props.onColumnHeaderOut);
@@ -49,7 +49,7 @@ const sanitizeFilterModel = (model, disableMultipleColumnsFiltering, apiRef) =>
49
49
  let items;
50
50
  if (hasSeveralItems && disableMultipleColumnsFiltering) {
51
51
  if (process.env.NODE_ENV !== 'production') {
52
- (0, _warning.warnOnce)(['MUI X: The `filterModel` can only contain a single item when the `disableMultipleColumnsFiltering` prop is set to `true`.', 'If you are using the community version of the `DataGrid`, this prop is always `true`.'], 'error');
52
+ (0, _warning.warnOnce)(['MUI X: The `filterModel` can only contain a single item when the `disableMultipleColumnsFiltering` prop is set to `true`.', 'If you are using the community version of the Data Grid, this prop is always `true`.'], 'error');
53
53
  }
54
54
  items = [model.items[0]];
55
55
  } else {
@@ -23,6 +23,7 @@ var _gridHeaderFilteringSelectors = require("../headerFiltering/gridHeaderFilter
23
23
  var _pipeProcessing = require("../../core/pipeProcessing");
24
24
  var _domUtils = require("../../../utils/domUtils");
25
25
  var _utils = require("./utils");
26
+ var _gridListViewSelectors = require("../listView/gridListViewSelectors");
26
27
  /**
27
28
  * @requires useGridSorting (method) - can be after
28
29
  * @requires useGridFilter (state) - can be after
@@ -36,6 +37,7 @@ const useGridKeyboardNavigation = (apiRef, props) => {
36
37
  const logger = (0, _useGridLogger.useGridLogger)(apiRef, 'useGridKeyboardNavigation');
37
38
  const initialCurrentPageRows = (0, _useGridVisibleRows.useGridVisibleRows)(apiRef, props).rows;
38
39
  const isRtl = (0, _RtlProvider.useRtl)();
40
+ const listView = props.unstable_listView;
39
41
  const currentPageRows = React.useMemo(() => (0, _utils.enrichPageRowsWithPinnedRows)(apiRef, initialCurrentPageRows), [apiRef, initialCurrentPageRows]);
40
42
  const headerFilteringEnabled = props.signature !== 'DataGrid' && props.headerFilters;
41
43
 
@@ -56,7 +58,7 @@ const useGridKeyboardNavigation = (apiRef, props) => {
56
58
  colIndex = nextCellColSpanInfo.rightVisibleCellIndex;
57
59
  }
58
60
  }
59
- const field = (0, _gridColumnsSelector.gridVisibleColumnFieldsSelector)(apiRef)[colIndex];
61
+ const field = listView ? (0, _gridListViewSelectors.gridListColumnSelector)(apiRef.current.state).field : (0, _gridColumnsSelector.gridVisibleColumnFieldsSelector)(apiRef)[colIndex];
60
62
  const nonRowSpannedRowId = (0, _utils.findNonRowSpannedCell)(apiRef, rowId, field, rowSpanScanDirection);
61
63
  // `scrollToIndexes` requires a rowIndex relative to all visible rows.
62
64
  // Those rows do not include pinned rows, but pinned rows do not need scroll anyway.
@@ -67,7 +69,7 @@ const useGridKeyboardNavigation = (apiRef, props) => {
67
69
  rowIndex: rowIndexRelativeToAllRows
68
70
  });
69
71
  apiRef.current.setCellFocus(nonRowSpannedRowId, field);
70
- }, [apiRef, logger]);
72
+ }, [apiRef, logger, listView]);
71
73
  const goToHeader = React.useCallback((colIndex, event) => {
72
74
  logger.debug(`Navigating to header col ${colIndex}`);
73
75
  apiRef.current.scrollToIndexes({
@@ -390,12 +392,14 @@ const useGridKeyboardNavigation = (apiRef, props) => {
390
392
  return;
391
393
  }
392
394
  const viewportPageSize = apiRef.current.getViewportPageSize();
393
- const colIndexBefore = params.field ? apiRef.current.getColumnIndex(params.field) : 0;
395
+ const getColumnIndexFn = listView ? () => 0 : apiRef.current.getColumnIndex;
396
+ const colIndexBefore = params.field ? getColumnIndexFn(params.field) : 0;
394
397
  const rowIndexBefore = currentPageRows.findIndex(row => row.id === params.id);
395
398
  const firstRowIndexInPage = 0;
396
399
  const lastRowIndexInPage = currentPageRows.length - 1;
397
400
  const firstColIndex = 0;
398
- const lastColIndex = (0, _gridColumnsSelector.gridVisibleColumnDefinitionsSelector)(apiRef).length - 1;
401
+ const visibleColumns = listView ? [(0, _gridListViewSelectors.gridListColumnSelector)(apiRef.current.state)] : (0, _gridColumnsSelector.gridVisibleColumnDefinitionsSelector)(apiRef);
402
+ const lastColIndex = visibleColumns.length - 1;
399
403
  let shouldPreventDefault = true;
400
404
  switch (event.key) {
401
405
  case 'ArrowDown':
@@ -514,7 +518,7 @@ const useGridKeyboardNavigation = (apiRef, props) => {
514
518
  if (shouldPreventDefault) {
515
519
  event.preventDefault();
516
520
  }
517
- }, [apiRef, currentPageRows, isRtl, goToCell, getRowIdFromIndex, headerFilteringEnabled, goToHeaderFilter, goToHeader]);
521
+ }, [apiRef, currentPageRows, isRtl, goToCell, getRowIdFromIndex, headerFilteringEnabled, goToHeaderFilter, goToHeader, listView]);
518
522
  const checkIfCanStartEditing = React.useCallback((initialValue, {
519
523
  event
520
524
  }) => {
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.gridListColumnSelector = void 0;
7
+ /**
8
+ * Get a list column definition
9
+ */
10
+ const gridListColumnSelector = state => state.listViewColumn;
11
+ exports.gridListColumnSelector = gridListColumnSelector;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.listViewStateInitializer = void 0;
9
+ exports.useGridListView = useGridListView;
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+ var React = _interopRequireWildcard(require("react"));
12
+ var _dimensions = require("../dimensions");
13
+ var _useGridApiEventHandler = require("../../utils/useGridApiEventHandler");
14
+ const listViewStateInitializer = (state, props, apiRef) => (0, _extends2.default)({}, state, {
15
+ listViewColumn: (0, _extends2.default)({}, props.unstable_listColumn, {
16
+ computedWidth: getListColumnWidth(apiRef)
17
+ })
18
+ });
19
+ exports.listViewStateInitializer = listViewStateInitializer;
20
+ function useGridListView(apiRef, props) {
21
+ /*
22
+ * EVENTS
23
+ */
24
+ const updateListColumnWidth = () => {
25
+ apiRef.current.setState(state => {
26
+ if (!state.listViewColumn) {
27
+ return state;
28
+ }
29
+ return (0, _extends2.default)({}, state, {
30
+ listViewColumn: (0, _extends2.default)({}, state.listViewColumn, {
31
+ computedWidth: getListColumnWidth(apiRef)
32
+ })
33
+ });
34
+ });
35
+ };
36
+ const prevInnerWidth = React.useRef(null);
37
+ const handleGridSizeChange = viewportInnerSize => {
38
+ if (prevInnerWidth.current !== viewportInnerSize.width) {
39
+ prevInnerWidth.current = viewportInnerSize.width;
40
+ updateListColumnWidth();
41
+ }
42
+ };
43
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'viewportInnerSizeChange', handleGridSizeChange);
44
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'columnVisibilityModelChange', updateListColumnWidth);
45
+
46
+ /*
47
+ * EFFECTS
48
+ */
49
+ React.useEffect(() => {
50
+ const listColumn = props.unstable_listColumn;
51
+ if (listColumn) {
52
+ apiRef.current.setState(state => {
53
+ return (0, _extends2.default)({}, state, {
54
+ listViewColumn: (0, _extends2.default)({}, listColumn, {
55
+ computedWidth: getListColumnWidth(apiRef)
56
+ })
57
+ });
58
+ });
59
+ }
60
+ }, [apiRef, props.unstable_listColumn]);
61
+ }
62
+ function getListColumnWidth(apiRef) {
63
+ return (0, _dimensions.gridDimensionsSelector)(apiRef.current.state).viewportInnerSize.width;
64
+ }
@@ -255,7 +255,11 @@ const useGridRowSelection = (apiRef, props) => {
255
255
  /*
256
256
  * EVENTS
257
257
  */
258
+ const isFirstRender = React.useRef(true);
258
259
  const removeOutdatedSelection = React.useCallback((sortModelUpdated = false) => {
260
+ if (isFirstRender.current) {
261
+ return;
262
+ }
259
263
  const currentSelection = (0, _gridRowSelectionSelector.gridRowSelectionStateSelector)(apiRef.current.state);
260
264
  const filteredRowsLookup = (0, _gridFilterSelector.gridFilteredRowsLookupSelector)(apiRef);
261
265
 
@@ -263,7 +267,7 @@ const useGridRowSelection = (apiRef, props) => {
263
267
  const selectionLookup = (0, _extends2.default)({}, (0, _gridRowSelectionSelector.selectedIdsLookupSelector)(apiRef));
264
268
  let hasChanged = false;
265
269
  currentSelection.forEach(id => {
266
- if (filteredRowsLookup[id] === false) {
270
+ if (filteredRowsLookup[id] !== true) {
267
271
  if (props.keepNonExistentRowsSelected) {
268
272
  return;
269
273
  }
@@ -417,7 +421,7 @@ const useGridRowSelection = (apiRef, props) => {
417
421
  handleSingleRowSelection(params.id, event);
418
422
  return;
419
423
  }
420
- if (event.key === 'a' && (event.ctrlKey || event.metaKey)) {
424
+ if (String.fromCharCode(event.keyCode) === 'A' && (event.ctrlKey || event.metaKey)) {
421
425
  event.preventDefault();
422
426
  selectRows(apiRef.current.getAllRowIds(), true);
423
427
  }
@@ -471,5 +475,10 @@ const useGridRowSelection = (apiRef, props) => {
471
475
  React.useEffect(() => {
472
476
  runIfRowSelectionIsEnabled(removeOutdatedSelection);
473
477
  }, [removeOutdatedSelection, runIfRowSelectionIsEnabled]);
478
+ React.useEffect(() => {
479
+ if (isFirstRender.current) {
480
+ isFirstRender.current = false;
481
+ }
482
+ }, []);
474
483
  };
475
484
  exports.useGridRowSelection = useGridRowSelection;
@@ -52,21 +52,21 @@ function getCheckboxPropsSelector(groupId, autoSelectParents) {
52
52
  isChecked: true
53
53
  };
54
54
  }
55
- let selectableDescendentsCount = 0;
56
- let selectedDescendentsCount = 0;
55
+ let selectableDescendantsCount = 0;
56
+ let selectedDescendantsCount = 0;
57
57
  const startIndex = sortedRowIds.findIndex(id => id === groupId) + 1;
58
58
  for (let index = startIndex; index < sortedRowIds.length && rowTree[sortedRowIds[index]]?.depth > groupNode.depth; index += 1) {
59
59
  const id = sortedRowIds[index];
60
60
  if (filteredRowsLookup[id] !== false) {
61
- selectableDescendentsCount += 1;
61
+ selectableDescendantsCount += 1;
62
62
  if (rowSelectionLookup[id] !== undefined) {
63
- selectedDescendentsCount += 1;
63
+ selectedDescendantsCount += 1;
64
64
  }
65
65
  }
66
66
  }
67
67
  return {
68
- isIndeterminate: selectedDescendentsCount > 0 && selectedDescendentsCount < selectableDescendentsCount || selectedDescendentsCount === selectableDescendentsCount && rowSelectionLookup[groupId] === undefined,
69
- isChecked: autoSelectParents ? selectedDescendentsCount > 0 : rowSelectionLookup[groupId] === groupId
68
+ isIndeterminate: selectedDescendantsCount > 0 && (selectedDescendantsCount < selectableDescendantsCount || rowSelectionLookup[groupId] === undefined),
69
+ isChecked: autoSelectParents ? selectedDescendantsCount > 0 : rowSelectionLookup[groupId] === groupId
70
70
  };
71
71
  });
72
72
  }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -10,7 +10,7 @@ exports.checkGridRowIdIsValid = checkGridRowIdIsValid;
10
10
  exports.computeRowsUpdates = computeRowsUpdates;
11
11
  exports.createRowsInternalCache = void 0;
12
12
  exports.getMinimalContentHeight = getMinimalContentHeight;
13
- exports.updateCacheWithNewRows = exports.isAutogeneratedRowNode = exports.isAutogeneratedRow = exports.getTreeNodeDescendants = exports.getTopLevelRowCount = exports.getRowsStateFromCache = exports.getRowIdFromRowModel = void 0;
13
+ exports.updateCacheWithNewRows = exports.rowHeightWarning = exports.isAutogeneratedRowNode = exports.isAutogeneratedRow = exports.getValidRowHeight = exports.getTreeNodeDescendants = exports.getTopLevelRowCount = exports.getRowsStateFromCache = exports.getRowIdFromRowModel = exports.getRowHeightWarning = void 0;
14
14
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
15
15
  var _gridRowsSelector = require("./gridRowsSelector");
16
16
  var _gridDimensionsSelectors = require("../dimensions/gridDimensionsSelectors");
@@ -38,7 +38,7 @@ const buildRootGroup = () => ({
38
38
  exports.buildRootGroup = buildRootGroup;
39
39
  function checkGridRowIdIsValid(id, row, detailErrorMessage = 'A row was provided without id in the rows prop:') {
40
40
  if (id == null) {
41
- throw new Error(['MUI X: The data grid component requires all rows to have a unique `id` property.', 'Alternatively, you can use the `getRowId` prop to specify a custom id for each row.', detailErrorMessage, JSON.stringify(row)].join('\n'));
41
+ throw new Error(['MUI X: The Data Grid component requires all rows to have a unique `id` property.', 'Alternatively, you can use the `getRowId` prop to specify a custom id for each row.', detailErrorMessage, JSON.stringify(row)].join('\n'));
42
42
  }
43
43
  }
44
44
  const getRowIdFromRowModel = (rowModel, getRowId, detailErrorMessage) => {
@@ -328,4 +328,18 @@ function computeRowsUpdates(apiRef, updates, getRowId) {
328
328
  }
329
329
  });
330
330
  return nonPinnedRowsUpdates;
331
- }
331
+ }
332
+ let warnedOnceInvalidRowHeight = false;
333
+ const getValidRowHeight = (rowHeightProp, defaultRowHeight, warningMessage) => {
334
+ if (typeof rowHeightProp === 'number' && rowHeightProp > 0) {
335
+ return rowHeightProp;
336
+ }
337
+ if (process.env.NODE_ENV !== 'production' && !warnedOnceInvalidRowHeight && typeof rowHeightProp !== 'undefined' && rowHeightProp !== null) {
338
+ console.warn(warningMessage);
339
+ warnedOnceInvalidRowHeight = true;
340
+ }
341
+ return defaultRowHeight;
342
+ };
343
+ exports.getValidRowHeight = getValidRowHeight;
344
+ const rowHeightWarning = exports.rowHeightWarning = [`MUI X: The \`rowHeight\` prop should be a number greater than 0.`, `The default value will be used instead.`].join('\n');
345
+ const getRowHeightWarning = exports.getRowHeightWarning = [`MUI X: The \`getRowHeight\` prop should return a number greater than 0 or 'auto'.`, `The default value will be used instead.`].join('\n');
@@ -10,6 +10,7 @@ var React = _interopRequireWildcard(require("react"));
10
10
  var _domUtils = require("../../../utils/domUtils");
11
11
  var _useGridApiMethod = require("../../utils/useGridApiMethod");
12
12
  var _gridFocusStateSelector = require("../focus/gridFocusStateSelector");
13
+ var _gridListViewSelectors = require("../listView/gridListViewSelectors");
13
14
  class MissingRowIdError extends Error {}
14
15
 
15
16
  /**
@@ -21,7 +22,7 @@ class MissingRowIdError extends Error {}
21
22
  * TODO: Impossible priority - useGridFocus also needs to be after useGridParamsApi
22
23
  */
23
24
  exports.MissingRowIdError = MissingRowIdError;
24
- function useGridParamsApi(apiRef) {
25
+ function useGridParamsApi(apiRef, props) {
25
26
  const getColumnHeaderParams = React.useCallback(field => ({
26
27
  field,
27
28
  colDef: apiRef.current.getColumn(field)
@@ -39,7 +40,7 @@ function useGridParamsApi(apiRef) {
39
40
  return params;
40
41
  }, [apiRef]);
41
42
  const getCellParams = React.useCallback((id, field) => {
42
- const colDef = apiRef.current.getColumn(field);
43
+ const colDef = props.unstable_listView ? (0, _gridListViewSelectors.gridListColumnSelector)(apiRef.current.state) : apiRef.current.getColumn(field);
43
44
  const row = apiRef.current.getRow(id);
44
45
  const rowNode = apiRef.current.getRowNode(id);
45
46
  if (!row || !rowNode) {
@@ -68,7 +69,7 @@ function useGridParamsApi(apiRef) {
68
69
  }
69
70
  params.isEditable = colDef && apiRef.current.isCellEditable(params);
70
71
  return params;
71
- }, [apiRef]);
72
+ }, [apiRef, props.unstable_listView]);
72
73
  const getCellValue = React.useCallback((id, field) => {
73
74
  const colDef = apiRef.current.getColumn(field);
74
75
  const row = apiRef.current.getRow(id);
@@ -211,7 +211,7 @@ const useGridRowSpanning = (apiRef, props) => {
211
211
  }
212
212
  const rangeToProcess = (0, _gridRowSpanningUtils.getUnprocessedRange)({
213
213
  firstRowIndex: renderContext.firstRowIndex,
214
- lastRowIndex: renderContext.lastRowIndex - 1
214
+ lastRowIndex: Math.min(renderContext.lastRowIndex - 1, range.lastRowIndex)
215
215
  }, processedRange.current);
216
216
  if (rangeToProcess === null) {
217
217
  return;