@mui/x-data-grid 7.20.0 → 7.22.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 (186) hide show
  1. package/CHANGELOG.md +200 -31
  2. package/DataGrid/DataGrid.js +1 -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/cell/GridBooleanCell.d.ts +3 -3
  12. package/components/cell/GridBooleanCell.js +11 -1
  13. package/components/columnHeaders/GridColumnHeaderFilterIconButton.js +1 -2
  14. package/components/columnHeaders/GridColumnHeaderSortIcon.js +1 -2
  15. package/components/containers/GridRootStyles.js +5 -2
  16. package/components/menu/columnMenu/GridColumnMenu.js +32 -0
  17. package/components/panel/filterPanel/GridFilterInputBoolean.js +1 -1
  18. package/components/panel/filterPanel/GridFilterInputMultipleValue.js +2 -2
  19. package/components/panel/filterPanel/GridFilterInputValue.js +2 -2
  20. package/components/toolbar/GridToolbar.js +2 -3
  21. package/components/toolbar/GridToolbarExport.d.ts +9 -3
  22. package/components/toolbar/GridToolbarExport.js +43 -3
  23. package/components/toolbar/GridToolbarFilterButton.js +1 -2
  24. package/components/virtualization/GridBottomContainer.js +0 -17
  25. package/components/virtualization/GridMainContainer.js +2 -1
  26. package/components/virtualization/GridVirtualScrollbar.js +4 -0
  27. package/components/virtualization/GridVirtualScroller.js +4 -2
  28. package/constants/dataGridPropsDefaultValues.d.ts +5 -0
  29. package/constants/dataGridPropsDefaultValues.js +60 -0
  30. package/constants/gridClasses.d.ts +5 -0
  31. package/constants/gridClasses.js +1 -1
  32. package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +6 -1
  33. package/hooks/features/clipboard/useGridClipboard.js +2 -1
  34. package/hooks/features/columnHeaders/useGridColumnHeaders.js +3 -1
  35. package/hooks/features/columnMenu/useGridColumnMenuSlots.js +4 -3
  36. package/hooks/features/columns/gridColumnsUtils.d.ts +1 -1
  37. package/hooks/features/columns/gridColumnsUtils.js +3 -0
  38. package/hooks/features/dimensions/useGridDimensions.js +4 -2
  39. package/hooks/features/focus/useGridFocus.js +18 -3
  40. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.d.ts +1 -1
  41. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +9 -5
  42. package/hooks/features/listView/gridListViewSelectors.d.ts +5 -0
  43. package/hooks/features/listView/gridListViewSelectors.js +4 -0
  44. package/hooks/features/listView/useGridListView.d.ts +10 -0
  45. package/hooks/features/listView/useGridListView.js +54 -0
  46. package/hooks/features/pagination/gridPaginationSelector.js +2 -1
  47. package/hooks/features/rowSelection/useGridRowSelection.js +11 -2
  48. package/hooks/features/rowSelection/utils.js +1 -1
  49. package/hooks/features/rows/gridRowsMetaInterfaces.d.ts +16 -0
  50. package/hooks/features/rows/gridRowsMetaInterfaces.js +1 -0
  51. package/hooks/features/rows/gridRowsUtils.d.ts +3 -0
  52. package/hooks/features/rows/gridRowsUtils.js +14 -1
  53. package/hooks/features/rows/useGridParamsApi.d.ts +2 -1
  54. package/hooks/features/rows/useGridParamsApi.js +4 -3
  55. package/hooks/features/rows/useGridRowsMeta.js +135 -154
  56. package/hooks/features/scroll/useGridScroll.d.ts +1 -1
  57. package/hooks/features/scroll/useGridScroll.js +3 -2
  58. package/hooks/features/virtualization/useGridVirtualScroller.js +25 -10
  59. package/hooks/utils/useGridApiMethod.js +2 -1
  60. package/index.d.ts +1 -0
  61. package/index.js +2 -1
  62. package/internals/index.d.ts +2 -1
  63. package/internals/index.js +2 -1
  64. package/joy/joySlots.js +45 -27
  65. package/locales/daDK.js +5 -6
  66. package/locales/itIT.js +27 -28
  67. package/locales/ptBR.js +4 -4
  68. package/material/index.js +4 -0
  69. package/models/api/gridRowsMetaApi.d.ts +15 -14
  70. package/models/colDef/gridColDef.d.ts +6 -0
  71. package/models/colDef/index.d.ts +1 -1
  72. package/models/gridApiCaches.d.ts +2 -0
  73. package/models/gridExport.d.ts +1 -1
  74. package/models/gridSlotsComponent.d.ts +10 -0
  75. package/models/gridSlotsComponentsProps.d.ts +9 -0
  76. package/models/gridStateCommunity.d.ts +2 -0
  77. package/models/props/DataGridProps.d.ts +14 -3
  78. package/modern/DataGrid/DataGrid.js +1 -0
  79. package/modern/DataGrid/index.js +1 -2
  80. package/modern/DataGrid/useDataGridComponent.js +4 -1
  81. package/modern/DataGrid/useDataGridProps.js +3 -62
  82. package/modern/components/GridPagination.js +1 -0
  83. package/modern/components/GridRow.js +25 -36
  84. package/modern/components/base/GridOverlays.js +8 -0
  85. package/modern/components/cell/GridBooleanCell.js +11 -1
  86. package/modern/components/columnHeaders/GridColumnHeaderFilterIconButton.js +1 -2
  87. package/modern/components/columnHeaders/GridColumnHeaderSortIcon.js +1 -2
  88. package/modern/components/containers/GridRootStyles.js +5 -2
  89. package/modern/components/menu/columnMenu/GridColumnMenu.js +32 -0
  90. package/modern/components/panel/filterPanel/GridFilterInputBoolean.js +1 -1
  91. package/modern/components/panel/filterPanel/GridFilterInputMultipleValue.js +2 -2
  92. package/modern/components/panel/filterPanel/GridFilterInputValue.js +2 -2
  93. package/modern/components/toolbar/GridToolbar.js +2 -3
  94. package/modern/components/toolbar/GridToolbarExport.js +43 -3
  95. package/modern/components/toolbar/GridToolbarFilterButton.js +1 -2
  96. package/modern/components/virtualization/GridBottomContainer.js +0 -17
  97. package/modern/components/virtualization/GridMainContainer.js +2 -1
  98. package/modern/components/virtualization/GridVirtualScrollbar.js +4 -0
  99. package/modern/components/virtualization/GridVirtualScroller.js +4 -2
  100. package/modern/constants/dataGridPropsDefaultValues.js +60 -0
  101. package/modern/constants/gridClasses.js +1 -1
  102. package/modern/hooks/features/clipboard/useGridClipboard.js +2 -1
  103. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +3 -1
  104. package/modern/hooks/features/columnMenu/useGridColumnMenuSlots.js +4 -3
  105. package/modern/hooks/features/columns/gridColumnsUtils.js +3 -0
  106. package/modern/hooks/features/dimensions/useGridDimensions.js +4 -2
  107. package/modern/hooks/features/focus/useGridFocus.js +18 -3
  108. package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +9 -5
  109. package/modern/hooks/features/listView/gridListViewSelectors.js +4 -0
  110. package/modern/hooks/features/listView/useGridListView.js +54 -0
  111. package/modern/hooks/features/pagination/gridPaginationSelector.js +2 -1
  112. package/modern/hooks/features/rowSelection/useGridRowSelection.js +11 -2
  113. package/modern/hooks/features/rowSelection/utils.js +1 -1
  114. package/modern/hooks/features/rows/gridRowsMetaInterfaces.js +1 -0
  115. package/modern/hooks/features/rows/gridRowsUtils.js +14 -1
  116. package/modern/hooks/features/rows/useGridParamsApi.js +4 -3
  117. package/modern/hooks/features/rows/useGridRowsMeta.js +135 -154
  118. package/modern/hooks/features/scroll/useGridScroll.js +3 -2
  119. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +25 -10
  120. package/modern/hooks/utils/useGridApiMethod.js +2 -1
  121. package/modern/index.js +2 -1
  122. package/modern/internals/index.js +2 -1
  123. package/modern/joy/joySlots.js +45 -27
  124. package/modern/locales/daDK.js +5 -6
  125. package/modern/locales/itIT.js +27 -28
  126. package/modern/locales/ptBR.js +4 -4
  127. package/modern/material/index.js +4 -0
  128. package/modern/utils/ResizeObserver.js +10 -0
  129. package/modern/utils/keyboardUtils.js +12 -4
  130. package/node/DataGrid/DataGrid.js +1 -0
  131. package/node/DataGrid/index.js +1 -12
  132. package/node/DataGrid/useDataGridComponent.js +4 -1
  133. package/node/DataGrid/useDataGridProps.js +6 -65
  134. package/node/components/GridPagination.js +1 -0
  135. package/node/components/GridRow.js +25 -36
  136. package/node/components/base/GridOverlays.js +8 -0
  137. package/node/components/cell/GridBooleanCell.js +11 -1
  138. package/node/components/columnHeaders/GridColumnHeaderFilterIconButton.js +1 -2
  139. package/node/components/columnHeaders/GridColumnHeaderSortIcon.js +1 -2
  140. package/node/components/containers/GridRootStyles.js +5 -2
  141. package/node/components/menu/columnMenu/GridColumnMenu.js +32 -0
  142. package/node/components/panel/filterPanel/GridFilterInputBoolean.js +1 -1
  143. package/node/components/panel/filterPanel/GridFilterInputMultipleValue.js +2 -2
  144. package/node/components/panel/filterPanel/GridFilterInputValue.js +2 -2
  145. package/node/components/toolbar/GridToolbar.js +2 -3
  146. package/node/components/toolbar/GridToolbarExport.js +40 -0
  147. package/node/components/toolbar/GridToolbarFilterButton.js +1 -2
  148. package/node/components/virtualization/GridBottomContainer.js +0 -17
  149. package/node/components/virtualization/GridMainContainer.js +2 -1
  150. package/node/components/virtualization/GridVirtualScrollbar.js +4 -0
  151. package/node/components/virtualization/GridVirtualScroller.js +4 -2
  152. package/node/constants/dataGridPropsDefaultValues.js +66 -0
  153. package/node/constants/gridClasses.js +1 -1
  154. package/node/hooks/features/clipboard/useGridClipboard.js +2 -1
  155. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +3 -1
  156. package/node/hooks/features/columnMenu/useGridColumnMenuSlots.js +4 -3
  157. package/node/hooks/features/columns/gridColumnsUtils.js +3 -0
  158. package/node/hooks/features/dimensions/useGridDimensions.js +3 -1
  159. package/node/hooks/features/focus/useGridFocus.js +18 -3
  160. package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +9 -5
  161. package/node/hooks/features/listView/gridListViewSelectors.js +11 -0
  162. package/node/hooks/features/listView/useGridListView.js +64 -0
  163. package/node/hooks/features/pagination/gridPaginationSelector.js +3 -1
  164. package/node/hooks/features/rowSelection/useGridRowSelection.js +11 -2
  165. package/node/hooks/features/rowSelection/utils.js +1 -1
  166. package/node/hooks/features/rows/gridRowsMetaInterfaces.js +5 -0
  167. package/node/hooks/features/rows/gridRowsUtils.js +16 -2
  168. package/node/hooks/features/rows/useGridParamsApi.js +4 -3
  169. package/node/hooks/features/rows/useGridRowsMeta.js +136 -154
  170. package/node/hooks/features/scroll/useGridScroll.js +3 -2
  171. package/node/hooks/features/virtualization/useGridVirtualScroller.js +25 -10
  172. package/node/hooks/utils/useGridApiMethod.js +3 -1
  173. package/node/index.js +13 -1
  174. package/node/internals/index.js +22 -0
  175. package/node/joy/joySlots.js +45 -27
  176. package/node/locales/daDK.js +5 -6
  177. package/node/locales/itIT.js +27 -28
  178. package/node/locales/ptBR.js +4 -4
  179. package/node/material/index.js +4 -0
  180. package/node/utils/ResizeObserver.js +16 -0
  181. package/node/utils/keyboardUtils.js +15 -5
  182. package/package.json +2 -2
  183. package/utils/ResizeObserver.d.ts +4 -0
  184. package/utils/ResizeObserver.js +10 -0
  185. package/utils/keyboardUtils.d.ts +1 -0
  186. package/utils/keyboardUtils.js +12 -4
