@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.
- package/CHANGELOG.md +213 -0
- package/DataGrid/useDataGridComponent.js +4 -3
- package/components/GridRow.js +1 -1
- package/components/cell/GridActionsCell.d.ts +9 -0
- package/components/cell/GridActionsCell.js +54 -36
- package/components/cell/GridActionsCellItem.js +0 -4
- package/components/cell/GridBooleanCell.js +0 -10
- package/components/cell/GridCell.js +4 -10
- package/components/columnHeaders/GridColumnHeaderItem.js +2 -2
- package/components/columnSelection/GridCellCheckboxRenderer.js +37 -22
- package/components/containers/GridRootStyles.js +1 -1
- package/components/toolbarV8/Toolbar.js +1 -1
- package/components/virtualization/GridVirtualScrollbar.d.ts +1 -0
- package/components/virtualization/GridVirtualScrollbar.js +13 -8
- package/components/virtualization/GridVirtualScroller.js +2 -1
- package/components/virtualization/GridVirtualScrollerRenderZone.js +1 -1
- package/constants/dataGridPropsDefaultValues.js +2 -1
- package/esm/DataGrid/useDataGridComponent.js +5 -4
- package/esm/components/GridRow.js +1 -1
- package/esm/components/cell/GridActionsCell.d.ts +9 -0
- package/esm/components/cell/GridActionsCell.js +55 -36
- package/esm/components/cell/GridActionsCellItem.js +0 -4
- package/esm/components/cell/GridBooleanCell.js +0 -10
- package/esm/components/cell/GridCell.js +4 -10
- package/esm/components/columnHeaders/GridColumnHeaderItem.js +2 -2
- package/esm/components/columnSelection/GridCellCheckboxRenderer.js +37 -22
- package/esm/components/containers/GridRootStyles.js +1 -1
- package/esm/components/toolbarV8/Toolbar.js +1 -1
- package/esm/components/virtualization/GridVirtualScrollbar.d.ts +1 -0
- package/esm/components/virtualization/GridVirtualScrollbar.js +12 -7
- package/esm/components/virtualization/GridVirtualScroller.js +2 -1
- package/esm/components/virtualization/GridVirtualScrollerRenderZone.js +1 -1
- package/esm/constants/dataGridPropsDefaultValues.js +2 -1
- package/esm/hooks/core/gridPropsSelectors.d.ts +2 -1
- package/esm/hooks/core/gridPropsSelectors.js +3 -0
- package/esm/hooks/core/useGridProps.js +8 -2
- package/esm/hooks/core/useGridVirtualizer.d.ts +80 -6
- package/esm/hooks/core/useGridVirtualizer.js +27 -12
- package/esm/hooks/features/columnGrouping/useGridColumnGrouping.js +6 -1
- package/esm/hooks/features/columnMenu/useGridColumnMenu.js +14 -4
- package/esm/hooks/features/columns/useGridColumnSpanning.js +9 -4
- package/esm/hooks/features/dimensions/useGridDimensions.js +12 -6
- package/esm/hooks/features/export/useGridPrintExport.js +18 -18
- package/esm/hooks/features/filter/useGridFilter.d.ts +1 -1
- package/esm/hooks/features/filter/useGridFilter.js +3 -1
- package/esm/hooks/features/focus/useGridFocus.js +0 -1
- package/esm/hooks/features/keyboardNavigation/useGridKeyboardNavigation.d.ts +1 -1
- package/esm/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +189 -25
- package/esm/hooks/features/pagination/useGridPaginationMeta.js +3 -3
- package/esm/hooks/features/pagination/useGridPaginationModel.js +7 -4
- package/esm/hooks/features/pagination/useGridRowCount.js +31 -15
- package/esm/hooks/features/rowSelection/useGridRowSelection.js +8 -7
- package/esm/hooks/features/rowSelection/utils.d.ts +1 -0
- package/esm/hooks/features/rowSelection/utils.js +17 -4
- package/esm/hooks/features/rows/gridRowSpanningUtils.js +8 -5
- package/esm/hooks/features/rows/useGridParamsApi.js +2 -12
- package/esm/hooks/features/rows/useGridRowSpanning.js +23 -60
- package/esm/hooks/features/scroll/useGridScroll.js +2 -3
- package/esm/hooks/features/sorting/useGridSorting.d.ts +1 -1
- package/esm/hooks/features/sorting/useGridSorting.js +3 -1
- package/esm/hooks/features/virtualization/useGridVirtualization.js +24 -5
- package/esm/hooks/utils/useGridApiRef.d.ts +1 -2
- package/esm/hooks/utils/useGridEvent.js +6 -2
- package/esm/hooks/utils/useRunOncePerLoop.d.ts +4 -1
- package/esm/hooks/utils/useRunOncePerLoop.js +28 -18
- package/esm/index.js +1 -1
- package/esm/models/colDef/gridColDef.d.ts +14 -0
- package/esm/models/events/gridEventLookup.d.ts +5 -0
- package/esm/models/gridStateCommunity.d.ts +1 -1
- package/esm/models/params/gridCellParams.d.ts +0 -10
- package/esm/models/props/DataGridProps.d.ts +13 -6
- package/esm/utils/keyboardUtils.d.ts +1 -8
- package/esm/utils/keyboardUtils.js +0 -7
- package/hooks/core/gridPropsSelectors.d.ts +2 -1
- package/hooks/core/gridPropsSelectors.js +4 -1
- package/hooks/core/useGridProps.js +8 -2
- package/hooks/core/useGridVirtualizer.d.ts +80 -6
- package/hooks/core/useGridVirtualizer.js +26 -11
- package/hooks/features/columnGrouping/useGridColumnGrouping.js +6 -1
- package/hooks/features/columnMenu/useGridColumnMenu.js +14 -4
- package/hooks/features/columns/useGridColumnSpanning.js +9 -4
- package/hooks/features/dimensions/useGridDimensions.js +12 -6
- package/hooks/features/export/useGridPrintExport.js +18 -18
- package/hooks/features/filter/useGridFilter.d.ts +1 -1
- package/hooks/features/filter/useGridFilter.js +3 -1
- package/hooks/features/focus/useGridFocus.js +0 -1
- package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.d.ts +1 -1
- package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +189 -25
- package/hooks/features/pagination/useGridPaginationMeta.js +2 -2
- package/hooks/features/pagination/useGridPaginationModel.js +7 -4
- package/hooks/features/pagination/useGridRowCount.js +30 -14
- package/hooks/features/rowSelection/useGridRowSelection.js +8 -7
- package/hooks/features/rowSelection/utils.d.ts +1 -0
- package/hooks/features/rowSelection/utils.js +16 -3
- package/hooks/features/rows/gridRowSpanningUtils.js +8 -5
- package/hooks/features/rows/useGridParamsApi.js +2 -12
- package/hooks/features/rows/useGridRowSpanning.js +23 -60
- package/hooks/features/scroll/useGridScroll.js +2 -3
- package/hooks/features/sorting/useGridSorting.d.ts +1 -1
- package/hooks/features/sorting/useGridSorting.js +3 -1
- package/hooks/features/virtualization/useGridVirtualization.js +24 -5
- package/hooks/utils/useGridApiRef.d.ts +1 -2
- package/hooks/utils/useGridEvent.js +6 -2
- package/hooks/utils/useRunOncePerLoop.d.ts +4 -1
- package/hooks/utils/useRunOncePerLoop.js +27 -18
- package/index.js +1 -1
- package/models/colDef/gridColDef.d.ts +14 -0
- package/models/events/gridEventLookup.d.ts +5 -0
- package/models/gridStateCommunity.d.ts +1 -1
- package/models/params/gridCellParams.d.ts +0 -10
- package/models/props/DataGridProps.d.ts +13 -6
- package/package.json +4 -4
- package/utils/keyboardUtils.d.ts +1 -8
- package/utils/keyboardUtils.js +1 -13
|
@@ -1,9 +1,83 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
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(
|
|
9
|
-
|
|
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(
|
|
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)(() =>
|
|
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,
|
|
243
|
-
if (
|
|
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
|
|
253
|
+
rowsMeta
|
|
246
254
|
}));
|
|
247
255
|
}
|
|
248
|
-
|
|
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
|
|
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
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
116
|
-
gridClone.
|
|
117
|
-
|
|
118
|
-
|
|
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
|
|
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
|
-
|
|
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;
|