@mui/x-data-grid 8.17.0 → 8.19.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 (114) hide show
  1. package/CHANGELOG.md +213 -0
  2. package/DataGrid/useDataGridComponent.js +4 -3
  3. package/components/GridRow.js +1 -1
  4. package/components/cell/GridActionsCell.d.ts +9 -0
  5. package/components/cell/GridActionsCell.js +54 -36
  6. package/components/cell/GridActionsCellItem.js +0 -4
  7. package/components/cell/GridBooleanCell.js +0 -10
  8. package/components/cell/GridCell.js +4 -10
  9. package/components/columnHeaders/GridColumnHeaderItem.js +2 -2
  10. package/components/columnSelection/GridCellCheckboxRenderer.js +37 -22
  11. package/components/containers/GridRootStyles.js +1 -1
  12. package/components/toolbarV8/Toolbar.js +1 -1
  13. package/components/virtualization/GridVirtualScrollbar.d.ts +1 -0
  14. package/components/virtualization/GridVirtualScrollbar.js +13 -8
  15. package/components/virtualization/GridVirtualScroller.js +2 -1
  16. package/components/virtualization/GridVirtualScrollerRenderZone.js +1 -1
  17. package/constants/dataGridPropsDefaultValues.js +2 -1
  18. package/esm/DataGrid/useDataGridComponent.js +5 -4
  19. package/esm/components/GridRow.js +1 -1
  20. package/esm/components/cell/GridActionsCell.d.ts +9 -0
  21. package/esm/components/cell/GridActionsCell.js +55 -36
  22. package/esm/components/cell/GridActionsCellItem.js +0 -4
  23. package/esm/components/cell/GridBooleanCell.js +0 -10
  24. package/esm/components/cell/GridCell.js +4 -10
  25. package/esm/components/columnHeaders/GridColumnHeaderItem.js +2 -2
  26. package/esm/components/columnSelection/GridCellCheckboxRenderer.js +37 -22
  27. package/esm/components/containers/GridRootStyles.js +1 -1
  28. package/esm/components/toolbarV8/Toolbar.js +1 -1
  29. package/esm/components/virtualization/GridVirtualScrollbar.d.ts +1 -0
  30. package/esm/components/virtualization/GridVirtualScrollbar.js +12 -7
  31. package/esm/components/virtualization/GridVirtualScroller.js +2 -1
  32. package/esm/components/virtualization/GridVirtualScrollerRenderZone.js +1 -1
  33. package/esm/constants/dataGridPropsDefaultValues.js +2 -1
  34. package/esm/hooks/core/gridPropsSelectors.d.ts +2 -1
  35. package/esm/hooks/core/gridPropsSelectors.js +3 -0
  36. package/esm/hooks/core/useGridProps.js +8 -2
  37. package/esm/hooks/core/useGridVirtualizer.d.ts +80 -6
  38. package/esm/hooks/core/useGridVirtualizer.js +27 -12
  39. package/esm/hooks/features/columnGrouping/useGridColumnGrouping.js +6 -1
  40. package/esm/hooks/features/columnMenu/useGridColumnMenu.js +14 -4
  41. package/esm/hooks/features/columns/useGridColumnSpanning.js +9 -4
  42. package/esm/hooks/features/dimensions/useGridDimensions.js +12 -6
  43. package/esm/hooks/features/export/useGridPrintExport.js +18 -18
  44. package/esm/hooks/features/filter/useGridFilter.d.ts +1 -1
  45. package/esm/hooks/features/filter/useGridFilter.js +3 -1
  46. package/esm/hooks/features/focus/useGridFocus.js +0 -1
  47. package/esm/hooks/features/keyboardNavigation/useGridKeyboardNavigation.d.ts +1 -1
  48. package/esm/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +189 -25
  49. package/esm/hooks/features/pagination/useGridPaginationMeta.js +3 -3
  50. package/esm/hooks/features/pagination/useGridPaginationModel.js +7 -4
  51. package/esm/hooks/features/pagination/useGridRowCount.js +31 -15
  52. package/esm/hooks/features/rowSelection/useGridRowSelection.js +8 -7
  53. package/esm/hooks/features/rowSelection/utils.d.ts +1 -0
  54. package/esm/hooks/features/rowSelection/utils.js +17 -4
  55. package/esm/hooks/features/rows/gridRowSpanningUtils.js +8 -5
  56. package/esm/hooks/features/rows/useGridParamsApi.js +2 -12
  57. package/esm/hooks/features/rows/useGridRowSpanning.js +23 -60
  58. package/esm/hooks/features/scroll/useGridScroll.js +2 -3
  59. package/esm/hooks/features/sorting/useGridSorting.d.ts +1 -1
  60. package/esm/hooks/features/sorting/useGridSorting.js +3 -1
  61. package/esm/hooks/features/virtualization/useGridVirtualization.js +24 -5
  62. package/esm/hooks/utils/useGridApiRef.d.ts +1 -2
  63. package/esm/hooks/utils/useGridEvent.js +6 -2
  64. package/esm/hooks/utils/useRunOncePerLoop.d.ts +4 -1
  65. package/esm/hooks/utils/useRunOncePerLoop.js +28 -18
  66. package/esm/index.js +1 -1
  67. package/esm/models/colDef/gridColDef.d.ts +14 -0
  68. package/esm/models/events/gridEventLookup.d.ts +5 -0
  69. package/esm/models/gridStateCommunity.d.ts +1 -1
  70. package/esm/models/params/gridCellParams.d.ts +0 -10
  71. package/esm/models/props/DataGridProps.d.ts +13 -6
  72. package/esm/utils/keyboardUtils.d.ts +1 -8
  73. package/esm/utils/keyboardUtils.js +0 -7
  74. package/hooks/core/gridPropsSelectors.d.ts +2 -1
  75. package/hooks/core/gridPropsSelectors.js +4 -1
  76. package/hooks/core/useGridProps.js +8 -2
  77. package/hooks/core/useGridVirtualizer.d.ts +80 -6
  78. package/hooks/core/useGridVirtualizer.js +26 -11
  79. package/hooks/features/columnGrouping/useGridColumnGrouping.js +6 -1
  80. package/hooks/features/columnMenu/useGridColumnMenu.js +14 -4
  81. package/hooks/features/columns/useGridColumnSpanning.js +9 -4
  82. package/hooks/features/dimensions/useGridDimensions.js +12 -6
  83. package/hooks/features/export/useGridPrintExport.js +18 -18
  84. package/hooks/features/filter/useGridFilter.d.ts +1 -1
  85. package/hooks/features/filter/useGridFilter.js +3 -1
  86. package/hooks/features/focus/useGridFocus.js +0 -1
  87. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.d.ts +1 -1
  88. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +189 -25
  89. package/hooks/features/pagination/useGridPaginationMeta.js +2 -2
  90. package/hooks/features/pagination/useGridPaginationModel.js +7 -4
  91. package/hooks/features/pagination/useGridRowCount.js +30 -14
  92. package/hooks/features/rowSelection/useGridRowSelection.js +8 -7
  93. package/hooks/features/rowSelection/utils.d.ts +1 -0
  94. package/hooks/features/rowSelection/utils.js +16 -3
  95. package/hooks/features/rows/gridRowSpanningUtils.js +8 -5
  96. package/hooks/features/rows/useGridParamsApi.js +2 -12
  97. package/hooks/features/rows/useGridRowSpanning.js +23 -60
  98. package/hooks/features/scroll/useGridScroll.js +2 -3
  99. package/hooks/features/sorting/useGridSorting.d.ts +1 -1
  100. package/hooks/features/sorting/useGridSorting.js +3 -1
  101. package/hooks/features/virtualization/useGridVirtualization.js +24 -5
  102. package/hooks/utils/useGridApiRef.d.ts +1 -2
  103. package/hooks/utils/useGridEvent.js +6 -2
  104. package/hooks/utils/useRunOncePerLoop.d.ts +4 -1
  105. package/hooks/utils/useRunOncePerLoop.js +27 -18
  106. package/index.js +1 -1
  107. package/models/colDef/gridColDef.d.ts +14 -0
  108. package/models/events/gridEventLookup.d.ts +5 -0
  109. package/models/gridStateCommunity.d.ts +1 -1
  110. package/models/params/gridCellParams.d.ts +0 -10
  111. package/models/props/DataGridProps.d.ts +13 -6
  112. package/package.json +4 -4
  113. package/utils/keyboardUtils.d.ts +1 -8
  114. package/utils/keyboardUtils.js +1 -13