@@ -9,11 +9,12 @@ exports.useGridColumnMenuSlots = void 0;
9
9
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
10
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
11
  var React = _interopRequireWildcard(require("react"));
12
- var _Divider = _interopRequireDefault(require("@mui/material/Divider"));
12
+ var _useGridRootProps = require("../../utils/useGridRootProps");
13
13
  var _useGridPrivateApiContext = require("../../utils/useGridPrivateApiContext");
14
14
  const _excluded = ["displayOrder"];
15
15
  const useGridColumnMenuSlots = props => {
16
16
  const apiRef = (0, _useGridPrivateApiContext.useGridPrivateApiContext)();
17
+ const rootProps = (0, _useGridRootProps.useGridRootProps)();
17
18
  const {
18
19
  defaultSlots,
19
20
  defaultSlotProps,
@@ -59,8 +60,8 @@ const useGridColumnMenuSlots = props => {
59
60
  const customProps = (0, _objectWithoutPropertiesLoose2.default)(processedComponentProps, _excluded);
60
61
  itemProps = (0, _extends2.default)({}, itemProps, customProps);
61
62
  }
62
- return addDividers && index !== sorted.length - 1 ? [...acc, [processedComponents[key], itemProps], [_Divider.default, {}]] : [...acc, [processedComponents[key], itemProps]];
63
+ return addDividers && index !== sorted.length - 1 ? [...acc, [processedComponents[key], itemProps], [rootProps.slots.baseDivider, {}]] : [...acc, [processedComponents[key], itemProps]];
63
64
  }, []);
