@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
|
@@ -45,11 +45,7 @@ export var useGridFilter = function useGridFilter(apiRef, props) {
|
|
|
45
45
|
stateSelector: gridFilterModelSelector,
|
|
46
46
|
changeEvent: GridEvents.filterModelChange
|
|
47
47
|
});
|
|
48
|
-
|
|
49
|
-
* API METHODS
|
|
50
|
-
*/
|
|
51
|
-
|
|
52
|
-
var applyFilters = React.useCallback(function () {
|
|
48
|
+
var updateFilteredRows = React.useCallback(function () {
|
|
53
49
|
apiRef.current.setState(function (state) {
|
|
54
50
|
var filterModel = gridFilterModelSelector(state, apiRef.current.instanceId);
|
|
55
51
|
var isRowMatchingFilters = props.filterMode === GridFeatureModeConstant.client ? buildAggregatedFilterApplier(filterModel, apiRef) : null;
|
|
@@ -60,9 +56,16 @@ export var useGridFilter = function useGridFilter(apiRef, props) {
|
|
|
60
56
|
filter: _extends({}, state.filter, filteringResult)
|
|
61
57
|
});
|
|
62
58
|
});
|
|
63
|
-
apiRef.current.publishEvent(GridEvents.
|
|
59
|
+
apiRef.current.publishEvent(GridEvents.filteredRowsSet);
|
|
60
|
+
}, [props.filterMode, apiRef]);
|
|
61
|
+
/**
|
|
62
|
+
* API METHODS
|
|
63
|
+
*/
|
|
64
|
+
|
|
65
|
+
var applyFilters = React.useCallback(function () {
|
|
66
|
+
updateFilteredRows();
|
|
64
67
|
apiRef.current.forceUpdate();
|
|
65
|
-
}, [apiRef,
|
|
68
|
+
}, [apiRef, updateFilteredRows]);
|
|
66
69
|
var upsertFilterItem = React.useCallback(function (item) {
|
|
67
70
|
var filterModel = gridFilterModelSelector(apiRef);
|
|
68
71
|
|
|
@@ -260,8 +263,10 @@ export var useGridFilter = function useGridFilter(apiRef, props) {
|
|
|
260
263
|
if (methodName === 'filtering') {
|
|
261
264
|
apiRef.current.unstable_applyFilters();
|
|
262
265
|
}
|
|
263
|
-
}, [apiRef]);
|
|
264
|
-
|
|
266
|
+
}, [apiRef]); // Do not call `apiRef.current.forceUpdate` to avoid re-render before updating the sorted rows.
|
|
267
|
+
// Otherwise, the state is not consistent during the render
|
|
268
|
+
|
|
269
|
+
useGridApiEventHandler(apiRef, GridEvents.rowsSet, updateFilteredRows);
|
|
265
270
|
useGridApiEventHandler(apiRef, GridEvents.rowExpansionChange, apiRef.current.unstable_applyFilters);
|
|
266
271
|
useGridApiEventHandler(apiRef, GridEvents.columnsChange, handleColumnsChange);
|
|
267
272
|
useGridApiEventHandler(apiRef, GridEvents.activeStrategyProcessorChange, handleStrategyProcessorChange);
|
|
@@ -105,21 +105,31 @@ export var useGridFocus = function useGridFocus(apiRef, props) {
|
|
|
105
105
|
rowIndexToFocus += 1;
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
+
var currentPage = getVisibleRows(apiRef, {
|
|
109
|
+
pagination: props.pagination,
|
|
110
|
+
paginationMode: props.paginationMode
|
|
111
|
+
});
|
|
112
|
+
|
|
108
113
|
if (columnIndexToFocus >= visibleColumns.length) {
|
|
109
|
-
// Go to next row if we are
|
|
114
|
+
// Go to next row if we are after the last column
|
|
110
115
|
rowIndexToFocus += 1;
|
|
111
|
-
|
|
116
|
+
|
|
117
|
+
if (rowIndexToFocus < currentPage.rows.length) {
|
|
118
|
+
// Go to first column of the next row if there's one more row
|
|
119
|
+
columnIndexToFocus = 0;
|
|
120
|
+
}
|
|
112
121
|
} else if (columnIndexToFocus < 0) {
|
|
113
|
-
// Go to previous row if we are
|
|
122
|
+
// Go to previous row if we are before the first column
|
|
114
123
|
rowIndexToFocus -= 1;
|
|
115
|
-
|
|
124
|
+
|
|
125
|
+
if (rowIndexToFocus >= 0) {
|
|
126
|
+
// Go to last column of the previous if there's one more row
|
|
127
|
+
columnIndexToFocus = visibleColumns.length - 1;
|
|
128
|
+
}
|
|
116
129
|
}
|
|
117
130
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
paginationMode: props.paginationMode
|
|
121
|
-
});
|
|
122
|
-
rowIndexToFocus = clamp(rowIndexToFocus, currentPage.range.firstRowIndex, currentPage.range.lastRowIndex);
|
|
131
|
+
rowIndexToFocus = clamp(rowIndexToFocus, 0, currentPage.rows.length - 1);
|
|
132
|
+
columnIndexToFocus = clamp(columnIndexToFocus, 0, visibleColumns.length - 1);
|
|
123
133
|
var rowToFocus = currentPage.rows[rowIndexToFocus];
|
|
124
134
|
var columnToFocus = visibleColumns[columnIndexToFocus];
|
|
125
135
|
apiRef.current.setCellFocus(rowToFocus.id, columnToFocus.field);
|
|
@@ -9,6 +9,7 @@ import { GRID_CHECKBOX_SELECTION_COL_DEF } from '../../../colDef/gridCheckboxSel
|
|
|
9
9
|
import { gridClasses } from '../../../constants/gridClasses';
|
|
10
10
|
import { GridCellModes } from '../../../models/gridEditRowModel';
|
|
11
11
|
import { isNavigationKey } from '../../../utils/keyboardUtils';
|
|
12
|
+
import { GRID_DETAIL_PANEL_TOGGLE_FIELD } from '../../../constants/gridDetailPanelToggleField';
|
|
12
13
|
/**
|
|
13
14
|
* @requires useGridSorting (method) - can be after
|
|
14
15
|
* @requires useGridFilter (state) - can be after
|
|
@@ -16,21 +17,41 @@ import { isNavigationKey } from '../../../utils/keyboardUtils';
|
|
|
16
17
|
* @requires useGridDimensions (method) - can be after
|
|
17
18
|
* @requires useGridFocus (method) - can be after
|
|
18
19
|
* @requires useGridScroll (method) - can be after
|
|
20
|
+
* @requires useGridColumnSpanning (method) - can be after
|
|
19
21
|
*/
|
|
20
22
|
|
|
21
23
|
export var useGridKeyboardNavigation = function useGridKeyboardNavigation(apiRef, props) {
|
|
22
24
|
var logger = useGridLogger(apiRef, 'useGridKeyboardNavigation');
|
|
23
25
|
var currentPage = useGridVisibleRows(apiRef, props);
|
|
26
|
+
/**
|
|
27
|
+
* @param {number} colIndex Index of the column to focus
|
|
28
|
+
* @param {number} rowIndex index of the row to focus
|
|
29
|
+
* @param {string} closestColumnToUse Which closest column cell to use when the cell is spanned by `colSpan`.
|
|
30
|
+
*/
|
|
31
|
+
|
|
24
32
|
var goToCell = React.useCallback(function (colIndex, rowIndex) {
|
|
33
|
+
var _visibleSortedRows$ro;
|
|
34
|
+
|
|
35
|
+
var closestColumnToUse = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'left';
|
|
36
|
+
var visibleSortedRows = gridVisibleSortedRowEntriesSelector(apiRef);
|
|
37
|
+
var rowId = (_visibleSortedRows$ro = visibleSortedRows[rowIndex]) == null ? void 0 : _visibleSortedRows$ro.id;
|
|
38
|
+
var nextCellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, colIndex);
|
|
39
|
+
|
|
40
|
+
if (nextCellColSpanInfo && nextCellColSpanInfo.spannedByColSpan) {
|
|
41
|
+
if (closestColumnToUse === 'left') {
|
|
42
|
+
colIndex = nextCellColSpanInfo.leftVisibleCellIndex;
|
|
43
|
+
} else if (closestColumnToUse === 'right') {
|
|
44
|
+
colIndex = nextCellColSpanInfo.rightVisibleCellIndex;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
25
48
|
logger.debug("Navigating to cell row ".concat(rowIndex, ", col ").concat(colIndex));
|
|
26
49
|
apiRef.current.scrollToIndexes({
|
|
27
50
|
colIndex: colIndex,
|
|
28
51
|
rowIndex: rowIndex
|
|
29
52
|
});
|
|
30
53
|
var field = apiRef.current.getVisibleColumns()[colIndex].field;
|
|
31
|
-
|
|
32
|
-
var node = visibleSortedRows[rowIndex];
|
|
33
|
-
apiRef.current.setCellFocus(node.id, field);
|
|
54
|
+
apiRef.current.setCellFocus(rowId, field);
|
|
34
55
|
}, [apiRef, logger]);
|
|
35
56
|
var goToHeader = React.useCallback(function (colIndex, event) {
|
|
36
57
|
logger.debug("Navigating to header col ".concat(colIndex));
|
|
@@ -85,7 +106,7 @@ export var useGridKeyboardNavigation = function useGridKeyboardNavigation(apiRef
|
|
|
85
106
|
case 'ArrowRight':
|
|
86
107
|
{
|
|
87
108
|
if (colIndexBefore < lastColIndex) {
|
|
88
|
-
goToCell(colIndexBefore + 1, rowIndexBefore);
|
|
109
|
+
goToCell(colIndexBefore + 1, rowIndexBefore, 'right');
|
|
89
110
|
}
|
|
90
111
|
|
|
91
112
|
break;
|
|
@@ -104,9 +125,9 @@ export var useGridKeyboardNavigation = function useGridKeyboardNavigation(apiRef
|
|
|
104
125
|
{
|
|
105
126
|
// "Tab" is only triggered by the row / cell editing feature
|
|
106
127
|
if (event.shiftKey && colIndexBefore > firstColIndex) {
|
|
107
|
-
goToCell(colIndexBefore - 1, rowIndexBefore);
|
|
128
|
+
goToCell(colIndexBefore - 1, rowIndexBefore, 'left');
|
|
108
129
|
} else if (!event.shiftKey && colIndexBefore < lastColIndex) {
|
|
109
|
-
goToCell(colIndexBefore + 1, rowIndexBefore);
|
|
130
|
+
goToCell(colIndexBefore + 1, rowIndexBefore, 'right');
|
|
110
131
|
}
|
|
111
132
|
|
|
112
133
|
break;
|
|
@@ -114,6 +135,18 @@ export var useGridKeyboardNavigation = function useGridKeyboardNavigation(apiRef
|
|
|
114
135
|
|
|
115
136
|
case ' ':
|
|
116
137
|
{
|
|
138
|
+
var field = params.field;
|
|
139
|
+
|
|
140
|
+
if (field === GRID_DETAIL_PANEL_TOGGLE_FIELD) {
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
var colDef = params.colDef;
|
|
145
|
+
|
|
146
|
+
if (colDef && colDef.type === 'treeDataGroup') {
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
|
|
117
150
|
if (!event.shiftKey && rowIndexBefore < lastRowIndexInPage) {
|
|
118
151
|
goToCell(colIndexBefore, Math.min(rowIndexBefore + viewportPageSize, lastRowIndexInPage));
|
|
119
152
|
}
|
|
@@ -5,6 +5,9 @@ export var gridRowsStateSelector = function gridRowsStateSelector(state) {
|
|
|
5
5
|
export var gridRowCountSelector = createSelector(gridRowsStateSelector, function (rows) {
|
|
6
6
|
return rows.totalRowCount;
|
|
7
7
|
});
|
|
8
|
+
export var gridRowsLoadingSelector = createSelector(gridRowsStateSelector, function (rows) {
|
|
9
|
+
return rows.loading;
|
|
10
|
+
});
|
|
8
11
|
export var gridTopLevelRowCountSelector = createSelector(gridRowsStateSelector, function (rows) {
|
|
9
12
|
return rows.totalTopLevelRowCount;
|
|
10
13
|
});
|
|
@@ -44,7 +44,7 @@ var convertGridRowsPropToState = function convertGridRowsPropToState(_ref) {
|
|
|
44
44
|
};
|
|
45
45
|
};
|
|
46
46
|
|
|
47
|
-
var getRowsStateFromCache = function getRowsStateFromCache(rowsCache, previousTree, apiRef, rowCountProp) {
|
|
47
|
+
var getRowsStateFromCache = function getRowsStateFromCache(rowsCache, previousTree, apiRef, rowCountProp, loadingProp) {
|
|
48
48
|
var value = rowsCache.state.value;
|
|
49
49
|
var rowCount = rowCountProp != null ? rowCountProp : 0;
|
|
50
50
|
var groupingResponse = apiRef.current.unstable_applyStrategyProcessor('rowTreeCreation', _extends({}, value, {
|
|
@@ -54,6 +54,7 @@ var getRowsStateFromCache = function getRowsStateFromCache(rowsCache, previousTr
|
|
|
54
54
|
return node.parent == null;
|
|
55
55
|
}).length;
|
|
56
56
|
return _extends({}, groupingResponse, {
|
|
57
|
+
loading: loadingProp,
|
|
57
58
|
totalRowCount: Math.max(rowCount, groupingResponse.ids.length),
|
|
58
59
|
totalTopLevelRowCount: Math.max(rowCount, dataTopLevelRowCount)
|
|
59
60
|
});
|
|
@@ -76,7 +77,7 @@ export var rowsStateInitializer = function rowsStateInitializer(state, props, ap
|
|
|
76
77
|
lastUpdateMs: Date.now()
|
|
77
78
|
};
|
|
78
79
|
return _extends({}, state, {
|
|
79
|
-
rows: getRowsStateFromCache(rowsCache, null, apiRef, props.rowCount),
|
|
80
|
+
rows: getRowsStateFromCache(rowsCache, null, apiRef, props.rowCount, props.loading),
|
|
80
81
|
rowsCache: rowsCache // TODO remove from state
|
|
81
82
|
|
|
82
83
|
});
|
|
@@ -109,7 +110,7 @@ export var useGridRows = function useGridRows(apiRef, props) {
|
|
|
109
110
|
rowsCache.current.lastUpdateMs = Date.now();
|
|
110
111
|
apiRef.current.setState(function (state) {
|
|
111
112
|
return _extends({}, state, {
|
|
112
|
-
rows: getRowsStateFromCache(rowsCache.current, gridRowTreeSelector(apiRef), apiRef, props.rowCount)
|
|
113
|
+
rows: getRowsStateFromCache(rowsCache.current, gridRowTreeSelector(apiRef), apiRef, props.rowCount, props.loading)
|
|
113
114
|
});
|
|
114
115
|
});
|
|
115
116
|
apiRef.current.publishEvent(GridEvents.rowsSet);
|
|
@@ -136,7 +137,7 @@ export var useGridRows = function useGridRows(apiRef, props) {
|
|
|
136
137
|
}
|
|
137
138
|
|
|
138
139
|
run();
|
|
139
|
-
}, [props.throttleRowsMs, props.rowCount, apiRef]);
|
|
140
|
+
}, [props.throttleRowsMs, props.rowCount, props.loading, apiRef]);
|
|
140
141
|
/**
|
|
141
142
|
* API METHODS
|
|
142
143
|
*/
|
|
@@ -7,8 +7,7 @@ import { gridDensityRowHeightSelector, gridDensityFactorSelector } from '../dens
|
|
|
7
7
|
import { gridFilterStateSelector } from '../filter/gridFilterSelector';
|
|
8
8
|
import { gridPaginationSelector } from '../pagination/gridPaginationSelector';
|
|
9
9
|
import { gridSortingStateSelector } from '../sorting/gridSortingSelector';
|
|
10
|
-
import {
|
|
11
|
-
import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
|
|
10
|
+
import { useGridRegisterPipeApplier } from '../../core/pipeProcessing';
|
|
12
11
|
export var rowsMetaStateInitializer = function rowsMetaStateInitializer(state) {
|
|
13
12
|
return _extends({}, state, {
|
|
14
13
|
rowsMeta: {
|
|
@@ -65,10 +64,11 @@ export var useGridRowsMeta = function useGridRowsMeta(apiRef, props) {
|
|
|
65
64
|
if (getRowSpacing) {
|
|
66
65
|
var _spacing$top, _spacing$bottom;
|
|
67
66
|
|
|
68
|
-
var
|
|
67
|
+
var indexRelativeToCurrentPage = apiRef.current.getRowIndexRelativeToVisibleRows(row.id);
|
|
69
68
|
var spacing = getRowSpacing(_extends({}, row, {
|
|
70
|
-
isFirstVisible:
|
|
71
|
-
isLastVisible:
|
|
69
|
+
isFirstVisible: indexRelativeToCurrentPage === 0,
|
|
70
|
+
isLastVisible: indexRelativeToCurrentPage === currentPage.rows.length - 1,
|
|
71
|
+
indexRelativeToCurrentPage: indexRelativeToCurrentPage
|
|
72
72
|
}));
|
|
73
73
|
initialHeights.spacingTop = (_spacing$top = spacing.top) != null ? _spacing$top : 0;
|
|
74
74
|
initialHeights.spacingBottom = (_spacing$bottom = spacing.bottom) != null ? _spacing$bottom : 0;
|
|
@@ -122,14 +122,7 @@ export var useGridRowsMeta = function useGridRowsMeta(apiRef, props) {
|
|
|
122
122
|
React.useEffect(function () {
|
|
123
123
|
hydrateRowsMeta();
|
|
124
124
|
}, [rowHeight, filterState, paginationState, sortingState, hydrateRowsMeta]);
|
|
125
|
-
|
|
126
|
-
if (name !== 'rowHeight') {
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
hydrateRowsMeta();
|
|
131
|
-
}, [hydrateRowsMeta]);
|
|
132
|
-
useGridApiEventHandler(apiRef, GridEvents.pipeProcessorRegister, handlepipeProcessorRegister);
|
|
125
|
+
useGridRegisterPipeApplier(apiRef, 'rowHeight', hydrateRowsMeta);
|
|
133
126
|
var rowsMetaApi = {
|
|
134
127
|
unstable_getRowHeight: getTargetRowHeight,
|
|
135
128
|
unstable_getRowInternalSizes: getRowInternalSizes,
|
|
@@ -2,10 +2,12 @@ import _typeof from "@babel/runtime/helpers/esm/typeof";
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { useGridLogger } from '../../utils/useGridLogger';
|
|
4
4
|
import { gridColumnPositionsSelector, gridVisibleColumnDefinitionsSelector } from '../columns/gridColumnsSelector';
|
|
5
|
+
import { useGridSelector } from '../../utils/useGridSelector';
|
|
5
6
|
import { gridPageSelector, gridPageSizeSelector } from '../pagination/gridPaginationSelector';
|
|
6
7
|
import { gridRowCountSelector } from '../rows/gridRowsSelector';
|
|
7
8
|
import { gridRowsMetaSelector } from '../rows/gridRowsMetaSelector';
|
|
8
|
-
import { useGridApiMethod } from '../../utils/useGridApiMethod';
|
|
9
|
+
import { useGridApiMethod } from '../../utils/useGridApiMethod';
|
|
10
|
+
import { gridVisibleSortedRowEntriesSelector } from '../filter/gridFilterSelector'; // Logic copied from https://www.w3.org/TR/wai-aria-practices/examples/listbox/js/listbox.js
|
|
9
11
|
// Similar to https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
|
|
10
12
|
|
|
11
13
|
function scrollIntoView(dimensions) {
|
|
@@ -30,6 +32,8 @@ function scrollIntoView(dimensions) {
|
|
|
30
32
|
* @requires useGridColumns (state) - can be after, async only
|
|
31
33
|
* @requires useGridRows (state) - can be after, async only
|
|
32
34
|
* @requires useGridRowsMeta (state) - can be after, async only
|
|
35
|
+
* @requires useGridFilter (state)
|
|
36
|
+
* @requires useGridColumnSpanning (method)
|
|
33
37
|
*/
|
|
34
38
|
|
|
35
39
|
|
|
@@ -37,6 +41,7 @@ export var useGridScroll = function useGridScroll(apiRef, props) {
|
|
|
37
41
|
var logger = useGridLogger(apiRef, 'useGridScroll');
|
|
38
42
|
var colRef = apiRef.current.columnHeadersElementRef;
|
|
39
43
|
var windowRef = apiRef.current.windowRef;
|
|
44
|
+
var visibleSortedRows = useGridSelector(apiRef, gridVisibleSortedRowEntriesSelector);
|
|
40
45
|
var scrollToIndexes = React.useCallback(function (params) {
|
|
41
46
|
var totalRowCount = gridRowCountSelector(apiRef);
|
|
42
47
|
var visibleColumns = gridVisibleColumnDefinitionsSelector(apiRef);
|
|
@@ -51,10 +56,27 @@ export var useGridScroll = function useGridScroll(apiRef, props) {
|
|
|
51
56
|
|
|
52
57
|
if (params.colIndex != null) {
|
|
53
58
|
var columnPositions = gridColumnPositionsSelector(apiRef);
|
|
59
|
+
var cellWidth;
|
|
60
|
+
|
|
61
|
+
if (typeof params.rowIndex !== 'undefined') {
|
|
62
|
+
var _visibleSortedRows$pa;
|
|
63
|
+
|
|
64
|
+
var rowId = (_visibleSortedRows$pa = visibleSortedRows[params.rowIndex]) == null ? void 0 : _visibleSortedRows$pa.id;
|
|
65
|
+
var cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, params.colIndex);
|
|
66
|
+
|
|
67
|
+
if (cellColSpanInfo && !cellColSpanInfo.spannedByColSpan) {
|
|
68
|
+
cellWidth = cellColSpanInfo.cellProps.width;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (typeof cellWidth === 'undefined') {
|
|
73
|
+
cellWidth = visibleColumns[params.colIndex].computedWidth;
|
|
74
|
+
}
|
|
75
|
+
|
|
54
76
|
scrollCoordinates.left = scrollIntoView({
|
|
55
77
|
clientHeight: windowRef.current.clientWidth,
|
|
56
78
|
scrollTop: windowRef.current.scrollLeft,
|
|
57
|
-
offsetHeight:
|
|
79
|
+
offsetHeight: cellWidth,
|
|
58
80
|
offsetTop: columnPositions[params.colIndex]
|
|
59
81
|
});
|
|
60
82
|
}
|
|
@@ -81,7 +103,7 @@ export var useGridScroll = function useGridScroll(apiRef, props) {
|
|
|
81
103
|
}
|
|
82
104
|
|
|
83
105
|
return false;
|
|
84
|
-
}, [logger, apiRef, windowRef, props.pagination]);
|
|
106
|
+
}, [logger, apiRef, windowRef, props.pagination, visibleSortedRows]);
|
|
85
107
|
var scroll = React.useCallback(function (params) {
|
|
86
108
|
if (windowRef.current && params.left != null && colRef.current) {
|
|
87
109
|
colRef.current.scrollLeft = params.left;
|
|
@@ -14,6 +14,7 @@ import { GRID_CHECKBOX_SELECTION_COL_DEF, GRID_ACTIONS_COLUMN_TYPE } from '../..
|
|
|
14
14
|
import { GridCellModes } from '../../../models/gridEditRowModel';
|
|
15
15
|
import { isKeyboardEvent, isNavigationKey } from '../../../utils/keyboardUtils';
|
|
16
16
|
import { getVisibleRows, useGridVisibleRows } from '../../utils/useGridVisibleRows';
|
|
17
|
+
import { GRID_DETAIL_PANEL_TOGGLE_FIELD } from '../../../constants/gridDetailPanelToggleField';
|
|
17
18
|
|
|
18
19
|
var getSelectionModelPropValue = function getSelectionModelPropValue(selectionModelProp, prevSelectionModel) {
|
|
19
20
|
if (selectionModelProp == null) {
|
|
@@ -265,7 +266,7 @@ export var useGridSelection = function useGridSelection(apiRef, props) {
|
|
|
265
266
|
return;
|
|
266
267
|
}
|
|
267
268
|
|
|
268
|
-
if (params.field ===
|
|
269
|
+
if (params.field === GRID_DETAIL_PANEL_TOGGLE_FIELD) {
|
|
269
270
|
// click to open the detail panel should not select the row
|
|
270
271
|
return;
|
|
271
272
|
}
|
|
@@ -375,7 +376,7 @@ export var useGridSelection = function useGridSelection(apiRef, props) {
|
|
|
375
376
|
selectRows(apiRef.current.getAllRowIds(), true);
|
|
376
377
|
}
|
|
377
378
|
}, [apiRef, handleSingleRowSelection, selectRows, visibleRows.rows, canHaveMultipleSelection]);
|
|
378
|
-
useGridApiEventHandler(apiRef, GridEvents.
|
|
379
|
+
useGridApiEventHandler(apiRef, GridEvents.sortedRowsSet, removeOutdatedSelection);
|
|
379
380
|
useGridApiEventHandler(apiRef, GridEvents.cellClick, handleCellClick);
|
|
380
381
|
useGridApiEventHandler(apiRef, GridEvents.rowSelectionCheckboxChange, handleRowSelectionCheckboxChange);
|
|
381
382
|
useGridApiEventHandler(apiRef, GridEvents.headerSelectionCheckboxChange, handleHeaderSelectionCheckboxChange);
|
|
@@ -86,19 +86,16 @@ export var useGridSorting = function useGridSorting(apiRef, props) {
|
|
|
86
86
|
*/
|
|
87
87
|
|
|
88
88
|
var applySorting = React.useCallback(function () {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
apiRef.current.setState(function (state) {
|
|
90
|
+
if (props.sortingMode === GridFeatureModeConstant.server) {
|
|
91
|
+
logger.debug('Skipping sorting rows as sortingMode = server');
|
|
92
92
|
return _extends({}, state, {
|
|
93
93
|
sorting: _extends({}, state.sorting, {
|
|
94
94
|
sortedRows: gridRowIdsSelector(state, apiRef.current.instanceId)
|
|
95
95
|
})
|
|
96
96
|
});
|
|
97
|
-
}
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
97
|
+
}
|
|
100
98
|
|
|
101
|
-
apiRef.current.setState(function (state) {
|
|
102
99
|
var sortModel = gridSortModelSelector(state, apiRef.current.instanceId);
|
|
103
100
|
var sortRowList = buildAggregatedSortingApplier(sortModel, apiRef);
|
|
104
101
|
var sortedRows = apiRef.current.unstable_applyStrategyProcessor('sorting', {
|
|
@@ -110,6 +107,7 @@ export var useGridSorting = function useGridSorting(apiRef, props) {
|
|
|
110
107
|
})
|
|
111
108
|
});
|
|
112
109
|
});
|
|
110
|
+
apiRef.current.publishEvent(GridEvents.sortedRowsSet);
|
|
113
111
|
apiRef.current.forceUpdate();
|
|
114
112
|
}, [apiRef, logger, props.sortingMode]);
|
|
115
113
|
var setSortModel = React.useCallback(function (model) {
|
|
@@ -3,6 +3,7 @@ import _extends from "@babel/runtime/helpers/esm/extends";
|
|
|
3
3
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
4
4
|
var _excluded = ["style"];
|
|
5
5
|
import * as React from 'react';
|
|
6
|
+
import * as ReactDOM from 'react-dom';
|
|
6
7
|
import { useForkRef } from '@mui/material/utils';
|
|
7
8
|
import { useGridApiContext } from '../../utils/useGridApiContext';
|
|
8
9
|
import { useGridRootProps } from '../../utils/useGridRootProps';
|
|
@@ -17,8 +18,9 @@ import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
|
|
|
17
18
|
import { clamp } from '../../../utils/utils';
|
|
18
19
|
import { selectedIdsLookupSelector } from '../selection/gridSelectionSelector';
|
|
19
20
|
import { gridRowsMetaSelector } from '../rows/gridRowsMetaSelector';
|
|
21
|
+
import { getFirstNonSpannedColumnToRender } from '../columns/gridColumnsUtils'; // Uses binary search to avoid looping through all possible positions
|
|
22
|
+
|
|
20
23
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
21
|
-
// Uses binary search to avoid looping through all possible positions
|
|
22
24
|
export function getIndexFromScroll(offset, positions) {
|
|
23
25
|
var sliceStart = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
24
26
|
var sliceEnd = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : positions.length;
|
|
@@ -35,9 +37,15 @@ export function getIndexFromScroll(offset, positions) {
|
|
|
35
37
|
var itemOffset = positions[pivot];
|
|
36
38
|
return offset <= itemOffset ? getIndexFromScroll(offset, positions, sliceStart, pivot) : getIndexFromScroll(offset, positions, pivot + 1, sliceEnd);
|
|
37
39
|
}
|
|
40
|
+
export var getRenderableIndexes = function getRenderableIndexes(_ref) {
|
|
41
|
+
var firstIndex = _ref.firstIndex,
|
|
42
|
+
lastIndex = _ref.lastIndex,
|
|
43
|
+
buffer = _ref.buffer,
|
|
44
|
+
minFirstIndex = _ref.minFirstIndex,
|
|
45
|
+
maxLastIndex = _ref.maxLastIndex;
|
|
46
|
+
return [clamp(firstIndex - buffer, minFirstIndex, maxLastIndex), clamp(lastIndex + buffer, minFirstIndex, maxLastIndex)];
|
|
47
|
+
};
|
|
38
48
|
export var useGridVirtualScroller = function useGridVirtualScroller(props) {
|
|
39
|
-
var _currentPage$range2;
|
|
40
|
-
|
|
41
49
|
var apiRef = useGridApiContext();
|
|
42
50
|
var rootProps = useGridRootProps();
|
|
43
51
|
var visibleColumns = useGridSelector(apiRef, gridVisibleColumnDefinitionsSelector);
|
|
@@ -89,9 +97,9 @@ export var useGridVirtualScroller = function useGridVirtualScroller(props) {
|
|
|
89
97
|
};
|
|
90
98
|
}
|
|
91
99
|
|
|
92
|
-
var
|
|
93
|
-
top =
|
|
94
|
-
left =
|
|
100
|
+
var _ref2 = scrollPosition.current,
|
|
101
|
+
top = _ref2.top,
|
|
102
|
+
left = _ref2.left;
|
|
95
103
|
var firstRowIndex = getIndexFromScroll(top, rowsMeta.positions);
|
|
96
104
|
var lastRowIndex = rootProps.autoHeight ? firstRowIndex + currentPage.rows.length : getIndexFromScroll(top + rootRef.current.clientHeight, rowsMeta.positions);
|
|
97
105
|
var firstColumnIndex = getIndexFromScroll(left, columnPositions);
|
|
@@ -121,28 +129,17 @@ export var useGridVirtualScroller = function useGridVirtualScroller(props) {
|
|
|
121
129
|
}
|
|
122
130
|
}, []);
|
|
123
131
|
useGridApiEventHandler(apiRef, GridEvents.resize, handleResize);
|
|
124
|
-
|
|
125
|
-
var getRenderableIndexes = function getRenderableIndexes(_ref2) {
|
|
126
|
-
var firstIndex = _ref2.firstIndex,
|
|
127
|
-
lastIndex = _ref2.lastIndex,
|
|
128
|
-
buffer = _ref2.buffer,
|
|
129
|
-
minFirstIndex = _ref2.minFirstIndex,
|
|
130
|
-
maxLastIndex = _ref2.maxLastIndex;
|
|
131
|
-
return [clamp(firstIndex - buffer, minFirstIndex, maxLastIndex), clamp(lastIndex + buffer, minFirstIndex, maxLastIndex)];
|
|
132
|
-
};
|
|
133
|
-
|
|
134
132
|
var updateRenderZonePosition = React.useCallback(function (nextRenderContext) {
|
|
135
|
-
var _currentPage$range;
|
|
136
|
-
|
|
137
133
|
var _getRenderableIndexes = getRenderableIndexes({
|
|
138
134
|
firstIndex: nextRenderContext.firstRowIndex,
|
|
139
135
|
lastIndex: nextRenderContext.lastRowIndex,
|
|
140
136
|
minFirstIndex: 0,
|
|
141
|
-
maxLastIndex:
|
|
137
|
+
maxLastIndex: currentPage.rows.length,
|
|
142
138
|
buffer: rootProps.rowBuffer
|
|
143
139
|
}),
|
|
144
|
-
_getRenderableIndexes2 = _slicedToArray(_getRenderableIndexes,
|
|
145
|
-
firstRowToRender = _getRenderableIndexes2[0]
|
|
140
|
+
_getRenderableIndexes2 = _slicedToArray(_getRenderableIndexes, 2),
|
|
141
|
+
firstRowToRender = _getRenderableIndexes2[0],
|
|
142
|
+
lastRowToRender = _getRenderableIndexes2[1];
|
|
146
143
|
|
|
147
144
|
var _getRenderableIndexes3 = getRenderableIndexes({
|
|
148
145
|
firstIndex: nextRenderContext.firstColumnIndex,
|
|
@@ -152,8 +149,15 @@ export var useGridVirtualScroller = function useGridVirtualScroller(props) {
|
|
|
152
149
|
buffer: rootProps.columnBuffer
|
|
153
150
|
}),
|
|
154
151
|
_getRenderableIndexes4 = _slicedToArray(_getRenderableIndexes3, 1),
|
|
155
|
-
|
|
156
|
-
|
|
152
|
+
initialFirstColumnToRender = _getRenderableIndexes4[0];
|
|
153
|
+
|
|
154
|
+
var firstColumnToRender = getFirstNonSpannedColumnToRender({
|
|
155
|
+
firstColumnToRender: initialFirstColumnToRender,
|
|
156
|
+
apiRef: apiRef,
|
|
157
|
+
firstRowToRender: firstRowToRender,
|
|
158
|
+
lastRowToRender: lastRowToRender,
|
|
159
|
+
visibleRows: currentPage.rows
|
|
160
|
+
});
|
|
157
161
|
var top = gridRowsMetaSelector(apiRef.current.state).positions[firstRowToRender];
|
|
158
162
|
var left = gridColumnPositionsSelector(apiRef)[firstColumnToRender]; // Call directly the selector because it might be outdated when this method is called
|
|
159
163
|
|
|
@@ -165,19 +169,22 @@ export var useGridVirtualScroller = function useGridVirtualScroller(props) {
|
|
|
165
169
|
left: left
|
|
166
170
|
});
|
|
167
171
|
}
|
|
168
|
-
}, [apiRef,
|
|
172
|
+
}, [apiRef, currentPage.rows, onRenderZonePositioning, renderZoneMinColumnIndex, renderZoneMaxColumnIndex, rootProps.columnBuffer, rootProps.rowBuffer]);
|
|
173
|
+
React.useLayoutEffect(function () {
|
|
174
|
+
if (renderContext) {
|
|
175
|
+
updateRenderZonePosition(renderContext);
|
|
176
|
+
}
|
|
177
|
+
}, [renderContext, updateRenderZonePosition]);
|
|
169
178
|
var updateRenderContext = React.useCallback(function (nextRenderContext) {
|
|
170
179
|
setRenderContext(nextRenderContext);
|
|
171
|
-
updateRenderZonePosition(nextRenderContext);
|
|
172
180
|
prevRenderContext.current = nextRenderContext;
|
|
173
|
-
}, [setRenderContext, prevRenderContext
|
|
181
|
+
}, [setRenderContext, prevRenderContext]);
|
|
174
182
|
React.useEffect(function () {
|
|
175
183
|
if (containerWidth == null) {
|
|
176
184
|
return;
|
|
177
185
|
}
|
|
178
186
|
|
|
179
187
|
var initialRenderContext = computeRenderContext();
|
|
180
|
-
prevRenderContext.current = initialRenderContext;
|
|
181
188
|
updateRenderContext(initialRenderContext);
|
|
182
189
|
var _ref3 = scrollPosition.current,
|
|
183
190
|
top = _ref3.top,
|
|
@@ -213,10 +220,13 @@ export var useGridVirtualScroller = function useGridVirtualScroller(props) {
|
|
|
213
220
|
top: scrollTop,
|
|
214
221
|
left: scrollLeft,
|
|
215
222
|
renderContext: shouldSetState ? nextRenderContext : prevRenderContext.current
|
|
216
|
-
});
|
|
223
|
+
}, event);
|
|
217
224
|
|
|
218
225
|
if (shouldSetState) {
|
|
219
|
-
|
|
226
|
+
// Prevents batching render context changes
|
|
227
|
+
ReactDOM.flushSync(function () {
|
|
228
|
+
updateRenderContext(nextRenderContext);
|
|
229
|
+
});
|
|
220
230
|
prevTotalWidth.current = columnsTotalWidth;
|
|
221
231
|
}
|
|
222
232
|
};
|
|
@@ -251,6 +261,18 @@ export var useGridVirtualScroller = function useGridVirtualScroller(props) {
|
|
|
251
261
|
firstRowToRender = _getRenderableIndexes6[0],
|
|
252
262
|
lastRowToRender = _getRenderableIndexes6[1];
|
|
253
263
|
|
|
264
|
+
var renderedRows = [];
|
|
265
|
+
|
|
266
|
+
for (var i = firstRowToRender; i < lastRowToRender; i += 1) {
|
|
267
|
+
var row = currentPage.rows[i];
|
|
268
|
+
renderedRows.push(row);
|
|
269
|
+
apiRef.current.unstable_calculateColSpan({
|
|
270
|
+
rowId: row.id,
|
|
271
|
+
minFirstColumn: minFirstColumn,
|
|
272
|
+
maxLastColumn: maxLastColumn
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
|
|
254
276
|
var _getRenderableIndexes7 = getRenderableIndexes({
|
|
255
277
|
firstIndex: nextRenderContext.firstColumnIndex,
|
|
256
278
|
lastIndex: nextRenderContext.lastColumnIndex,
|
|
@@ -259,20 +281,26 @@ export var useGridVirtualScroller = function useGridVirtualScroller(props) {
|
|
|
259
281
|
buffer: columnBuffer
|
|
260
282
|
}),
|
|
261
283
|
_getRenderableIndexes8 = _slicedToArray(_getRenderableIndexes7, 2),
|
|
262
|
-
|
|
284
|
+
initialFirstColumnToRender = _getRenderableIndexes8[0],
|
|
263
285
|
lastColumnToRender = _getRenderableIndexes8[1];
|
|
264
286
|
|
|
265
|
-
var
|
|
287
|
+
var firstColumnToRender = getFirstNonSpannedColumnToRender({
|
|
288
|
+
firstColumnToRender: initialFirstColumnToRender,
|
|
289
|
+
apiRef: apiRef,
|
|
290
|
+
firstRowToRender: firstRowToRender,
|
|
291
|
+
lastRowToRender: lastRowToRender,
|
|
292
|
+
visibleRows: currentPage.rows
|
|
293
|
+
});
|
|
266
294
|
var renderedColumns = visibleColumns.slice(firstColumnToRender, lastColumnToRender);
|
|
267
295
|
var rows = [];
|
|
268
296
|
|
|
269
|
-
for (var
|
|
297
|
+
for (var _i = 0; _i < renderedRows.length; _i += 1) {
|
|
270
298
|
var _rootProps$components;
|
|
271
299
|
|
|
272
|
-
var _renderedRows$
|
|
273
|
-
_id = _renderedRows$
|
|
274
|
-
_model = _renderedRows$
|
|
275
|
-
var lastVisibleRowIndex = firstRowToRender +
|
|
300
|
+
var _renderedRows$_i = renderedRows[_i],
|
|
301
|
+
_id = _renderedRows$_i.id,
|
|
302
|
+
_model = _renderedRows$_i.model;
|
|
303
|
+
var lastVisibleRowIndex = firstRowToRender + _i === currentPage.rows.length - 1;
|
|
276
304
|
var targetRowHeight = apiRef.current.unstable_getRowHeight(_id);
|
|
277
305
|
var isSelected = void 0;
|
|
278
306
|
|
|
@@ -299,7 +327,7 @@ export var useGridVirtualScroller = function useGridVirtualScroller(props) {
|
|
|
299
327
|
firstColumnToRender: firstColumnToRender,
|
|
300
328
|
lastColumnToRender: lastColumnToRender,
|
|
301
329
|
selected: isSelected,
|
|
302
|
-
index: currentPage.range.firstRowIndex + firstRowToRender +
|
|
330
|
+
index: currentPage.range.firstRowIndex + firstRowToRender + _i,
|
|
303
331
|
containerWidth: availableSpace,
|
|
304
332
|
isLastVisible: lastVisibleRowIndex
|
|
305
333
|
}, typeof getRowProps === 'function' ? getRowProps(_id, _model) : {}, (_rootProps$components = rootProps.componentsProps) == null ? void 0 : _rootProps$components.row), _id));
|
package/legacy/index.js
CHANGED
|
@@ -10,6 +10,7 @@ export { useGridClipboard } from '../hooks/features/clipboard/useGridClipboard';
|
|
|
10
10
|
export { useGridColumnHeaders } from '../hooks/features/columnHeaders/useGridColumnHeaders';
|
|
11
11
|
export { useGridColumnMenu, columnMenuStateInitializer } from '../hooks/features/columnMenu/useGridColumnMenu';
|
|
12
12
|
export { useGridColumns, columnsStateInitializer } from '../hooks/features/columns/useGridColumns';
|
|
13
|
+
export { useGridColumnSpanning } from '../hooks/features/columns/useGridColumnSpanning';
|
|
13
14
|
export { useGridDensity, densityStateInitializer } from '../hooks/features/density/useGridDensity';
|
|
14
15
|
export { useGridCsvExport } from '../hooks/features/export/useGridCsvExport';
|
|
15
16
|
export { useGridPrintExport } from '../hooks/features/export/useGridPrintExport';
|