@mui/x-data-grid 5.8.0 → 5.9.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 +141 -63
- package/DataGrid/DataGrid.js +1 -1
- package/DataGrid/useDataGridComponent.js +3 -1
- package/LICENSE +21 -0
- package/README.md +1 -1
- package/components/GridRow.d.ts +4 -0
- package/components/GridRow.js +49 -23
- package/components/base/GridOverlays.js +4 -3
- package/components/cell/GridActionsCell.d.ts +5 -1
- package/components/cell/GridActionsCell.js +170 -21
- package/components/cell/GridActionsCellItem.d.ts +66 -4
- package/components/cell/GridActionsCellItem.js +7 -5
- package/components/cell/GridCell.d.ts +1 -0
- package/components/cell/GridCell.js +28 -7
- package/components/cell/GridEditInputCell.js +1 -1
- package/components/cell/GridEditSingleSelectCell.js +22 -13
- package/components/columnHeaders/GridColumnHeaderItem.js +4 -7
- package/components/columnHeaders/GridColumnHeaders.d.ts +0 -1
- package/components/columnHeaders/GridColumnHeaders.js +1 -1
- package/components/columnSelection/GridCellCheckboxRenderer.d.ts +3 -3
- package/components/columnSelection/GridCellCheckboxRenderer.js +20 -3
- package/components/panel/GridPanel.js +1 -0
- package/components/panel/filterPanel/GridFilterForm.js +14 -10
- package/components/panel/filterPanel/GridFilterInputBoolean.js +13 -8
- package/components/panel/filterPanel/GridFilterInputSingleSelect.js +22 -15
- package/components/panel/filterPanel/GridFilterInputValue.js +22 -15
- package/components/toolbar/GridToolbarDensitySelector.js +1 -1
- package/components/toolbar/GridToolbarFilterButton.d.ts +1 -1
- package/components/virtualization/GridVirtualScroller.js +2 -0
- package/components/virtualization/GridVirtualScrollerContent.js +1 -3
- package/constants/gridDetailPanelToggleField.d.ts +1 -0
- package/constants/gridDetailPanelToggleField.js +2 -0
- package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +32 -15
- package/hooks/core/pipeProcessing/index.d.ts +1 -0
- package/hooks/core/pipeProcessing/index.js +2 -1
- package/hooks/core/pipeProcessing/useGridPipeProcessing.d.ts +8 -3
- package/hooks/core/pipeProcessing/useGridPipeProcessing.js +53 -19
- package/hooks/core/pipeProcessing/useGridRegisterPipeApplier.d.ts +3 -0
- package/hooks/core/pipeProcessing/useGridRegisterPipeApplier.js +27 -0
- package/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.d.ts +0 -3
- package/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +0 -4
- package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +0 -1
- package/hooks/features/columnHeaders/useGridColumnHeaders.js +76 -10
- package/hooks/features/columns/gridColumnsInterfaces.d.ts +3 -1
- package/hooks/features/columns/gridColumnsUtils.d.ts +19 -1
- package/hooks/features/columns/gridColumnsUtils.js +61 -8
- package/hooks/features/columns/useGridColumnSpanning.d.ts +7 -0
- package/hooks/features/columns/useGridColumnSpanning.js +109 -0
- package/hooks/features/columns/useGridColumns.js +24 -18
- package/hooks/features/dimensions/useGridDimensions.js +3 -3
- package/hooks/features/editRows/useGridCellEditing.new.js +18 -10
- package/hooks/features/editRows/useGridEditing.new.js +7 -3
- package/hooks/features/editRows/useGridRowEditing.new.js +23 -15
- package/hooks/features/filter/useGridFilter.js +14 -9
- package/hooks/features/focus/useGridFocus.js +19 -9
- package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.d.ts +1 -0
- package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +39 -7
- package/hooks/features/rows/gridRowsSelector.d.ts +1 -0
- package/hooks/features/rows/gridRowsSelector.js +1 -0
- package/hooks/features/rows/gridRowsState.d.ts +4 -0
- package/hooks/features/rows/useGridRows.d.ts +2 -2
- package/hooks/features/rows/useGridRows.js +5 -4
- package/hooks/features/rows/useGridRowsMeta.js +6 -13
- package/hooks/features/scroll/useGridScroll.d.ts +2 -0
- package/hooks/features/scroll/useGridScroll.js +25 -3
- package/hooks/features/selection/useGridSelection.js +3 -2
- package/hooks/features/sorting/useGridSorting.js +10 -10
- package/hooks/features/virtualization/useGridVirtualScroller.d.ts +7 -0
- package/hooks/features/virtualization/useGridVirtualScroller.js +54 -27
- package/index.js +1 -1
- package/internals/index.d.ts +1 -0
- package/internals/index.js +1 -0
- package/legacy/DataGrid/DataGrid.js +1 -1
- package/legacy/DataGrid/useDataGridComponent.js +3 -1
- package/legacy/components/GridRow.js +47 -23
- package/legacy/components/base/GridOverlays.js +4 -3
- package/legacy/components/cell/GridActionsCell.js +188 -27
- package/legacy/components/cell/GridActionsCellItem.js +7 -5
- package/legacy/components/cell/GridCell.js +29 -7
- package/legacy/components/cell/GridEditInputCell.js +1 -1
- package/legacy/components/cell/GridEditSingleSelectCell.js +33 -24
- package/legacy/components/columnHeaders/GridColumnHeaderItem.js +4 -7
- package/legacy/components/columnHeaders/GridColumnHeaders.js +2 -3
- package/legacy/components/columnSelection/GridCellCheckboxRenderer.js +21 -3
- package/legacy/components/panel/GridPanel.js +1 -0
- package/legacy/components/panel/filterPanel/GridFilterForm.js +14 -10
- package/legacy/components/panel/filterPanel/GridFilterInputBoolean.js +13 -8
- package/legacy/components/panel/filterPanel/GridFilterInputSingleSelect.js +22 -17
- package/legacy/components/panel/filterPanel/GridFilterInputValue.js +22 -17
- package/legacy/components/toolbar/GridToolbarDensitySelector.js +1 -1
- package/legacy/components/virtualization/GridVirtualScroller.js +2 -0
- package/legacy/components/virtualization/GridVirtualScrollerContent.js +1 -3
- package/legacy/constants/gridDetailPanelToggleField.js +2 -0
- package/legacy/hooks/core/pipeProcessing/index.js +2 -1
- package/legacy/hooks/core/pipeProcessing/useGridPipeProcessing.js +60 -24
- package/legacy/hooks/core/pipeProcessing/useGridRegisterPipeApplier.js +27 -0
- package/legacy/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +0 -4
- package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +89 -10
- package/legacy/hooks/features/columns/gridColumnsUtils.js +79 -22
- package/legacy/hooks/features/columns/useGridColumnSpanning.js +107 -0
- package/legacy/hooks/features/columns/useGridColumns.js +24 -18
- package/legacy/hooks/features/dimensions/useGridDimensions.js +3 -3
- package/legacy/hooks/features/editRows/useGridCellEditing.new.js +14 -8
- package/legacy/hooks/features/editRows/useGridEditing.new.js +7 -3
- package/legacy/hooks/features/editRows/useGridRowEditing.new.js +32 -24
- package/legacy/hooks/features/filter/useGridFilter.js +14 -9
- package/legacy/hooks/features/focus/useGridFocus.js +19 -9
- package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +39 -6
- package/legacy/hooks/features/rows/gridRowsSelector.js +3 -0
- package/legacy/hooks/features/rows/useGridRows.js +5 -4
- package/legacy/hooks/features/rows/useGridRowsMeta.js +6 -13
- package/legacy/hooks/features/scroll/useGridScroll.js +25 -3
- package/legacy/hooks/features/selection/useGridSelection.js +3 -2
- package/legacy/hooks/features/sorting/useGridSorting.js +5 -7
- package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +65 -37
- package/legacy/index.js +1 -1
- package/legacy/internals/index.js +1 -0
- package/legacy/locales/huHU.js +120 -0
- package/legacy/locales/index.js +1 -0
- package/legacy/models/api/gridColumnSpanning.js +1 -0
- package/legacy/models/events/gridEvents.js +2 -3
- package/legacy/models/gridColumnSpanning.js +1 -0
- package/locales/huHU.d.ts +2 -0
- package/locales/huHU.js +108 -0
- package/locales/index.d.ts +1 -0
- package/locales/index.js +1 -0
- package/models/api/gridApiCommon.d.ts +2 -1
- package/models/api/gridColumnSpanning.d.ts +28 -0
- package/models/api/gridColumnSpanning.js +1 -0
- package/models/api/gridEditingApi.d.ts +49 -3
- package/models/colDef/gridColDef.d.ts +5 -0
- package/models/events/gridEventLookup.d.ts +3 -8
- package/models/events/gridEvents.d.ts +9 -14
- package/models/events/gridEvents.js +2 -3
- package/models/gridColumnSpanning.d.ts +12 -0
- package/models/gridColumnSpanning.js +1 -0
- package/models/gridEditRowModel.d.ts +1 -1
- package/models/params/gridCellParams.d.ts +12 -2
- package/models/params/gridRowParams.d.ts +5 -0
- package/models/props/DataGridProps.d.ts +1 -1
- package/modern/DataGrid/DataGrid.js +1 -1
- package/modern/DataGrid/useDataGridComponent.js +3 -1
- package/modern/components/GridRow.js +47 -21
- package/modern/components/base/GridOverlays.js +4 -3
- package/modern/components/cell/GridActionsCell.js +168 -21
- package/modern/components/cell/GridActionsCellItem.js +7 -5
- package/modern/components/cell/GridCell.js +28 -7
- package/modern/components/cell/GridEditInputCell.js +1 -1
- package/modern/components/cell/GridEditSingleSelectCell.js +20 -11
- package/modern/components/columnHeaders/GridColumnHeaderItem.js +4 -7
- package/modern/components/columnHeaders/GridColumnHeaders.js +1 -1
- package/modern/components/columnSelection/GridCellCheckboxRenderer.js +20 -3
- package/modern/components/panel/GridPanel.js +1 -0
- package/modern/components/panel/filterPanel/GridFilterForm.js +10 -6
- package/modern/components/panel/filterPanel/GridFilterInputBoolean.js +11 -6
- package/modern/components/panel/filterPanel/GridFilterInputSingleSelect.js +20 -13
- package/modern/components/panel/filterPanel/GridFilterInputValue.js +20 -13
- package/modern/components/toolbar/GridToolbarDensitySelector.js +1 -1
- package/modern/components/virtualization/GridVirtualScroller.js +2 -0
- package/modern/components/virtualization/GridVirtualScrollerContent.js +1 -3
- package/modern/constants/gridDetailPanelToggleField.js +2 -0
- package/modern/hooks/core/pipeProcessing/index.js +2 -1
- package/modern/hooks/core/pipeProcessing/useGridPipeProcessing.js +53 -19
- package/modern/hooks/core/pipeProcessing/useGridRegisterPipeApplier.js +27 -0
- package/modern/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +0 -4
- package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +76 -10
- package/modern/hooks/features/columns/gridColumnsUtils.js +61 -8
- package/modern/hooks/features/columns/useGridColumnSpanning.js +107 -0
- package/modern/hooks/features/columns/useGridColumns.js +24 -18
- package/modern/hooks/features/dimensions/useGridDimensions.js +3 -3
- package/modern/hooks/features/editRows/useGridCellEditing.new.js +18 -10
- package/modern/hooks/features/editRows/useGridEditing.new.js +7 -3
- package/modern/hooks/features/editRows/useGridRowEditing.new.js +23 -15
- package/modern/hooks/features/filter/useGridFilter.js +14 -9
- package/modern/hooks/features/focus/useGridFocus.js +19 -9
- package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +37 -7
- package/modern/hooks/features/rows/gridRowsSelector.js +1 -0
- package/modern/hooks/features/rows/useGridRows.js +5 -4
- package/modern/hooks/features/rows/useGridRowsMeta.js +6 -13
- package/modern/hooks/features/scroll/useGridScroll.js +23 -3
- package/modern/hooks/features/selection/useGridSelection.js +3 -2
- package/modern/hooks/features/sorting/useGridSorting.js +10 -10
- package/modern/hooks/features/virtualization/useGridVirtualScroller.js +54 -23
- package/modern/index.js +1 -1
- package/modern/internals/index.js +1 -0
- package/modern/locales/huHU.js +108 -0
- package/modern/locales/index.js +1 -0
- package/modern/models/api/gridColumnSpanning.js +1 -0
- package/modern/models/events/gridEvents.js +2 -3
- package/modern/models/gridColumnSpanning.js +1 -0
- package/node/DataGrid/DataGrid.js +1 -1
- package/node/DataGrid/useDataGridComponent.js +4 -1
- package/node/components/GridRow.js +50 -23
- package/node/components/base/GridOverlays.js +3 -2
- package/node/components/cell/GridActionsCell.js +172 -21
- package/node/components/cell/GridActionsCellItem.js +7 -4
- package/node/components/cell/GridCell.js +28 -7
- package/node/components/cell/GridEditInputCell.js +1 -1
- package/node/components/cell/GridEditSingleSelectCell.js +23 -13
- package/node/components/columnHeaders/GridColumnHeaderItem.js +4 -7
- package/node/components/columnHeaders/GridColumnHeaders.js +1 -1
- package/node/components/columnSelection/GridCellCheckboxRenderer.js +20 -3
- package/node/components/panel/GridPanel.js +1 -0
- package/node/components/panel/filterPanel/GridFilterForm.js +15 -10
- package/node/components/panel/filterPanel/GridFilterInputBoolean.js +14 -8
- package/node/components/panel/filterPanel/GridFilterInputSingleSelect.js +23 -15
- package/node/components/panel/filterPanel/GridFilterInputValue.js +23 -15
- package/node/components/toolbar/GridToolbarDensitySelector.js +1 -1
- package/node/components/virtualization/GridVirtualScroller.js +2 -0
- package/node/components/virtualization/GridVirtualScrollerContent.js +1 -3
- package/node/constants/gridDetailPanelToggleField.js +9 -0
- package/node/hooks/core/pipeProcessing/index.js +13 -0
- package/node/hooks/core/pipeProcessing/useGridPipeProcessing.js +51 -20
- package/node/hooks/core/pipeProcessing/useGridRegisterPipeApplier.js +42 -0
- package/node/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +0 -3
- package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +80 -10
- package/node/hooks/features/columns/gridColumnsUtils.js +65 -9
- package/node/hooks/features/columns/useGridColumnSpanning.js +130 -0
- package/node/hooks/features/columns/useGridColumns.js +23 -17
- package/node/hooks/features/dimensions/useGridDimensions.js +3 -3
- package/node/hooks/features/editRows/useGridCellEditing.new.js +18 -10
- package/node/hooks/features/editRows/useGridEditing.new.js +6 -2
- package/node/hooks/features/editRows/useGridRowEditing.new.js +21 -14
- package/node/hooks/features/filter/useGridFilter.js +14 -9
- package/node/hooks/features/focus/useGridFocus.js +19 -9
- package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +40 -7
- package/node/hooks/features/rows/gridRowsSelector.js +3 -1
- package/node/hooks/features/rows/useGridRows.js +5 -4
- package/node/hooks/features/rows/useGridRowsMeta.js +6 -14
- package/node/hooks/features/scroll/useGridScroll.js +26 -2
- package/node/hooks/features/selection/useGridSelection.js +4 -2
- package/node/hooks/features/sorting/useGridSorting.js +10 -10
- package/node/hooks/features/virtualization/useGridVirtualScroller.js +59 -27
- package/node/index.js +1 -1
- package/node/internals/index.js +8 -0
- package/node/locales/huHU.js +118 -0
- package/node/locales/index.js +13 -0
- package/node/models/api/gridColumnSpanning.js +5 -0
- package/node/models/events/gridEvents.js +2 -3
- package/node/models/gridColumnSpanning.js +5 -0
- package/package.json +4 -4
- package/utils/domUtils.d.ts +2 -2
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
3
3
|
import * as React from 'react';
|
|
4
|
+
import * as ReactDOM from 'react-dom';
|
|
4
5
|
import { useForkRef } from '@mui/material/utils';
|
|
6
|
+
import { defaultMemoize } from 'reselect';
|
|
5
7
|
import { useGridApiContext } from '../../utils/useGridApiContext';
|
|
6
8
|
import { useGridSelector } from '../../utils/useGridSelector';
|
|
7
9
|
import { gridVisibleColumnDefinitionsSelector, gridColumnPositionsSelector } from '../columns/gridColumnsSelector';
|
|
@@ -14,7 +16,15 @@ import { useGridRootProps } from '../../utils/useGridRootProps';
|
|
|
14
16
|
import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
|
|
15
17
|
import { GridEvents } from '../../../models/events';
|
|
16
18
|
import { GridColumnHeaderItem } from '../../../components/columnHeaders/GridColumnHeaderItem';
|
|
19
|
+
import { getFirstColumnIndexToRender } from '../columns/gridColumnsUtils';
|
|
20
|
+
import { useGridVisibleRows } from '../../utils/useGridVisibleRows';
|
|
21
|
+
import { getRenderableIndexes } from '../virtualization/useGridVirtualScroller';
|
|
17
22
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
23
|
+
|
|
24
|
+
function isUIEvent(event) {
|
|
25
|
+
return !!event.target;
|
|
26
|
+
}
|
|
27
|
+
|
|
18
28
|
export var useGridColumnHeaders = function useGridColumnHeaders(props) {
|
|
19
29
|
var innerRefProp = props.innerRef,
|
|
20
30
|
_props$minColumnIndex = props.minColumnIndex,
|
|
@@ -51,15 +61,48 @@ export var useGridColumnHeaders = function useGridColumnHeaders(props) {
|
|
|
51
61
|
|
|
52
62
|
var prevRenderContext = React.useRef(renderContext);
|
|
53
63
|
var prevScrollLeft = React.useRef(0);
|
|
64
|
+
var currentPage = useGridVisibleRows(apiRef, rootProps);
|
|
54
65
|
React.useEffect(function () {
|
|
55
66
|
apiRef.current.columnHeadersContainerElementRef.current.scrollLeft = 0;
|
|
56
|
-
}, [apiRef]);
|
|
67
|
+
}, [apiRef]); // memoize `getFirstColumnIndexToRender`, since it's called on scroll
|
|
68
|
+
|
|
69
|
+
var getFirstColumnIndexToRenderRef = React.useRef(defaultMemoize(getFirstColumnIndexToRender, {
|
|
70
|
+
equalityCheck: function equalityCheck(a, b) {
|
|
71
|
+
return ['firstColumnIndex', 'minColumnIndex', 'columnBuffer'].every(function (key) {
|
|
72
|
+
return a[key] === b[key];
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}));
|
|
57
76
|
var updateInnerPosition = React.useCallback(function (nextRenderContext) {
|
|
58
|
-
var
|
|
77
|
+
var _getRenderableIndexes = getRenderableIndexes({
|
|
78
|
+
firstIndex: nextRenderContext.firstRowIndex,
|
|
79
|
+
lastIndex: nextRenderContext.lastRowIndex,
|
|
80
|
+
minFirstIndex: 0,
|
|
81
|
+
maxLastIndex: currentPage.rows.length,
|
|
82
|
+
buffer: rootProps.rowBuffer
|
|
83
|
+
}),
|
|
84
|
+
_getRenderableIndexes2 = _slicedToArray(_getRenderableIndexes, 2),
|
|
85
|
+
firstRowToRender = _getRenderableIndexes2[0],
|
|
86
|
+
lastRowToRender = _getRenderableIndexes2[1];
|
|
87
|
+
|
|
88
|
+
var firstColumnToRender = getFirstColumnIndexToRenderRef.current({
|
|
89
|
+
firstColumnIndex: nextRenderContext.firstColumnIndex,
|
|
90
|
+
minColumnIndex: minColumnIndex,
|
|
91
|
+
columnBuffer: rootProps.columnBuffer,
|
|
92
|
+
firstRowToRender: firstRowToRender,
|
|
93
|
+
lastRowToRender: lastRowToRender,
|
|
94
|
+
apiRef: apiRef,
|
|
95
|
+
visibleRows: currentPage.rows
|
|
96
|
+
});
|
|
59
97
|
var offset = firstColumnToRender > 0 ? prevScrollLeft.current - columnPositions[firstColumnToRender] : prevScrollLeft.current;
|
|
60
98
|
innerRef.current.style.transform = "translate3d(".concat(-offset, "px, 0px, 0px)");
|
|
61
|
-
}, [columnPositions, minColumnIndex, rootProps.columnBuffer]);
|
|
62
|
-
|
|
99
|
+
}, [columnPositions, minColumnIndex, rootProps.columnBuffer, apiRef, currentPage.rows, rootProps.rowBuffer]);
|
|
100
|
+
React.useLayoutEffect(function () {
|
|
101
|
+
if (renderContext) {
|
|
102
|
+
updateInnerPosition(renderContext);
|
|
103
|
+
}
|
|
104
|
+
}, [renderContext, updateInnerPosition]);
|
|
105
|
+
var handleScroll = React.useCallback(function (_ref, event) {
|
|
63
106
|
var _prevRenderContext$cu, _prevRenderContext$cu2;
|
|
64
107
|
|
|
65
108
|
var left = _ref.left,
|
|
@@ -76,15 +119,32 @@ export var useGridColumnHeaders = function useGridColumnHeaders(props) {
|
|
|
76
119
|
return;
|
|
77
120
|
}
|
|
78
121
|
|
|
79
|
-
prevScrollLeft.current = left;
|
|
122
|
+
prevScrollLeft.current = left; // We can only update the position when we guarantee that the render context has been
|
|
123
|
+
// rendered. This is achieved using ReactDOM.flushSync or when the context doesn't change.
|
|
124
|
+
|
|
125
|
+
var canUpdateInnerPosition = false;
|
|
80
126
|
|
|
81
127
|
if (nextRenderContext !== prevRenderContext.current || !prevRenderContext.current) {
|
|
82
|
-
|
|
128
|
+
// ReactDOM.flushSync cannot be called on `scroll` events fired inside effects
|
|
129
|
+
if (isUIEvent(event)) {
|
|
130
|
+
// To prevent flickering, the inner position can only be updated after the new context has
|
|
131
|
+
// been rendered. ReactDOM.flushSync ensures that the state changes will happen before
|
|
132
|
+
// updating the position.
|
|
133
|
+
ReactDOM.flushSync(function () {
|
|
134
|
+
setRenderContext(nextRenderContext);
|
|
135
|
+
});
|
|
136
|
+
canUpdateInnerPosition = true;
|
|
137
|
+
} else {
|
|
138
|
+
setRenderContext(nextRenderContext);
|
|
139
|
+
}
|
|
140
|
+
|
|
83
141
|
prevRenderContext.current = nextRenderContext;
|
|
142
|
+
} else {
|
|
143
|
+
canUpdateInnerPosition = true;
|
|
84
144
|
} // Pass directly the render context to avoid waiting for the next render
|
|
85
145
|
|
|
86
146
|
|
|
87
|
-
if (nextRenderContext) {
|
|
147
|
+
if (nextRenderContext && canUpdateInnerPosition) {
|
|
88
148
|
updateInnerPosition(nextRenderContext);
|
|
89
149
|
}
|
|
90
150
|
}, [updateInnerPosition]);
|
|
@@ -122,7 +182,27 @@ export var useGridColumnHeaders = function useGridColumnHeaders(props) {
|
|
|
122
182
|
}
|
|
123
183
|
|
|
124
184
|
var columns = [];
|
|
125
|
-
|
|
185
|
+
|
|
186
|
+
var _getRenderableIndexes3 = getRenderableIndexes({
|
|
187
|
+
firstIndex: nextRenderContext.firstRowIndex,
|
|
188
|
+
lastIndex: nextRenderContext.lastRowIndex,
|
|
189
|
+
minFirstIndex: 0,
|
|
190
|
+
maxLastIndex: currentPage.rows.length,
|
|
191
|
+
buffer: rootProps.rowBuffer
|
|
192
|
+
}),
|
|
193
|
+
_getRenderableIndexes4 = _slicedToArray(_getRenderableIndexes3, 2),
|
|
194
|
+
firstRowToRender = _getRenderableIndexes4[0],
|
|
195
|
+
lastRowToRender = _getRenderableIndexes4[1];
|
|
196
|
+
|
|
197
|
+
var firstColumnToRender = getFirstColumnIndexToRenderRef.current({
|
|
198
|
+
firstColumnIndex: nextRenderContext.firstColumnIndex,
|
|
199
|
+
minColumnIndex: minFirstColumn,
|
|
200
|
+
columnBuffer: rootProps.columnBuffer,
|
|
201
|
+
apiRef: apiRef,
|
|
202
|
+
firstRowToRender: firstRowToRender,
|
|
203
|
+
lastRowToRender: lastRowToRender,
|
|
204
|
+
visibleRows: currentPage.rows
|
|
205
|
+
});
|
|
126
206
|
var lastColumnToRender = Math.min(nextRenderContext.lastColumnIndex + rootProps.columnBuffer, maxLastColumn);
|
|
127
207
|
var renderedColumns = visibleColumns.slice(firstColumnToRender, lastColumnToRender);
|
|
128
208
|
|
|
@@ -146,7 +226,7 @@ export var useGridColumnHeaders = function useGridColumnHeaders(props) {
|
|
|
146
226
|
extendRowFullWidth: !rootProps.disableExtendRowFullWidth,
|
|
147
227
|
hasFocus: hasFocus,
|
|
148
228
|
tabIndex: tabIndex
|
|
149
|
-
}, other),
|
|
229
|
+
}, other), column.field));
|
|
150
230
|
}
|
|
151
231
|
|
|
152
232
|
return columns;
|
|
@@ -161,7 +241,6 @@ export var useGridColumnHeaders = function useGridColumnHeaders(props) {
|
|
|
161
241
|
renderContext: renderContext,
|
|
162
242
|
getColumns: getColumns,
|
|
163
243
|
isDragging: !!dragCol,
|
|
164
|
-
updateInnerPosition: updateInnerPosition,
|
|
165
244
|
getRootProps: function getRootProps() {
|
|
166
245
|
var other = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
167
246
|
return _extends({
|
|
@@ -213,11 +213,25 @@ export var applyInitialState = function applyInitialState(columnsState, initialS
|
|
|
213
213
|
|
|
214
214
|
var newColumnLookup = _extends({}, columnsState.lookup);
|
|
215
215
|
|
|
216
|
-
|
|
217
|
-
var
|
|
218
|
-
|
|
216
|
+
var _loop = function _loop(_i) {
|
|
217
|
+
var field = columnsWithUpdatedDimensions[_i];
|
|
218
|
+
|
|
219
|
+
var newColDef = _extends({}, newColumnLookup[field], {
|
|
219
220
|
hasBeenResized: true
|
|
220
221
|
});
|
|
222
|
+
|
|
223
|
+
Object.entries(dimensions[field]).forEach(function (_ref5) {
|
|
224
|
+
var _ref6 = _slicedToArray(_ref5, 2),
|
|
225
|
+
key = _ref6[0],
|
|
226
|
+
value = _ref6[1];
|
|
227
|
+
|
|
228
|
+
newColDef[key] = value === -1 ? Infinity : value;
|
|
229
|
+
});
|
|
230
|
+
newColumnLookup[field] = newColDef;
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
for (var _i = 0; _i < columnsWithUpdatedDimensions.length; _i += 1) {
|
|
234
|
+
_loop(_i);
|
|
221
235
|
}
|
|
222
236
|
|
|
223
237
|
var newColumnsState = {
|
|
@@ -248,18 +262,18 @@ export var getGridColDef = function getGridColDef(columnTypes, type) {
|
|
|
248
262
|
|
|
249
263
|
return columnTypes[type];
|
|
250
264
|
};
|
|
251
|
-
export var createColumnsState = function createColumnsState(
|
|
265
|
+
export var createColumnsState = function createColumnsState(_ref7) {
|
|
252
266
|
var _apiRef$current$getRo, _apiRef$current$getRo2, _apiRef$current, _apiRef$current$getRo3;
|
|
253
267
|
|
|
254
|
-
var apiRef =
|
|
255
|
-
columnsToUpsert =
|
|
256
|
-
initialState =
|
|
257
|
-
columnTypes =
|
|
258
|
-
|
|
259
|
-
currentColumnVisibilityModel =
|
|
260
|
-
shouldRegenColumnVisibilityModelFromColumns =
|
|
261
|
-
|
|
262
|
-
keepOnlyColumnsToUpsert =
|
|
268
|
+
var apiRef = _ref7.apiRef,
|
|
269
|
+
columnsToUpsert = _ref7.columnsToUpsert,
|
|
270
|
+
initialState = _ref7.initialState,
|
|
271
|
+
columnTypes = _ref7.columnTypes,
|
|
272
|
+
_ref7$currentColumnVi = _ref7.currentColumnVisibilityModel,
|
|
273
|
+
currentColumnVisibilityModel = _ref7$currentColumnVi === void 0 ? gridColumnVisibilityModelSelector(apiRef) : _ref7$currentColumnVi,
|
|
274
|
+
shouldRegenColumnVisibilityModelFromColumns = _ref7.shouldRegenColumnVisibilityModelFromColumns,
|
|
275
|
+
_ref7$keepOnlyColumns = _ref7.keepOnlyColumnsToUpsert,
|
|
276
|
+
keepOnlyColumnsToUpsert = _ref7$keepOnlyColumns === void 0 ? false : _ref7$keepOnlyColumns;
|
|
263
277
|
var isInsideStateInitializer = !apiRef.current.state.columns;
|
|
264
278
|
var columnsStateWithoutColumnVisibilityModel;
|
|
265
279
|
|
|
@@ -304,18 +318,20 @@ export var createColumnsState = function createColumnsState(_ref5) {
|
|
|
304
318
|
columnsStateWithoutColumnVisibilityModel.all.push(field);
|
|
305
319
|
}
|
|
306
320
|
|
|
307
|
-
var
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
return newColumn[key] !== undefined;
|
|
312
|
-
});
|
|
313
|
-
}
|
|
321
|
+
var hasBeenResized = existingState.hasBeenResized;
|
|
322
|
+
COLUMNS_DIMENSION_PROPERTIES.forEach(function (key) {
|
|
323
|
+
if (newColumn[key] !== undefined) {
|
|
324
|
+
hasBeenResized = true;
|
|
314
325
|
|
|
326
|
+
if (newColumn[key] === -1) {
|
|
327
|
+
newColumn[key] = Infinity;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
});
|
|
315
331
|
columnsStateWithoutColumnVisibilityModel.lookup[field] = _extends({}, existingState, {
|
|
316
332
|
hide: newColumn.hide == null ? false : newColumn.hide
|
|
317
333
|
}, newColumn, {
|
|
318
|
-
hasBeenResized:
|
|
334
|
+
hasBeenResized: hasBeenResized
|
|
319
335
|
});
|
|
320
336
|
});
|
|
321
337
|
|
|
@@ -409,4 +425,45 @@ export var mergeColumnsState = function mergeColumnsState(columnsState) {
|
|
|
409
425
|
columns: columnsState
|
|
410
426
|
});
|
|
411
427
|
};
|
|
412
|
-
};
|
|
428
|
+
};
|
|
429
|
+
export function getFirstNonSpannedColumnToRender(_ref8) {
|
|
430
|
+
var firstColumnToRender = _ref8.firstColumnToRender,
|
|
431
|
+
apiRef = _ref8.apiRef,
|
|
432
|
+
firstRowToRender = _ref8.firstRowToRender,
|
|
433
|
+
lastRowToRender = _ref8.lastRowToRender,
|
|
434
|
+
visibleRows = _ref8.visibleRows;
|
|
435
|
+
var firstNonSpannedColumnToRender = firstColumnToRender;
|
|
436
|
+
|
|
437
|
+
for (var i = firstRowToRender; i < lastRowToRender; i += 1) {
|
|
438
|
+
var row = visibleRows[i];
|
|
439
|
+
|
|
440
|
+
if (row) {
|
|
441
|
+
var rowId = visibleRows[i].id;
|
|
442
|
+
var cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, firstColumnToRender);
|
|
443
|
+
|
|
444
|
+
if (cellColSpanInfo && cellColSpanInfo.spannedByColSpan) {
|
|
445
|
+
firstNonSpannedColumnToRender = cellColSpanInfo.leftVisibleCellIndex;
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
return firstNonSpannedColumnToRender;
|
|
451
|
+
}
|
|
452
|
+
export function getFirstColumnIndexToRender(_ref9) {
|
|
453
|
+
var firstColumnIndex = _ref9.firstColumnIndex,
|
|
454
|
+
minColumnIndex = _ref9.minColumnIndex,
|
|
455
|
+
columnBuffer = _ref9.columnBuffer,
|
|
456
|
+
firstRowToRender = _ref9.firstRowToRender,
|
|
457
|
+
lastRowToRender = _ref9.lastRowToRender,
|
|
458
|
+
apiRef = _ref9.apiRef,
|
|
459
|
+
visibleRows = _ref9.visibleRows;
|
|
460
|
+
var initialFirstColumnToRender = Math.max(firstColumnIndex - columnBuffer, minColumnIndex);
|
|
461
|
+
var firstColumnToRender = getFirstNonSpannedColumnToRender({
|
|
462
|
+
firstColumnToRender: initialFirstColumnToRender,
|
|
463
|
+
apiRef: apiRef,
|
|
464
|
+
firstRowToRender: firstRowToRender,
|
|
465
|
+
lastRowToRender: lastRowToRender,
|
|
466
|
+
visibleRows: visibleRows
|
|
467
|
+
});
|
|
468
|
+
return firstColumnToRender;
|
|
469
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useGridApiMethod } from '../../utils/useGridApiMethod';
|
|
3
|
+
import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
|
|
4
|
+
import { GridEvents } from '../../../models/events/gridEvents';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @requires useGridColumns (method, event)
|
|
8
|
+
* @requires useGridParamsApi (method)
|
|
9
|
+
*/
|
|
10
|
+
export var useGridColumnSpanning = function useGridColumnSpanning(apiRef) {
|
|
11
|
+
var lookup = React.useRef({});
|
|
12
|
+
var setCellColSpanInfo = React.useCallback(function (rowId, columnIndex, cellColSpanInfo) {
|
|
13
|
+
var sizes = lookup.current;
|
|
14
|
+
|
|
15
|
+
if (!sizes[rowId]) {
|
|
16
|
+
sizes[rowId] = {};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
sizes[rowId][columnIndex] = cellColSpanInfo;
|
|
20
|
+
}, []);
|
|
21
|
+
var getCellColSpanInfo = React.useCallback(function (rowId, columnIndex) {
|
|
22
|
+
var _lookup$current$rowId;
|
|
23
|
+
|
|
24
|
+
return (_lookup$current$rowId = lookup.current[rowId]) == null ? void 0 : _lookup$current$rowId[columnIndex];
|
|
25
|
+
}, []); // Calculate `colSpan` for the cell.
|
|
26
|
+
|
|
27
|
+
var calculateCellColSpan = React.useCallback(function (params) {
|
|
28
|
+
var columnIndex = params.columnIndex,
|
|
29
|
+
rowId = params.rowId,
|
|
30
|
+
minFirstColumnIndex = params.minFirstColumnIndex,
|
|
31
|
+
maxLastColumnIndex = params.maxLastColumnIndex;
|
|
32
|
+
var visibleColumns = apiRef.current.getVisibleColumns();
|
|
33
|
+
var columnsLength = visibleColumns.length;
|
|
34
|
+
var column = visibleColumns[columnIndex];
|
|
35
|
+
var colSpan = typeof column.colSpan === 'function' ? column.colSpan(apiRef.current.getCellParams(rowId, column.field)) : column.colSpan;
|
|
36
|
+
|
|
37
|
+
if (!colSpan || colSpan === 1) {
|
|
38
|
+
setCellColSpanInfo(rowId, columnIndex, {
|
|
39
|
+
spannedByColSpan: false,
|
|
40
|
+
cellProps: {
|
|
41
|
+
colSpan: 1,
|
|
42
|
+
width: column.computedWidth
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
return {
|
|
46
|
+
colSpan: 1
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
var width = column.computedWidth;
|
|
51
|
+
|
|
52
|
+
for (var j = 1; j < colSpan; j += 1) {
|
|
53
|
+
var nextColumnIndex = columnIndex + j; // Cells should be spanned only within their column section (left-pinned, right-pinned and unpinned).
|
|
54
|
+
|
|
55
|
+
if (nextColumnIndex >= minFirstColumnIndex && nextColumnIndex < maxLastColumnIndex) {
|
|
56
|
+
var nextColumn = visibleColumns[nextColumnIndex];
|
|
57
|
+
width += nextColumn.computedWidth;
|
|
58
|
+
setCellColSpanInfo(rowId, columnIndex + j, {
|
|
59
|
+
spannedByColSpan: true,
|
|
60
|
+
rightVisibleCellIndex: Math.min(columnIndex + colSpan, columnsLength - 1),
|
|
61
|
+
leftVisibleCellIndex: columnIndex
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
setCellColSpanInfo(rowId, columnIndex, {
|
|
66
|
+
spannedByColSpan: false,
|
|
67
|
+
cellProps: {
|
|
68
|
+
colSpan: colSpan,
|
|
69
|
+
width: width
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return {
|
|
75
|
+
colSpan: colSpan
|
|
76
|
+
};
|
|
77
|
+
}, [apiRef, setCellColSpanInfo]); // Calculate `colSpan` for each cell in the row
|
|
78
|
+
|
|
79
|
+
var calculateColSpan = React.useCallback(function (_ref) {
|
|
80
|
+
var rowId = _ref.rowId,
|
|
81
|
+
minFirstColumn = _ref.minFirstColumn,
|
|
82
|
+
maxLastColumn = _ref.maxLastColumn;
|
|
83
|
+
|
|
84
|
+
for (var i = minFirstColumn; i < maxLastColumn; i += 1) {
|
|
85
|
+
var cellProps = calculateCellColSpan({
|
|
86
|
+
columnIndex: i,
|
|
87
|
+
rowId: rowId,
|
|
88
|
+
minFirstColumnIndex: minFirstColumn,
|
|
89
|
+
maxLastColumnIndex: maxLastColumn
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
if (cellProps.colSpan > 1) {
|
|
93
|
+
i += cellProps.colSpan - 1;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}, [calculateCellColSpan]);
|
|
97
|
+
var columnSpanningApi = {
|
|
98
|
+
unstable_getCellColSpanInfo: getCellColSpanInfo,
|
|
99
|
+
unstable_calculateColSpan: calculateColSpan
|
|
100
|
+
};
|
|
101
|
+
useGridApiMethod(apiRef, columnSpanningApi, 'GridColumnSpanningAPI');
|
|
102
|
+
var handleColumnReorderChange = React.useCallback(function () {
|
|
103
|
+
// `colSpan` needs to be recalculated after column reordering
|
|
104
|
+
lookup.current = {};
|
|
105
|
+
}, []);
|
|
106
|
+
useGridApiEventHandler(apiRef, GridEvents.columnOrderChange, handleColumnReorderChange);
|
|
107
|
+
};
|
|
@@ -7,7 +7,7 @@ import { useGridApiMethod } from '../../utils/useGridApiMethod';
|
|
|
7
7
|
import { useGridLogger } from '../../utils/useGridLogger';
|
|
8
8
|
import { gridColumnFieldsSelector, gridColumnDefinitionsSelector, gridColumnLookupSelector, gridColumnsMetaSelector, gridColumnsSelector, gridColumnVisibilityModelSelector, gridVisibleColumnDefinitionsSelector, gridColumnPositionsSelector } from './gridColumnsSelector';
|
|
9
9
|
import { useGridApiEventHandler, useGridApiOptionHandler } from '../../utils/useGridApiEventHandler';
|
|
10
|
-
import { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
|
|
10
|
+
import { useGridRegisterPipeProcessor, useGridRegisterPipeApplier } from '../../core/pipeProcessing';
|
|
11
11
|
import { hydrateColumnsWidth, computeColumnTypes, createColumnsState, mergeColumnsState, COLUMNS_DIMENSION_PROPERTIES } from './gridColumnsUtils';
|
|
12
12
|
import { GridPreferencePanelsValue } from '../preferencesPanel';
|
|
13
13
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -237,7 +237,13 @@ export function useGridColumns(apiRef, props) {
|
|
|
237
237
|
if (colDef.hasBeenResized) {
|
|
238
238
|
var colDefDimensions = {};
|
|
239
239
|
COLUMNS_DIMENSION_PROPERTIES.forEach(function (propertyName) {
|
|
240
|
-
|
|
240
|
+
var propertyValue = colDef[propertyName];
|
|
241
|
+
|
|
242
|
+
if (propertyValue === Infinity) {
|
|
243
|
+
propertyValue = -1;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
colDefDimensions[propertyName] = propertyValue;
|
|
241
247
|
});
|
|
242
248
|
dimensions[colDef.field] = colDefDimensions;
|
|
243
249
|
}
|
|
@@ -295,12 +301,23 @@ export function useGridColumns(apiRef, props) {
|
|
|
295
301
|
* EVENTS
|
|
296
302
|
*/
|
|
297
303
|
|
|
298
|
-
var
|
|
299
|
-
|
|
300
|
-
|
|
304
|
+
var prevInnerWidth = React.useRef(null);
|
|
305
|
+
|
|
306
|
+
var handleGridSizeChange = function handleGridSizeChange(viewportInnerSize) {
|
|
307
|
+
if (prevInnerWidth.current !== viewportInnerSize.width) {
|
|
308
|
+
prevInnerWidth.current = viewportInnerSize.width;
|
|
309
|
+
setGridColumnsState(hydrateColumnsWidth(gridColumnsSelector(apiRef.current.state), viewportInnerSize.width));
|
|
301
310
|
}
|
|
311
|
+
};
|
|
312
|
+
|
|
313
|
+
useGridApiEventHandler(apiRef, GridEvents.viewportInnerSizeChange, handleGridSizeChange);
|
|
314
|
+
useGridApiOptionHandler(apiRef, GridEvents.columnVisibilityChange, props.onColumnVisibilityChange);
|
|
315
|
+
/**
|
|
316
|
+
* APPLIERS
|
|
317
|
+
*/
|
|
302
318
|
|
|
303
|
-
|
|
319
|
+
var hydrateColumns = React.useCallback(function () {
|
|
320
|
+
logger.info("Columns pipe processing have changed, regenerating the columns");
|
|
304
321
|
var columnsState = createColumnsState({
|
|
305
322
|
apiRef: apiRef,
|
|
306
323
|
columnTypes: columnTypes,
|
|
@@ -311,18 +328,7 @@ export function useGridColumns(apiRef, props) {
|
|
|
311
328
|
});
|
|
312
329
|
setGridColumnsState(columnsState);
|
|
313
330
|
}, [apiRef, logger, setGridColumnsState, columnTypes]);
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
var handleGridSizeChange = function handleGridSizeChange(viewportInnerSize) {
|
|
317
|
-
if (prevInnerWidth.current !== viewportInnerSize.width) {
|
|
318
|
-
prevInnerWidth.current = viewportInnerSize.width;
|
|
319
|
-
setGridColumnsState(hydrateColumnsWidth(gridColumnsSelector(apiRef.current.state), viewportInnerSize.width));
|
|
320
|
-
}
|
|
321
|
-
};
|
|
322
|
-
|
|
323
|
-
useGridApiEventHandler(apiRef, GridEvents.pipeProcessorRegister, handlepipeProcessorRegister);
|
|
324
|
-
useGridApiEventHandler(apiRef, GridEvents.viewportInnerSizeChange, handleGridSizeChange);
|
|
325
|
-
useGridApiOptionHandler(apiRef, GridEvents.columnVisibilityChange, props.onColumnVisibilityChange);
|
|
331
|
+
useGridRegisterPipeApplier(apiRef, 'hydrateColumns', hydrateColumns);
|
|
326
332
|
/**
|
|
327
333
|
* EFFECTS
|
|
328
334
|
*/
|
|
@@ -150,12 +150,12 @@ export function useGridDimensions(apiRef, props) {
|
|
|
150
150
|
var isJSDOM = /jsdom/.test(window.navigator.userAgent);
|
|
151
151
|
|
|
152
152
|
if (size.height === 0 && !warningShown.current && !props.autoHeight && !isJSDOM) {
|
|
153
|
-
logger.warn(['The parent of the grid has an empty height.', 'You need to make sure the container has an intrinsic height.', 'The grid displays with a height of 0px.', '', 'You can find a solution in the docs:', 'https://mui.com/
|
|
153
|
+
logger.warn(['The parent of the grid has an empty height.', 'You need to make sure the container has an intrinsic height.', 'The grid displays with a height of 0px.', '', 'You can find a solution in the docs:', 'https://mui.com/x/react-data-grid/layout/'].join('\n'));
|
|
154
154
|
warningShown.current = true;
|
|
155
155
|
}
|
|
156
156
|
|
|
157
157
|
if (size.width === 0 && !warningShown.current && !isJSDOM) {
|
|
158
|
-
logger.warn(['The parent of the grid has an empty width.', 'You need to make sure the container has an intrinsic width.', 'The grid displays with a width of 0px.', '', 'You can find a solution in the docs:', 'https://mui.com/
|
|
158
|
+
logger.warn(['The parent of the grid has an empty width.', 'You need to make sure the container has an intrinsic width.', 'The grid displays with a width of 0px.', '', 'You can find a solution in the docs:', 'https://mui.com/x/react-data-grid/layout/'].join('\n'));
|
|
159
159
|
warningShown.current = true;
|
|
160
160
|
}
|
|
161
161
|
|
|
@@ -178,7 +178,7 @@ export function useGridDimensions(apiRef, props) {
|
|
|
178
178
|
useEnhancedEffect(function () {
|
|
179
179
|
return updateGridDimensionsRef();
|
|
180
180
|
}, [updateGridDimensionsRef]);
|
|
181
|
-
useGridApiOptionHandler(apiRef, GridEvents.
|
|
181
|
+
useGridApiOptionHandler(apiRef, GridEvents.sortedRowsSet, updateGridDimensionsRef);
|
|
182
182
|
useGridApiOptionHandler(apiRef, GridEvents.pageChange, updateGridDimensionsRef);
|
|
183
183
|
useGridApiOptionHandler(apiRef, GridEvents.pageSizeChange, updateGridDimensionsRef);
|
|
184
184
|
useGridApiOptionHandler(apiRef, GridEvents.columnsChange, updateGridDimensionsRef);
|
|
@@ -217,10 +217,7 @@ export var useGridCellEditing = function useGridCellEditing(apiRef, props) {
|
|
|
217
217
|
}
|
|
218
218
|
|
|
219
219
|
var editingState = gridEditRowsStateSelector(apiRef.current.state);
|
|
220
|
-
var row = apiRef.current.getRow(id);
|
|
221
|
-
var column = apiRef.current.getColumn(field);
|
|
222
220
|
var _editingState$id$fiel = editingState[id][field],
|
|
223
|
-
value = _editingState$id$fiel.value,
|
|
224
221
|
error = _editingState$id$fiel.error,
|
|
225
222
|
isProcessingProps = _editingState$id$fiel.isProcessingProps;
|
|
226
223
|
|
|
@@ -228,10 +225,7 @@ export var useGridCellEditing = function useGridCellEditing(apiRef, props) {
|
|
|
228
225
|
return;
|
|
229
226
|
}
|
|
230
227
|
|
|
231
|
-
var rowUpdate =
|
|
232
|
-
value: value,
|
|
233
|
-
row: row
|
|
234
|
-
}) : _extends({}, row, _defineProperty({}, field, value));
|
|
228
|
+
var rowUpdate = apiRef.current.unstable_getRowWithUpdatedValuesFromCellEditing(id, field);
|
|
235
229
|
|
|
236
230
|
if (processRowUpdate) {
|
|
237
231
|
var handleError = function handleError(errorThrown) {
|
|
@@ -243,6 +237,7 @@ export var useGridCellEditing = function useGridCellEditing(apiRef, props) {
|
|
|
243
237
|
};
|
|
244
238
|
|
|
245
239
|
try {
|
|
240
|
+
var row = apiRef.current.getRow(id);
|
|
246
241
|
Promise.resolve(processRowUpdate(rowUpdate, row)).then(function (finalRowUpdate) {
|
|
247
242
|
apiRef.current.updateRows([finalRowUpdate]);
|
|
248
243
|
updateFocusedCellIfNeeded();
|
|
@@ -334,11 +329,22 @@ export var useGridCellEditing = function useGridCellEditing(apiRef, props) {
|
|
|
334
329
|
return _ref.apply(this, arguments);
|
|
335
330
|
};
|
|
336
331
|
}(), [apiRef, throwIfNotEditable, throwIfNotInMode, updateOrDeleteFieldState]);
|
|
332
|
+
var getRowWithUpdatedValuesFromCellEditing = React.useCallback(function (id, field) {
|
|
333
|
+
var column = apiRef.current.getColumn(field);
|
|
334
|
+
var editingState = gridEditRowsStateSelector(apiRef.current.state);
|
|
335
|
+
var value = editingState[id][field].value;
|
|
336
|
+
var row = apiRef.current.getRow(id);
|
|
337
|
+
return column.valueSetter ? column.valueSetter({
|
|
338
|
+
value: value,
|
|
339
|
+
row: row
|
|
340
|
+
}) : _extends({}, row, _defineProperty({}, field, value));
|
|
341
|
+
}, [apiRef]);
|
|
337
342
|
var editingApi = {
|
|
338
343
|
getCellMode: getCellMode,
|
|
339
344
|
startCellEditMode: startCellEditMode,
|
|
340
345
|
stopCellEditMode: stopCellEditMode,
|
|
341
|
-
unstable_setCellEditingEditCellValue: setCellEditingEditCellValue
|
|
346
|
+
unstable_setCellEditingEditCellValue: setCellEditingEditCellValue,
|
|
347
|
+
unstable_getRowWithUpdatedValuesFromCellEditing: getRowWithUpdatedValuesFromCellEditing
|
|
342
348
|
};
|
|
343
349
|
useGridApiMethod(apiRef, editingApi, 'EditingApi');
|
|
344
350
|
};
|
|
@@ -5,7 +5,7 @@ import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
|
5
5
|
import * as React from 'react';
|
|
6
6
|
import { useGridApiMethod } from '../../utils/useGridApiMethod';
|
|
7
7
|
import { useGridCellEditing } from './useGridCellEditing.new';
|
|
8
|
-
import { GridCellModes } from '../../../models/gridEditRowModel';
|
|
8
|
+
import { GridCellModes, GridEditModes } from '../../../models/gridEditRowModel';
|
|
9
9
|
import { useGridRowEditing } from './useGridRowEditing.new';
|
|
10
10
|
export var editingStateInitializer = function editingStateInitializer(state) {
|
|
11
11
|
return _extends({}, state, {
|
|
@@ -119,7 +119,7 @@ export var useGridEditing = function useGridEditing(apiRef, props) {
|
|
|
119
119
|
while (1) {
|
|
120
120
|
switch (_context.prev = _context.next) {
|
|
121
121
|
case 0:
|
|
122
|
-
setEditCellValueToCall = props.editMode ===
|
|
122
|
+
setEditCellValueToCall = props.editMode === GridEditModes.Row ? apiRef.current.unstable_setRowEditingEditCellValue : apiRef.current.unstable_setCellEditingEditCellValue; // Check if the cell is in edit mode
|
|
123
123
|
// By the time this callback runs the user may have cancelled the editing
|
|
124
124
|
|
|
125
125
|
if (!(apiRef.current.getCellMode(id, field) === GridCellModes.Edit)) {
|
|
@@ -143,10 +143,14 @@ export var useGridEditing = function useGridEditing(apiRef, props) {
|
|
|
143
143
|
})));
|
|
144
144
|
});
|
|
145
145
|
}, [apiRef, props.editMode]);
|
|
146
|
+
var getRowWithUpdatedValues = React.useCallback(function (id, field) {
|
|
147
|
+
return props.editMode === GridEditModes.Cell ? apiRef.current.unstable_getRowWithUpdatedValuesFromCellEditing(id, field) : apiRef.current.unstable_getRowWithUpdatedValuesFromRowEditing(id);
|
|
148
|
+
}, [apiRef, props.editMode]);
|
|
146
149
|
var editingSharedApi = {
|
|
147
150
|
isCellEditable: isCellEditable,
|
|
148
151
|
setEditCellValue: setEditCellValue,
|
|
149
|
-
unstable_runPendingEditCellValueMutation: runPendingEditCellValueMutation
|
|
152
|
+
unstable_runPendingEditCellValueMutation: runPendingEditCellValueMutation,
|
|
153
|
+
unstable_getRowWithUpdatedValues: getRowWithUpdatedValues
|
|
150
154
|
};
|
|
151
155
|
useGridApiMethod(apiRef, editingSharedApi, 'EditingApi');
|
|
152
156
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
1
2
|
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
2
3
|
import _toPropertyKey from "@babel/runtime/helpers/esm/toPropertyKey";
|
|
3
|
-
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
4
4
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
5
5
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
6
6
|
import * as React from 'react';
|
|
@@ -335,24 +335,7 @@ export var useGridRowEditing = function useGridRowEditing(apiRef, props) {
|
|
|
335
335
|
return;
|
|
336
336
|
}
|
|
337
337
|
|
|
338
|
-
var rowUpdate =
|
|
339
|
-
|
|
340
|
-
Object.entries(editingState[id]).forEach(function (_ref) {
|
|
341
|
-
var _ref2 = _slicedToArray(_ref, 2),
|
|
342
|
-
field = _ref2[0],
|
|
343
|
-
fieldProps = _ref2[1];
|
|
344
|
-
|
|
345
|
-
var column = apiRef.current.getColumn(field);
|
|
346
|
-
|
|
347
|
-
if (column.valueSetter) {
|
|
348
|
-
rowUpdate = column.valueSetter({
|
|
349
|
-
value: fieldProps.value,
|
|
350
|
-
row: rowUpdate
|
|
351
|
-
});
|
|
352
|
-
} else {
|
|
353
|
-
rowUpdate[field] = fieldProps.value;
|
|
354
|
-
}
|
|
355
|
-
});
|
|
338
|
+
var rowUpdate = apiRef.current.unstable_getRowWithUpdatedValuesFromRowEditing(id);
|
|
356
339
|
|
|
357
340
|
if (processRowUpdate) {
|
|
358
341
|
var handleError = function handleError(errorThrown) {
|
|
@@ -442,10 +425,10 @@ export var useGridRowEditing = function useGridRowEditing(apiRef, props) {
|
|
|
442
425
|
promises.push(promise);
|
|
443
426
|
}
|
|
444
427
|
|
|
445
|
-
Object.entries(editingState[id]).forEach(function (
|
|
446
|
-
var
|
|
447
|
-
thisField =
|
|
448
|
-
fieldProps =
|
|
428
|
+
Object.entries(editingState[id]).forEach(function (_ref) {
|
|
429
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
430
|
+
thisField = _ref2[0],
|
|
431
|
+
fieldProps = _ref2[1];
|
|
449
432
|
|
|
450
433
|
if (thisField === field) {
|
|
451
434
|
return;
|
|
@@ -498,11 +481,36 @@ export var useGridRowEditing = function useGridRowEditing(apiRef, props) {
|
|
|
498
481
|
});
|
|
499
482
|
});
|
|
500
483
|
}, [apiRef, throwIfNotEditable, updateOrDeleteFieldState]);
|
|
484
|
+
var getRowWithUpdatedValuesFromRowEditing = React.useCallback(function (id) {
|
|
485
|
+
var editingState = gridEditRowsStateSelector(apiRef.current.state);
|
|
486
|
+
var row = apiRef.current.getRow(id);
|
|
487
|
+
|
|
488
|
+
var rowUpdate = _extends({}, row);
|
|
489
|
+
|
|
490
|
+
Object.entries(editingState[id]).forEach(function (_ref3) {
|
|
491
|
+
var _ref4 = _slicedToArray(_ref3, 2),
|
|
492
|
+
field = _ref4[0],
|
|
493
|
+
fieldProps = _ref4[1];
|
|
494
|
+
|
|
495
|
+
var column = apiRef.current.getColumn(field);
|
|
496
|
+
|
|
497
|
+
if (column.valueSetter) {
|
|
498
|
+
rowUpdate = column.valueSetter({
|
|
499
|
+
value: fieldProps.value,
|
|
500
|
+
row: rowUpdate
|
|
501
|
+
});
|
|
502
|
+
} else {
|
|
503
|
+
rowUpdate[field] = fieldProps.value;
|
|
504
|
+
}
|
|
505
|
+
});
|
|
506
|
+
return rowUpdate;
|
|
507
|
+
}, [apiRef]);
|
|
501
508
|
var editingApi = {
|
|
502
509
|
getRowMode: getRowMode,
|
|
503
510
|
startRowEditMode: startRowEditMode,
|
|
504
511
|
stopRowEditMode: stopRowEditMode,
|
|
505
|
-
unstable_setRowEditingEditCellValue: setRowEditingEditCellValue
|
|
512
|
+
unstable_setRowEditingEditCellValue: setRowEditingEditCellValue,
|
|
513
|
+
unstable_getRowWithUpdatedValuesFromRowEditing: getRowWithUpdatedValuesFromRowEditing
|
|
506
514
|
};
|
|
507
515
|
useGridApiMethod(apiRef, editingApi, 'EditingApi');
|
|
508
516
|
};
|