@@ -1,9 +1,83 @@
1
- import { RefObject } from '@mui/x-internals/types';
2
- import { GridPrivateApiCommunity } from "../../models/api/gridApiCommunity.js";
3
- import { DataGridProcessedProps } from "../../models/props/DataGridProps.js";
4
- type RootProps = DataGridProcessedProps;
1
+ import * as React from 'react';
2
+ import { Dimensions, Virtualization } from '@mui/x-virtualizer';
5
3
  /**
6
4
  * Virtualizer setup
7
5
  */
8
- export declare function useGridVirtualizer(apiRef: RefObject<GridPrivateApiCommunity>, rootProps: RootProps): void;
9
- export {};
6
+ export declare function useGridVirtualizer(): {
7
+ store: import("@mui/x-internals/store").Store<Dimensions.State & Virtualization.State & import("@mui/x-virtualizer").Colspan.State & import("@mui/x-virtualizer").Rowspan.State>;
8
+ api: {
9
+ updateDimensions: (firstUpdate?: boolean) => void;
10
+ debouncedUpdateDimensions: (((firstUpdate?: boolean) => void) & import("@mui/x-internals/throttle").Cancelable) | undefined;
11
+ rowsMeta: {
12
+ getRowHeight: (rowId: import("@mui/x-virtualizer/models").RowId) => any;
13
+ setLastMeasuredRowIndex: (index: number) => void;
14
+ storeRowHeightMeasurement: (id: import("@mui/x-virtualizer/models").RowId, height: number) => void;
15
+ hydrateRowsMeta: () => void;
16
+ observeRowHeight: (element: Element, rowId: import("@mui/x-virtualizer/models").RowId) => () => void | undefined;
17
+ rowHasAutoHeight: (id: import("@mui/x-virtualizer/models").RowId) => any;
18
+ getRowHeightEntry: (rowId: import("@mui/x-virtualizer/models").RowId) => any;
19
+ getLastMeasuredRowIndex: () => number;
20
+ resetRowHeights: () => void;
21
+ };
22
+ } & {
23
+ getters: {
24
+ setPanels: React.Dispatch<React.SetStateAction<Readonly<Map<any, React.ReactNode>>>>;
25
+ getOffsetTop: () => number;
26
+ getRows: (rowParams?: {
27
+ rows?: import("@mui/x-virtualizer/models").RowEntry[];
28
+ position?: import("@mui/x-virtualizer/models").PinnedRowPosition;
29
+ renderContext?: import("@mui/x-virtualizer/models").RenderContext;
30
+ }, unstable_rowTree?: Record<import("@mui/x-virtualizer/models").RowId, any>) => React.ReactNode[];
31
+ rows: import("@mui/x-virtualizer/models").RowEntry[];
32
+ getContainerProps: () => {
33
+ ref: (node: HTMLDivElement | null) => (() => void | undefined) | undefined;
34
+ };
35
+ getScrollerProps: () => {
36
+ ref: (node: HTMLDivElement | null) => (() => void | undefined) | undefined;
37
+ style: React.CSSProperties;
38
+ role: string;
39
+ tabIndex: number | undefined;
40
+ };
41
+ getContentProps: () => {
42
+ ref: (node: HTMLDivElement | null) => void;
43
+ style: React.CSSProperties;
44
+ role: string;
45
+ };
46
+ getScrollbarVerticalProps: () => {
47
+ ref: (node: HTMLDivElement | null) => void;
48
+ scrollPosition: React.RefObject<{
49
+ top: number;
50
+ left: number;
51
+ }>;
52
+ };
53
+ getScrollbarHorizontalProps: () => {
54
+ ref: (node: HTMLDivElement | null) => void;
55
+ scrollPosition: React.RefObject<{
56
+ top: number;
57
+ left: number;
58
+ }>;
59
+ };
60
+ getScrollAreaProps: () => {
61
+ scrollPosition: React.RefObject<{
62
+ top: number;
63
+ left: number;
64
+ }>;
65
+ };
66
+ };
67
+ useVirtualization: () => import("@mui/x-virtualizer").BaseState;
68
+ setPanels: React.Dispatch<React.SetStateAction<Readonly<Map<any, React.ReactNode>>>>;
69
+ forceUpdateRenderContext: () => void;
70
+ scheduleUpdateRenderContext: () => void;
71
+ getCellColSpanInfo: (rowId: import("@mui/x-virtualizer/models").RowId, columnIndex: import("@mui/x-internals/types").integer) => import("@mui/x-virtualizer/models").CellColSpanInfo;
72
+ calculateColSpan: (rowId: import("@mui/x-virtualizer/models").RowId, minFirstColumn: import("@mui/x-internals/types").integer, maxLastColumn: import("@mui/x-internals/types").integer, columns: import("@mui/x-virtualizer/models").ColumnWithWidth[]) => void;
73
+ getHiddenCellsOrigin: () => Record<import("@mui/x-virtualizer/models").RowId, Record<number, number>>;
74
+ } & {
75
+ resetColSpan: () => void;
76
+ getCellColSpanInfo: (rowId: import("@mui/x-virtualizer/models").RowId, columnIndex: import("@mui/x-internals/types").integer) => import("@mui/x-virtualizer/models").CellColSpanInfo | undefined;
77
+ calculateColSpan: (rowId: import("@mui/x-virtualizer/models").RowId, minFirstColumn: import("@mui/x-internals/types").integer, maxLastColumn: import("@mui/x-internals/types").integer, columns: import("@mui/x-virtualizer/models").ColumnWithWidth[]) => void;
78
+ } & {
79
+ getHiddenCellsOrigin: () => Record<number, Record<number, number>>;
80
+ } & {
81
+ getViewportPageSize: () => number;
82
+ };
83
+ };
@@ -30,10 +30,11 @@ var _dataGridPropsDefaultValues = require("../../constants/dataGridPropsDefaultV
30
30
  var _gridRowsUtils = require("../features/rows/gridRowsUtils");
31
31
  var _gridColumnsUtils = require("../features/columns/gridColumnsUtils");
32
32
  var _useGridOverlays = require("../features/overlays/useGridOverlays");
33
+ var _useGridRootProps = require("../utils/useGridRootProps");
34
+ var _useGridPrivateApiContext = require("../utils/useGridPrivateApiContext");
35
+ var _useGridRowsMeta = require("../features/rows/useGridRowsMeta");
36
+ var _utils = require("../../utils/utils");
33
37
  var _jsxRuntime = require("react/jsx-runtime");
34
- function identity(x) {
35
- return x;
36
- }
37
38
  const columnsTotalWidthSelector = (0, _createSelector.createSelector)(_gridColumnsSelector.gridVisibleColumnDefinitionsSelector, _gridColumnsSelector.gridColumnPositionsSelector, (visibleColumns, positions) => {
38
39
  const colCount = visibleColumns.length;
39
40
  if (colCount === 0) {
@@ -57,8 +58,10 @@ const addGridDimensionsCreator = () => (0, _lruMemoize.lruMemoize)((dimensions,
57
58
  /**
58
59
  * Virtualizer setup
59
60
  */
60
- function useGridVirtualizer(apiRef, rootProps) {
61
+ function useGridVirtualizer() {
61
62
  const isRtl = (0, _RtlProvider.useRtl)();
63
+ const rootProps = (0, _useGridRootProps.useGridRootProps)();
64
+ const apiRef = (0, _useGridPrivateApiContext.useGridPrivateApiContext)();
62
65
  const {
63
66
  listView
64
67
  } = rootProps;
@@ -113,9 +116,11 @@ function useGridVirtualizer(apiRef, rootProps) {
113
116
  } = rootProps;
114
117
  // </ROWS_META>
115
118
 
116
- const focusedVirtualCell = (0, _useGridSelector.useGridSelector)(apiRef, _gridFocusedVirtualCellSelector.gridFocusedVirtualCellSelector);
117
119
  const RowSlot = rootProps.slots.row;
118
120
  const rowSlotProps = rootProps.slotProps?.row;
121
+ const focusedVirtualCell = (0, _useGridSelector.useGridSelector)(apiRef, _gridFocusedVirtualCellSelector.gridFocusedVirtualCellSelector);
122
+ // We need it to trigger a new render, but rowsMeta needs access to the latest value, hence we cannot pass it to the focusedVirtualCell callback in the virtualizer params
123
+ (0, _utils.eslintUseValue)(focusedVirtualCell);
119
124
  const virtualizer = (0, _xVirtualizer.useVirtualizer)({
120
125
  refs: {
121
126
  container: apiRef.current.mainElementRef,
@@ -179,7 +184,7 @@ function useGridVirtualizer(apiRef, rootProps) {
179
184
  } : undefined, [apiRef, getRowSpacing, currentPage.rows, currentPage.rowIdToIndexMap]),
180
185
  applyRowHeight: (0, _useEventCallback.default)((entry, row) => apiRef.current.unstable_applyPipeProcessors('rowHeight', entry, row)),
181
186
  virtualizeColumnsWithAutoRowHeight: rootProps.virtualizeColumnsWithAutoRowHeight,
182
- focusedVirtualCell: (0, _useEventCallback.default)(() => focusedVirtualCell),
187
+ focusedVirtualCell: (0, _useEventCallback.default)(() => (0, _gridFocusedVirtualCellSelector.gridFocusedVirtualCellSelector)(apiRef)),
183
188
  resizeThrottleMs: rootProps.resizeThrottleMs,
184
189
  onResize: (0, _useEventCallback.default)(size => apiRef.current.publishEvent('resize', size)),
185
190
  onWheel: (0, _useEventCallback.default)(event => {
@@ -235,23 +240,33 @@ function useGridVirtualizer(apiRef, rootProps) {
235
240
  apiRef.current.store.state.virtualization = virtualizer.store.state.virtualization;
236
241
  });
237
242
  (0, _store.useStoreEffect)(virtualizer.store, _xVirtualizer.Dimensions.selectors.dimensions, (_, dimensions) => {
243
+ if (!dimensions.isReady) {
244
+ return;
245
+ }
238
246
  apiRef.current.setState(gridState => (0, _extends2.default)({}, gridState, {
239
247
  dimensions: addGridDimensions(dimensions, headerHeight, groupHeaderHeight, headerFilterHeight, headersTotalHeight)
240
248
  }));
241
249
  });
242
- (0, _store.useStoreEffect)(virtualizer.store, identity, (_, state) => {
243
- if (state.rowsMeta !== apiRef.current.state.rowsMeta) {
250
+ (0, _store.useStoreEffect)(virtualizer.store, _xVirtualizer.Dimensions.selectors.rowsMeta, (_, rowsMeta) => {
251
+ if (rowsMeta !== apiRef.current.state.rowsMeta) {
244
252
  apiRef.current.setState(gridState => (0, _extends2.default)({}, gridState, {
245
- rowsMeta: state.rowsMeta
253
+ rowsMeta
246
254
  }));
247
255
  }
248
- if (state.virtualization !== apiRef.current.state.virtualization) {
256
+ });
257
+ (0, _store.useStoreEffect)(virtualizer.store, _xVirtualizer.Virtualization.selectors.store, (_, virtualization) => {
258
+ if (virtualization.renderContext === _xVirtualizer.EMPTY_RENDER_CONTEXT) {
259
+ return;
260
+ }
261
+ if (virtualization !== apiRef.current.state.virtualization) {
249
262
  apiRef.current.setState(gridState => (0, _extends2.default)({}, gridState, {
250
- virtualization: state.virtualization
263
+ virtualization
251
264
  }));
252
265
  }
253
266
  });
254
267
  apiRef.current.register('private', {
255
268
  virtualizer
256
269
  });
270
+ (0, _useGridRowsMeta.useGridRowsMeta)(apiRef, rootProps);
271
+ return virtualizer;
257
272
  }
@@ -19,7 +19,9 @@ const columnGroupsStateInitializer = (state, props, apiRef) => {
19
19
  lastColumnGroupingModel: props.columnGroupingModel
20
20
  };
21
21
  if (!props.columnGroupingModel) {
22
- return state;
22
+ return (0, _extends2.default)({}, state, {
23
+ columnGrouping: undefined
24
+ });
23
25
  }
24
26
  const columnFields = (0, _columns.gridColumnFieldsSelector)(apiRef);
25
27
  const visibleColumnFields = (0, _columns.gridVisibleColumnFieldsSelector)(apiRef);
@@ -73,6 +75,9 @@ const useGridColumnGrouping = (apiRef, props) => {
73
75
  });
74
76
  }, [apiRef, props.columnGroupingModel]);
75
77
  const updateColumnGroupingState = React.useCallback(columnGroupingModel => {
78
+ if (!columnGroupingModel && !apiRef.current.caches.columnGrouping.lastColumnGroupingModel) {
79
+ return;
80
+ }
76
81
  apiRef.current.caches.columnGrouping.lastColumnGroupingModel = columnGroupingModel;
77
82
  // @ts-expect-error Move this logic to `Pro` package
78
83
  const pinnedColumns = apiRef.current.getPinnedColumns?.() ?? {};
@@ -24,6 +24,16 @@ const columnMenuStateInitializer = state => (0, _extends2.default)({}, state, {
24
24
  exports.columnMenuStateInitializer = columnMenuStateInitializer;
25
25
  const useGridColumnMenu = apiRef => {
26
26
  const logger = (0, _utils.useGridLogger)(apiRef, 'useGridColumnMenu');
27
+ const subscriptionRefs = React.useRef({});
28
+ const unsubscribeFromScrollChange = React.useCallback(() => {
29
+ subscriptionRefs.current.wheel?.();
30
+ subscriptionRefs.current.touchMove?.();
31
+ }, []);
32
+ const subscribeToScrollChange = React.useCallback(() => {
33
+ unsubscribeFromScrollChange();
34
+ subscriptionRefs.current.wheel = apiRef.current.subscribeEvent('virtualScrollerWheel', apiRef.current.hideColumnMenu);
35
+ subscriptionRefs.current.touchMove = apiRef.current.subscribeEvent('virtualScrollerTouchMove', apiRef.current.hideColumnMenu);
36
+ }, [apiRef, unsubscribeFromScrollChange]);
27
37
 
28
38
  /**
29
39
  * API METHODS
@@ -41,6 +51,7 @@ const useGridColumnMenu = apiRef => {
41
51
  return state;
42
52
  }
43
53
  logger.debug('Opening Column Menu');
54
+ subscribeToScrollChange();
44
55
  return (0, _extends2.default)({}, state, {
45
56
  columnMenu: {
46
57
  open: true,
@@ -50,7 +61,7 @@ const useGridColumnMenu = apiRef => {
50
61
  });
51
62
  apiRef.current.hidePreferences();
52
63
  }
53
- }, [apiRef, logger]);
64
+ }, [apiRef, logger, subscribeToScrollChange]);
54
65
  const hideColumnMenu = React.useCallback(() => {
55
66
  const columnMenuState = (0, _columnMenuSelector.gridColumnMenuSelector)(apiRef);
56
67
  if (columnMenuState.field) {
@@ -86,12 +97,13 @@ const useGridColumnMenu = apiRef => {
86
97
  if (shouldUpdate) {
87
98
  apiRef.current.setState(state => {
88
99
  logger.debug('Hiding Column Menu');
100
+ unsubscribeFromScrollChange();
89
101
  return (0, _extends2.default)({}, state, {
90
102
  columnMenu: newState
91
103
  });
92
104
  });
93
105
  }
94
- }, [apiRef, logger]);
106
+ }, [apiRef, logger, unsubscribeFromScrollChange]);
95
107
  const toggleColumnMenu = React.useCallback(field => {
96
108
  logger.debug('Toggle Column Menu');
97
109
  const columnMenu = (0, _columnMenuSelector.gridColumnMenuSelector)(apiRef);
@@ -108,7 +120,5 @@ const useGridColumnMenu = apiRef => {
108
120
  };
109
121
  (0, _utils.useGridApiMethod)(apiRef, columnMenuApi, 'public');
110
122
  (0, _utils.useGridEvent)(apiRef, 'columnResizeStart', hideColumnMenu);
111
- (0, _utils.useGridEvent)(apiRef, 'virtualScrollerWheel', apiRef.current.hideColumnMenu);
112
- (0, _utils.useGridEvent)(apiRef, 'virtualScrollerTouchMove', apiRef.current.hideColumnMenu);
113
123
  };
114
124
  exports.useGridColumnMenu = useGridColumnMenu;
@@ -11,10 +11,15 @@ var _useGridEvent = require("../../utils/useGridEvent");
11
11
  * @requires useGridParamsApi (method)
12
12
  */
13
13
  const useGridColumnSpanning = apiRef => {
14
- const virtualizer = apiRef.current.virtualizer;
15
- const resetColSpan = virtualizer.api.resetColSpan;
16
- const getCellColSpanInfo = virtualizer.api.getCellColSpanInfo;
17
- const calculateColSpan = virtualizer.api.calculateColSpan;
14
+ const resetColSpan = () => {
15
+ return apiRef.current.virtualizer.api.resetColSpan();
16
+ };
17
+ const getCellColSpanInfo = (...params) => {
18
+ return apiRef.current.virtualizer.api.getCellColSpanInfo(...params);
19
+ };
20
+ const calculateColSpan = (...params) => {
21
+ apiRef.current.virtualizer.api.calculateColSpan(...params);
22
+ };
18
23
  const columnSpanningPublicApi = {
19
24
  unstable_getCellColSpanInfo: getCellColSpanInfo
20
25
  };
@@ -52,8 +52,10 @@ const EMPTY_DIMENSIONS = {
52
52
  const dimensionsStateInitializer = (state, props, apiRef) => {
53
53
  const dimensions = EMPTY_DIMENSIONS;
54
54
  const density = (0, _density.gridDensityFactorSelector)(apiRef);
55
+ const dimensionsWithStatic = (0, _extends2.default)({}, dimensions, getStaticDimensions(props, apiRef, density, (0, _columns.gridVisiblePinnedColumnDefinitionsSelector)(apiRef)));
56
+ apiRef.current.store.state.dimensions = dimensionsWithStatic;
55
57
  return (0, _extends2.default)({}, state, {
56
- dimensions: (0, _extends2.default)({}, dimensions, getStaticDimensions(props, apiRef, density, (0, _columns.gridVisiblePinnedColumnDefinitionsSelector)(apiRef)))
58
+ dimensions: dimensionsWithStatic
57
59
  });
58
60
  };
59
61
  exports.dimensionsStateInitializer = dimensionsStateInitializer;
@@ -65,16 +67,17 @@ const columnsTotalWidthSelector = (0, _createSelector.createSelector)(_columns.g
65
67
  return (0, _roundToDecimalPlaces.roundToDecimalPlaces)(positions[colCount - 1] + visibleColumns[colCount - 1].computedWidth, 1);
66
68
  });
67
69
  function useGridDimensions(apiRef, props) {
68
- const virtualizer = apiRef.current.virtualizer;
69
- const updateDimensions = virtualizer.api.updateDimensions;
70
- const getViewportPageSize = virtualizer.api.getViewportPageSize;
71
70
  const getRootDimensions = React.useCallback(() => (0, _gridDimensionsSelectors.gridDimensionsSelector)(apiRef), [apiRef]);
72
71
  const apiPublic = {
73
72
  getRootDimensions
74
73
  };
75
74
  const apiPrivate = {
76
- updateDimensions,
77
- getViewportPageSize
75
+ updateDimensions: () => {
76
+ return apiRef.current.virtualizer.api.updateDimensions();
77
+ },
78
+ getViewportPageSize: () => {
79
+ return apiRef.current.virtualizer.api.getViewportPageSize();
80
+ }
78
81
  };
79
82
  (0, _useGridApiMethod.useGridApiMethod)(apiRef, apiPublic, 'public');
80
83
  (0, _useGridApiMethod.useGridApiMethod)(apiRef, apiPrivate, 'private');
@@ -103,6 +106,9 @@ function useGridDimensions(apiRef, props) {
103
106
  /* eslint-enable react-hooks/rules-of-hooks */
104
107
  }
105
108
  (0, _store.useStoreEffect)(apiRef.current.store, s => s.dimensions, (previous, next) => {
109
+ if (!next.isReady) {
110
+ return;
111
+ }
106
112
  if (apiRef.current.rootElementRef.current) {
107
113
  setCSSVariables(apiRef.current.rootElementRef.current, next);
108
114
  }
@@ -16,15 +16,15 @@ var _gridFilterSelector = require("../filter/gridFilterSelector");
16
16
  var _gridColumnsSelector = require("../columns/gridColumnsSelector");
17
17
  var _gridClasses = require("../../../constants/gridClasses");
18
18
  var _useGridApiMethod = require("../../utils/useGridApiMethod");
19
- var _gridRowsMetaSelector = require("../rows/gridRowsMetaSelector");
20
19
  var _gridRowsUtils = require("../rows/gridRowsUtils");
21
20
  var _utils = require("./utils");
22
21
  var _useGridPaginationModel = require("../pagination/useGridPaginationModel");
23
22
  var _pipeProcessing = require("../../core/pipeProcessing");
24
23
  var _toolbar = require("../../../components/toolbar");
25
- var _gridColumnsUtils = require("../columns/gridColumnsUtils");
26
24
  var _gridCheckboxSelectionColDef = require("../../../colDef/gridCheckboxSelectionColDef");
25
+ var _GridVirtualScrollbar = require("../../../components/virtualization/GridVirtualScrollbar");
27
26
  var _jsxRuntime = require("react/jsx-runtime");
27
+ const DEBUG_MODE = false;
28
28
  function raf() {
29
29
  return new Promise(resolve => {
30
30
  requestAnimationFrame(() => {
@@ -37,6 +37,10 @@ function buildPrintWindow(title) {
37
37
  iframeEl.style.position = 'absolute';
38
38
  iframeEl.style.width = '0px';
39
39
  iframeEl.style.height = '0px';
40
+ if (DEBUG_MODE) {
41
+ iframeEl.style.width = '100%';
42
+ iframeEl.style.height = '10000px';
43
+ }
40
44
  iframeEl.title = title || document.title;
41
45
  return iframeEl;
42
46
  }
@@ -104,40 +108,36 @@ const useGridPrintExport = (apiRef, props) => {
104
108
  if (!printDoc) {
105
109
  return;
106
110
  }
107
- const rowsMeta = (0, _gridRowsMetaSelector.gridRowsMetaSelector)(apiRef);
108
111
  const gridRootElement = apiRef.current.rootElementRef.current;
109
112
  const gridClone = gridRootElement.cloneNode(true);
113
+ const virtualScrollerContent = gridClone.querySelector(`.${_gridClasses.gridClasses.virtualScrollerContent}`);
110
114
 
111
115
  // Allow to overflow to not hide the border of the last row
112
116
  const gridMain = gridClone.querySelector(`.${_gridClasses.gridClasses.main}`);
113
117
  gridMain.style.overflow = 'visible';
114
-
115
- // See https://support.google.com/chrome/thread/191619088?hl=en&msgid=193009642
116
- gridClone.style.contain = 'size';
117
- let gridToolbarElementHeight = gridRootElement.querySelector(`.${_gridClasses.gridClasses.toolbar}`)?.offsetHeight || 0;
118
- let gridFooterElementHeight = gridRootElement.querySelector(`.${_gridClasses.gridClasses.footerContainer}`)?.offsetHeight || 0;
118
+ gridClone.querySelector(`.${_gridClasses.gridClasses.virtualScrollerRenderZone}`).style.position = 'static';
119
+ virtualScrollerContent.style.flexBasis = 'auto';
120
+ gridClone.querySelector(`.${_gridClasses.gridClasses['scrollbar--vertical']}`)?.remove();
121
+ if (!(virtualScrollerContent.nextSibling instanceof HTMLElement && virtualScrollerContent.nextSibling.classList.contains(_gridClasses.gridClasses.filler))) {
122
+ const filler = document.createElement('div');
123
+ filler.style.height = _GridVirtualScrollbar.scrollbarSizeCssExpression;
124
+ virtualScrollerContent.insertAdjacentElement('afterend', filler);
125
+ }
119
126
  const gridFooterElement = gridClone.querySelector(`.${_gridClasses.gridClasses.footerContainer}`);
120
127
  if (normalizeOptions.hideToolbar) {
121
128
  gridClone.querySelector(`.${_gridClasses.gridClasses.toolbar}`)?.remove();
122
- gridToolbarElementHeight = 0;
123
129
  }
124
130
  if (normalizeOptions.hideFooter && gridFooterElement) {
125
131
  gridFooterElement.remove();
126
- gridFooterElementHeight = 0;
127
132
  }
128
-
129
- // Expand container height to accommodate all rows
130
- const computedTotalHeight = rowsMeta.currentPageTotalHeight + (0, _gridColumnsUtils.getTotalHeaderHeight)(apiRef, props) + gridToolbarElementHeight + gridFooterElementHeight;
131
- gridClone.style.height = `${computedTotalHeight}px`;
133
+ gridClone.style.height = 'auto';
132
134
  // The height above does not include grid border width, so we need to exclude it
133
135
  gridClone.style.boxSizing = 'content-box';
134
136
  if (!normalizeOptions.hideFooter && gridFooterElement) {
135
137
  // the footer is always being placed at the bottom of the page as if all rows are exported
136
138
  // so if getRowsToExport is being used to only export a subset of rows then we need to
137
139
  // adjust the footer position to be correctly placed at the bottom of the grid
138
- gridFooterElement.style.position = 'absolute';
139
140
  gridFooterElement.style.width = '100%';
140
- gridFooterElement.style.top = `${computedTotalHeight - gridFooterElementHeight}px`;
141
141
  }
142
142
 
143
143
  // printDoc.body.appendChild(gridClone); should be enough but a clone isolation bug in Safari
@@ -165,13 +165,13 @@ const useGridPrintExport = (apiRef, props) => {
165
165
  }
166
166
 
167
167
  // Trigger print
168
- if (process.env.NODE_ENV !== 'test') {
168
+ if (process.env.NODE_ENV !== 'test' && !DEBUG_MODE) {
169
169
  // wait for remote stylesheets to load
170
170
  Promise.all(stylesheetLoadPromises).then(() => {
171
171
  printWindow.contentWindow.print();
172
172
  });
173
173
  }
174
- }, [apiRef, doc, props]);
174
+ }, [apiRef, doc]);
175
175
  const handlePrintWindowAfterPrint = React.useCallback(printWindow => {
176
176
  // Remove the print iframe
177
177
  doc.current.body.removeChild(printWindow);
@@ -9,4 +9,4 @@ export declare const filterStateInitializer: GridStateInitializer<Pick<DataGridP
9
9
  * @requires useGridParamsApi (method)
10
10
  * @requires useGridRows (event)
11
11
  */
12
- export declare const useGridFilter: (apiRef: RefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, "rows" | "initialState" | "filterModel" | "getRowId" | "onFilterModelChange" | "filterMode" | "disableMultipleColumnsFiltering" | "slots" | "slotProps" | "disableColumnFilter" | "disableEval" | "ignoreDiacritics">, configuration: GridConfiguration) => void;
12
+ export declare const useGridFilter: (apiRef: RefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, "rows" | "initialState" | "filterModel" | "getRowId" | "onFilterModelChange" | "filterMode" | "disableMultipleColumnsFiltering" | "slots" | "slotProps" | "disableColumnFilter" | "disableEval" | "ignoreDiacritics" | "signature">, configuration: GridConfiguration) => void;
@@ -363,7 +363,9 @@ const useGridFilter = (apiRef, props, configuration) => {
363
363
  * 1ST RENDER
364
364
  */
365
365
  (0, _useFirstRender.useFirstRender)(() => {
366
- updateFilteredRows();
366
+ if (props.signature === 'DataGrid') {
367
+ updateFilteredRows();
368
+ }
367
369
  });
368
370
 
369
371
  /**
@@ -232,7 +232,6 @@ const useGridFocus = (apiRef, props) => {
232
232
  apiRef.current.setCellFocus(id, field);
233
233
  }, [apiRef]);
234
234
  const handleCellKeyDown = React.useCallback((params, event) => {
235
- // GRID_CELL_NAVIGATION_KEY_DOWN handles the focus on Enter, Tab and navigation keys
236
235
  if (event.key === 'Enter' || event.key === 'Tab' || event.key === 'Shift' || (0, _keyboardUtils.isNavigationKey)(event.key)) {
237
236
  return;
238
237
  }
@@ -10,4 +10,4 @@ import { DataGridProcessedProps } from "../../../models/props/DataGridProps.js";
10
10
  * @requires useGridScroll (method) - can be after
11
11
  * @requires useGridColumnSpanning (method) - can be after
12
12
  */
13
- export declare const useGridKeyboardNavigation: (apiRef: RefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, "pagination" | "paginationMode" | "getRowId" | "signature" | "headerFilters">) => void;
13
+ export declare const useGridKeyboardNavigation: (apiRef: RefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, "pagination" | "paginationMode" | "getRowId" | "signature" | "headerFilters" | "tabNavigation">) => void;