64
- }, [addDividers, colDef, defaultItems, hideMenu, processedComponents, processedSlotProps, userItems]);
65
+ }, [addDividers, colDef, defaultItems, hideMenu, processedComponents, processedSlotProps, userItems, rootProps.slots.baseDivider]);
65
66
  };
66
67
  exports.useGridColumnMenuSlots = useGridColumnMenuSlots;
@@ -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);
@@ -332,18 +332,33 @@ const useGridFocus = (apiRef, props) => {
332
332
  const handleRowSet = React.useCallback(() => {
333
333
  const cell = (0, _gridFocusStateSelector.gridFocusCellSelector)(apiRef);
334
334
 
335
- // If the focused cell is in a row which does not exist anymore, then remove the focus
335
+ // If the focused cell is in a row which does not exist anymore,
336
+ // focus previous row or remove the focus
336
337
  if (cell && !apiRef.current.getRow(cell.id)) {
338
+ const lastFocusedRowId = (0, _gridFocusStateSelector.gridFocusCellSelector)(apiRef)?.id;
339
+ let nextRowId = null;
340
+ if (typeof lastFocusedRowId !== 'undefined') {
341
+ const lastFocusedRowIndex = apiRef.current.getRowIndexRelativeToVisibleRows(lastFocusedRowId);
342
+ const currentPage = (0, _useGridVisibleRows.getVisibleRows)(apiRef, {
343
+ pagination: props.pagination,
344
+ paginationMode: props.paginationMode
345
+ });
346
+ const nextRow = currentPage.rows[(0, _utils2.clamp)(lastFocusedRowIndex, 0, currentPage.rows.length - 1)];
347
+ nextRowId = nextRow.id ?? null;
348
+ }
337
349
  apiRef.current.setState(state => (0, _extends2.default)({}, state, {
338
350
  focus: {
339
- cell: null,
351
+ cell: nextRowId === null ? null : {
352
+ id: nextRowId,
353
+ field: cell.field
354
+ },
340
355
  columnHeader: null,
341
356
  columnHeaderFilter: null,
342
357
  columnGroupHeader: null
343
358
  }
344
359
  }));
345
360
  }
346
- }, [apiRef]);
361
+ }, [apiRef, props.pagination, props.paginationMode]);
347
362
  const handlePaginationModelChange = (0, _utils.unstable_useEventCallback)(() => {
348
363
  const currentFocusedCell = (0, _gridFocusStateSelector.gridFocusCellSelector)(apiRef);
349
364
  if (!currentFocusedCell) {
@@ -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
+ }
@@ -8,6 +8,8 @@ var _createSelector = require("../../../utils/createSelector");
8
8
  var _gridFilterSelector = require("../filter/gridFilterSelector");
9
9
  var _gridRowsSelector = require("../rows/gridRowsSelector");
10
10
  var _gridPaginationUtils = require("./gridPaginationUtils");
11
+ const ALL_RESULTS_PAGE_VALUE = -1;
12
+
11
13
  /**
12
14
  * @category Pagination
13
15
  * @ignore - do not document.
@@ -58,7 +60,7 @@ const gridPageCountSelector = exports.gridPageCountSelector = (0, _createSelecto
58
60
  const gridPaginationRowRangeSelector = exports.gridPaginationRowRangeSelector = (0, _createSelector.createSelectorMemoized)(gridPaginationModelSelector, _gridRowsSelector.gridRowTreeSelector, _gridRowsSelector.gridRowMaximumTreeDepthSelector, _gridFilterSelector.gridExpandedSortedRowEntriesSelector, _gridFilterSelector.gridFilteredSortedTopLevelRowEntriesSelector, (paginationModel, rowTree, rowTreeDepth, visibleSortedRowEntries, visibleSortedTopLevelRowEntries) => {
59
61
  const visibleTopLevelRowCount = visibleSortedTopLevelRowEntries.length;
60
62
  const topLevelFirstRowIndex = Math.min(paginationModel.pageSize * paginationModel.page, visibleTopLevelRowCount - 1);
61
- const topLevelLastRowIndex = Math.min(topLevelFirstRowIndex + paginationModel.pageSize - 1, visibleTopLevelRowCount - 1);
63
+ const topLevelLastRowIndex = paginationModel.pageSize === ALL_RESULTS_PAGE_VALUE ? visibleTopLevelRowCount - 1 : Math.min(topLevelFirstRowIndex + paginationModel.pageSize - 1, visibleTopLevelRowCount - 1);
62
64
 
63
65
  // The range contains no element
64
66
  if (topLevelFirstRowIndex === -1 || topLevelLastRowIndex === -1) {
@@ -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;
@@ -65,7 +65,7 @@ function getCheckboxPropsSelector(groupId, autoSelectParents) {
65
65
  }
66
66
  }
67
67
  return {
68
- isIndeterminate: selectedDescendantsCount > 0 && selectedDescendantsCount < selectableDescendantsCount || selectedDescendantsCount === selectableDescendantsCount && rowSelectionLookup[groupId] === undefined,
68
+ isIndeterminate: selectedDescendantsCount > 0 && (selectedDescendantsCount < selectableDescendantsCount || rowSelectionLookup[groupId] === undefined),
69
69
  isChecked: autoSelectParents ? selectedDescendantsCount > 0 : rowSelectionLookup[groupId] === groupId
70
70
  };
71
71
  });
@@ -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");
@@ -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);