@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
|
@@ -130,21 +130,31 @@ const useGridFocus = (apiRef, props) => {
|
|
|
130
130
|
rowIndexToFocus += 1;
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
+
const currentPage = (0, _useGridVisibleRows.getVisibleRows)(apiRef, {
|
|
134
|
+
pagination: props.pagination,
|
|
135
|
+
paginationMode: props.paginationMode
|
|
136
|
+
});
|
|
137
|
+
|
|
133
138
|
if (columnIndexToFocus >= visibleColumns.length) {
|
|
134
|
-
// Go to next row if we are
|
|
139
|
+
// Go to next row if we are after the last column
|
|
135
140
|
rowIndexToFocus += 1;
|
|
136
|
-
|
|
141
|
+
|
|
142
|
+
if (rowIndexToFocus < currentPage.rows.length) {
|
|
143
|
+
// Go to first column of the next row if there's one more row
|
|
144
|
+
columnIndexToFocus = 0;
|
|
145
|
+
}
|
|
137
146
|
} else if (columnIndexToFocus < 0) {
|
|
138
|
-
// Go to previous row if we are
|
|
147
|
+
// Go to previous row if we are before the first column
|
|
139
148
|
rowIndexToFocus -= 1;
|
|
140
|
-
|
|
149
|
+
|
|
150
|
+
if (rowIndexToFocus >= 0) {
|
|
151
|
+
// Go to last column of the previous if there's one more row
|
|
152
|
+
columnIndexToFocus = visibleColumns.length - 1;
|
|
153
|
+
}
|
|
141
154
|
}
|
|
142
155
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
paginationMode: props.paginationMode
|
|
146
|
-
});
|
|
147
|
-
rowIndexToFocus = (0, _utils2.clamp)(rowIndexToFocus, currentPage.range.firstRowIndex, currentPage.range.lastRowIndex);
|
|
156
|
+
rowIndexToFocus = (0, _utils2.clamp)(rowIndexToFocus, 0, currentPage.rows.length - 1);
|
|
157
|
+
columnIndexToFocus = (0, _utils2.clamp)(columnIndexToFocus, 0, visibleColumns.length - 1);
|
|
148
158
|
const rowToFocus = currentPage.rows[rowIndexToFocus];
|
|
149
159
|
const columnToFocus = visibleColumns[columnIndexToFocus];
|
|
150
160
|
apiRef.current.setCellFocus(rowToFocus.id, columnToFocus.field);
|
|
@@ -27,6 +27,8 @@ var _gridEditRowModel = require("../../../models/gridEditRowModel");
|
|
|
27
27
|
|
|
28
28
|
var _keyboardUtils = require("../../../utils/keyboardUtils");
|
|
29
29
|
|
|
30
|
+
var _gridDetailPanelToggleField = require("../../../constants/gridDetailPanelToggleField");
|
|
31
|
+
|
|
30
32
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
31
33
|
|
|
32
34
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
@@ -38,20 +40,39 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
38
40
|
* @requires useGridDimensions (method) - can be after
|
|
39
41
|
* @requires useGridFocus (method) - can be after
|
|
40
42
|
* @requires useGridScroll (method) - can be after
|
|
43
|
+
* @requires useGridColumnSpanning (method) - can be after
|
|
41
44
|
*/
|
|
42
45
|
const useGridKeyboardNavigation = (apiRef, props) => {
|
|
43
46
|
const logger = (0, _useGridLogger.useGridLogger)(apiRef, 'useGridKeyboardNavigation');
|
|
44
47
|
const currentPage = (0, _useGridVisibleRows.useGridVisibleRows)(apiRef, props);
|
|
45
|
-
|
|
48
|
+
/**
|
|
49
|
+
* @param {number} colIndex Index of the column to focus
|
|
50
|
+
* @param {number} rowIndex index of the row to focus
|
|
51
|
+
* @param {string} closestColumnToUse Which closest column cell to use when the cell is spanned by `colSpan`.
|
|
52
|
+
*/
|
|
53
|
+
|
|
54
|
+
const goToCell = React.useCallback((colIndex, rowIndex, closestColumnToUse = 'left') => {
|
|
55
|
+
var _visibleSortedRows$ro;
|
|
56
|
+
|
|
57
|
+
const visibleSortedRows = (0, _gridFilterSelector.gridVisibleSortedRowEntriesSelector)(apiRef);
|
|
58
|
+
const rowId = (_visibleSortedRows$ro = visibleSortedRows[rowIndex]) == null ? void 0 : _visibleSortedRows$ro.id;
|
|
59
|
+
const nextCellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, colIndex);
|
|
60
|
+
|
|
61
|
+
if (nextCellColSpanInfo && nextCellColSpanInfo.spannedByColSpan) {
|
|
62
|
+
if (closestColumnToUse === 'left') {
|
|
63
|
+
colIndex = nextCellColSpanInfo.leftVisibleCellIndex;
|
|
64
|
+
} else if (closestColumnToUse === 'right') {
|
|
65
|
+
colIndex = nextCellColSpanInfo.rightVisibleCellIndex;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
46
69
|
logger.debug(`Navigating to cell row ${rowIndex}, col ${colIndex}`);
|
|
47
70
|
apiRef.current.scrollToIndexes({
|
|
48
71
|
colIndex,
|
|
49
72
|
rowIndex
|
|
50
73
|
});
|
|
51
74
|
const field = apiRef.current.getVisibleColumns()[colIndex].field;
|
|
52
|
-
|
|
53
|
-
const node = visibleSortedRows[rowIndex];
|
|
54
|
-
apiRef.current.setCellFocus(node.id, field);
|
|
75
|
+
apiRef.current.setCellFocus(rowId, field);
|
|
55
76
|
}, [apiRef, logger]);
|
|
56
77
|
const goToHeader = React.useCallback((colIndex, event) => {
|
|
57
78
|
logger.debug(`Navigating to header col ${colIndex}`);
|
|
@@ -104,7 +125,7 @@ const useGridKeyboardNavigation = (apiRef, props) => {
|
|
|
104
125
|
case 'ArrowRight':
|
|
105
126
|
{
|
|
106
127
|
if (colIndexBefore < lastColIndex) {
|
|
107
|
-
goToCell(colIndexBefore + 1, rowIndexBefore);
|
|
128
|
+
goToCell(colIndexBefore + 1, rowIndexBefore, 'right');
|
|
108
129
|
}
|
|
109
130
|
|
|
110
131
|
break;
|
|
@@ -123,9 +144,9 @@ const useGridKeyboardNavigation = (apiRef, props) => {
|
|
|
123
144
|
{
|
|
124
145
|
// "Tab" is only triggered by the row / cell editing feature
|
|
125
146
|
if (event.shiftKey && colIndexBefore > firstColIndex) {
|
|
126
|
-
goToCell(colIndexBefore - 1, rowIndexBefore);
|
|
147
|
+
goToCell(colIndexBefore - 1, rowIndexBefore, 'left');
|
|
127
148
|
} else if (!event.shiftKey && colIndexBefore < lastColIndex) {
|
|
128
|
-
goToCell(colIndexBefore + 1, rowIndexBefore);
|
|
149
|
+
goToCell(colIndexBefore + 1, rowIndexBefore, 'right');
|
|
129
150
|
}
|
|
130
151
|
|
|
131
152
|
break;
|
|
@@ -133,6 +154,18 @@ const useGridKeyboardNavigation = (apiRef, props) => {
|
|
|
133
154
|
|
|
134
155
|
case ' ':
|
|
135
156
|
{
|
|
157
|
+
const field = params.field;
|
|
158
|
+
|
|
159
|
+
if (field === _gridDetailPanelToggleField.GRID_DETAIL_PANEL_TOGGLE_FIELD) {
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const colDef = params.colDef;
|
|
164
|
+
|
|
165
|
+
if (colDef && colDef.type === 'treeDataGroup') {
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
|
|
136
169
|
if (!event.shiftKey && rowIndexBefore < lastRowIndexInPage) {
|
|
137
170
|
goToCell(colIndexBefore, Math.min(rowIndexBefore + viewportPageSize, lastRowIndexInPage));
|
|
138
171
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.gridTopLevelRowCountSelector = exports.gridRowsStateSelector = exports.gridRowsLookupSelector = exports.gridRowTreeSelector = exports.gridRowTreeDepthSelector = exports.gridRowIdsSelector = exports.gridRowGroupingNameSelector = exports.gridRowCountSelector = void 0;
|
|
6
|
+
exports.gridTopLevelRowCountSelector = exports.gridRowsStateSelector = exports.gridRowsLookupSelector = exports.gridRowsLoadingSelector = exports.gridRowTreeSelector = exports.gridRowTreeDepthSelector = exports.gridRowIdsSelector = exports.gridRowGroupingNameSelector = exports.gridRowCountSelector = void 0;
|
|
7
7
|
|
|
8
8
|
var _createSelector = require("../../../utils/createSelector");
|
|
9
9
|
|
|
@@ -12,6 +12,8 @@ const gridRowsStateSelector = state => state.rows;
|
|
|
12
12
|
exports.gridRowsStateSelector = gridRowsStateSelector;
|
|
13
13
|
const gridRowCountSelector = (0, _createSelector.createSelector)(gridRowsStateSelector, rows => rows.totalRowCount);
|
|
14
14
|
exports.gridRowCountSelector = gridRowCountSelector;
|
|
15
|
+
const gridRowsLoadingSelector = (0, _createSelector.createSelector)(gridRowsStateSelector, rows => rows.loading);
|
|
16
|
+
exports.gridRowsLoadingSelector = gridRowsLoadingSelector;
|
|
15
17
|
const gridTopLevelRowCountSelector = (0, _createSelector.createSelector)(gridRowsStateSelector, rows => rows.totalTopLevelRowCount);
|
|
16
18
|
exports.gridTopLevelRowCountSelector = gridTopLevelRowCountSelector;
|
|
17
19
|
const gridRowsLookupSelector = (0, _createSelector.createSelector)(gridRowsStateSelector, rows => rows.idRowsLookup);
|
|
@@ -64,7 +64,7 @@ const convertGridRowsPropToState = ({
|
|
|
64
64
|
};
|
|
65
65
|
};
|
|
66
66
|
|
|
67
|
-
const getRowsStateFromCache = (rowsCache, previousTree, apiRef, rowCountProp) => {
|
|
67
|
+
const getRowsStateFromCache = (rowsCache, previousTree, apiRef, rowCountProp, loadingProp) => {
|
|
68
68
|
const {
|
|
69
69
|
value
|
|
70
70
|
} = rowsCache.state;
|
|
@@ -74,6 +74,7 @@ const getRowsStateFromCache = (rowsCache, previousTree, apiRef, rowCountProp) =>
|
|
|
74
74
|
}));
|
|
75
75
|
const dataTopLevelRowCount = groupingResponse.treeDepth === 1 ? groupingResponse.ids.length : Object.values(groupingResponse.tree).filter(node => node.parent == null).length;
|
|
76
76
|
return (0, _extends2.default)({}, groupingResponse, {
|
|
77
|
+
loading: loadingProp,
|
|
77
78
|
totalRowCount: Math.max(rowCount, groupingResponse.ids.length),
|
|
78
79
|
totalTopLevelRowCount: Math.max(rowCount, dataTopLevelRowCount)
|
|
79
80
|
});
|
|
@@ -96,7 +97,7 @@ const rowsStateInitializer = (state, props, apiRef) => {
|
|
|
96
97
|
lastUpdateMs: Date.now()
|
|
97
98
|
};
|
|
98
99
|
return (0, _extends2.default)({}, state, {
|
|
99
|
-
rows: getRowsStateFromCache(rowsCache, null, apiRef, props.rowCount),
|
|
100
|
+
rows: getRowsStateFromCache(rowsCache, null, apiRef, props.rowCount, props.loading),
|
|
100
101
|
rowsCache // TODO remove from state
|
|
101
102
|
|
|
102
103
|
});
|
|
@@ -130,7 +131,7 @@ const useGridRows = (apiRef, props) => {
|
|
|
130
131
|
rowsCache.current.timeout = null;
|
|
131
132
|
rowsCache.current.lastUpdateMs = Date.now();
|
|
132
133
|
apiRef.current.setState(state => (0, _extends2.default)({}, state, {
|
|
133
|
-
rows: getRowsStateFromCache(rowsCache.current, (0, _gridRowsSelector.gridRowTreeSelector)(apiRef), apiRef, props.rowCount)
|
|
134
|
+
rows: getRowsStateFromCache(rowsCache.current, (0, _gridRowsSelector.gridRowTreeSelector)(apiRef), apiRef, props.rowCount, props.loading)
|
|
134
135
|
}));
|
|
135
136
|
apiRef.current.publishEvent(_events.GridEvents.rowsSet);
|
|
136
137
|
apiRef.current.forceUpdate();
|
|
@@ -156,7 +157,7 @@ const useGridRows = (apiRef, props) => {
|
|
|
156
157
|
}
|
|
157
158
|
|
|
158
159
|
run();
|
|
159
|
-
}, [props.throttleRowsMs, props.rowCount, apiRef]);
|
|
160
|
+
}, [props.throttleRowsMs, props.rowCount, props.loading, apiRef]);
|
|
160
161
|
/**
|
|
161
162
|
* API METHODS
|
|
162
163
|
*/
|
|
@@ -25,9 +25,7 @@ var _gridPaginationSelector = require("../pagination/gridPaginationSelector");
|
|
|
25
25
|
|
|
26
26
|
var _gridSortingSelector = require("../sorting/gridSortingSelector");
|
|
27
27
|
|
|
28
|
-
var
|
|
29
|
-
|
|
30
|
-
var _useGridApiEventHandler = require("../../utils/useGridApiEventHandler");
|
|
28
|
+
var _pipeProcessing = require("../../core/pipeProcessing");
|
|
31
29
|
|
|
32
30
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
33
31
|
|
|
@@ -92,10 +90,11 @@ const useGridRowsMeta = (apiRef, props) => {
|
|
|
92
90
|
if (getRowSpacing) {
|
|
93
91
|
var _spacing$top, _spacing$bottom;
|
|
94
92
|
|
|
95
|
-
const
|
|
93
|
+
const indexRelativeToCurrentPage = apiRef.current.getRowIndexRelativeToVisibleRows(row.id);
|
|
96
94
|
const spacing = getRowSpacing((0, _extends2.default)({}, row, {
|
|
97
|
-
isFirstVisible:
|
|
98
|
-
isLastVisible:
|
|
95
|
+
isFirstVisible: indexRelativeToCurrentPage === 0,
|
|
96
|
+
isLastVisible: indexRelativeToCurrentPage === currentPage.rows.length - 1,
|
|
97
|
+
indexRelativeToCurrentPage
|
|
99
98
|
}));
|
|
100
99
|
initialHeights.spacingTop = (_spacing$top = spacing.top) != null ? _spacing$top : 0;
|
|
101
100
|
initialHeights.spacingBottom = (_spacing$bottom = spacing.bottom) != null ? _spacing$bottom : 0;
|
|
@@ -147,14 +146,7 @@ const useGridRowsMeta = (apiRef, props) => {
|
|
|
147
146
|
React.useEffect(() => {
|
|
148
147
|
hydrateRowsMeta();
|
|
149
148
|
}, [rowHeight, filterState, paginationState, sortingState, hydrateRowsMeta]);
|
|
150
|
-
|
|
151
|
-
if (name !== 'rowHeight') {
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
hydrateRowsMeta();
|
|
156
|
-
}, [hydrateRowsMeta]);
|
|
157
|
-
(0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _gridEvents.GridEvents.pipeProcessorRegister, handlepipeProcessorRegister);
|
|
149
|
+
(0, _pipeProcessing.useGridRegisterPipeApplier)(apiRef, 'rowHeight', hydrateRowsMeta);
|
|
158
150
|
const rowsMetaApi = {
|
|
159
151
|
unstable_getRowHeight: getTargetRowHeight,
|
|
160
152
|
unstable_getRowInternalSizes: getRowInternalSizes,
|
|
@@ -11,6 +11,8 @@ var _useGridLogger = require("../../utils/useGridLogger");
|
|
|
11
11
|
|
|
12
12
|
var _gridColumnsSelector = require("../columns/gridColumnsSelector");
|
|
13
13
|
|
|
14
|
+
var _useGridSelector = require("../../utils/useGridSelector");
|
|
15
|
+
|
|
14
16
|
var _gridPaginationSelector = require("../pagination/gridPaginationSelector");
|
|
15
17
|
|
|
16
18
|
var _gridRowsSelector = require("../rows/gridRowsSelector");
|
|
@@ -19,6 +21,8 @@ var _gridRowsMetaSelector = require("../rows/gridRowsMetaSelector");
|
|
|
19
21
|
|
|
20
22
|
var _useGridApiMethod = require("../../utils/useGridApiMethod");
|
|
21
23
|
|
|
24
|
+
var _gridFilterSelector = require("../filter/gridFilterSelector");
|
|
25
|
+
|
|
22
26
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
23
27
|
|
|
24
28
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
@@ -49,6 +53,8 @@ function scrollIntoView(dimensions) {
|
|
|
49
53
|
* @requires useGridColumns (state) - can be after, async only
|
|
50
54
|
* @requires useGridRows (state) - can be after, async only
|
|
51
55
|
* @requires useGridRowsMeta (state) - can be after, async only
|
|
56
|
+
* @requires useGridFilter (state)
|
|
57
|
+
* @requires useGridColumnSpanning (method)
|
|
52
58
|
*/
|
|
53
59
|
|
|
54
60
|
|
|
@@ -56,6 +62,7 @@ const useGridScroll = (apiRef, props) => {
|
|
|
56
62
|
const logger = (0, _useGridLogger.useGridLogger)(apiRef, 'useGridScroll');
|
|
57
63
|
const colRef = apiRef.current.columnHeadersElementRef;
|
|
58
64
|
const windowRef = apiRef.current.windowRef;
|
|
65
|
+
const visibleSortedRows = (0, _useGridSelector.useGridSelector)(apiRef, _gridFilterSelector.gridVisibleSortedRowEntriesSelector);
|
|
59
66
|
const scrollToIndexes = React.useCallback(params => {
|
|
60
67
|
const totalRowCount = (0, _gridRowsSelector.gridRowCountSelector)(apiRef);
|
|
61
68
|
const visibleColumns = (0, _gridColumnsSelector.gridVisibleColumnDefinitionsSelector)(apiRef);
|
|
@@ -70,10 +77,27 @@ const useGridScroll = (apiRef, props) => {
|
|
|
70
77
|
|
|
71
78
|
if (params.colIndex != null) {
|
|
72
79
|
const columnPositions = (0, _gridColumnsSelector.gridColumnPositionsSelector)(apiRef);
|
|
80
|
+
let cellWidth;
|
|
81
|
+
|
|
82
|
+
if (typeof params.rowIndex !== 'undefined') {
|
|
83
|
+
var _visibleSortedRows$pa;
|
|
84
|
+
|
|
85
|
+
const rowId = (_visibleSortedRows$pa = visibleSortedRows[params.rowIndex]) == null ? void 0 : _visibleSortedRows$pa.id;
|
|
86
|
+
const cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, params.colIndex);
|
|
87
|
+
|
|
88
|
+
if (cellColSpanInfo && !cellColSpanInfo.spannedByColSpan) {
|
|
89
|
+
cellWidth = cellColSpanInfo.cellProps.width;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (typeof cellWidth === 'undefined') {
|
|
94
|
+
cellWidth = visibleColumns[params.colIndex].computedWidth;
|
|
95
|
+
}
|
|
96
|
+
|
|
73
97
|
scrollCoordinates.left = scrollIntoView({
|
|
74
98
|
clientHeight: windowRef.current.clientWidth,
|
|
75
99
|
scrollTop: windowRef.current.scrollLeft,
|
|
76
|
-
offsetHeight:
|
|
100
|
+
offsetHeight: cellWidth,
|
|
77
101
|
offsetTop: columnPositions[params.colIndex]
|
|
78
102
|
});
|
|
79
103
|
}
|
|
@@ -100,7 +124,7 @@ const useGridScroll = (apiRef, props) => {
|
|
|
100
124
|
}
|
|
101
125
|
|
|
102
126
|
return false;
|
|
103
|
-
}, [logger, apiRef, windowRef, props.pagination]);
|
|
127
|
+
}, [logger, apiRef, windowRef, props.pagination, visibleSortedRows]);
|
|
104
128
|
const scroll = React.useCallback(params => {
|
|
105
129
|
if (windowRef.current && params.left != null && colRef.current) {
|
|
106
130
|
colRef.current.scrollLeft = params.left;
|
|
@@ -37,6 +37,8 @@ var _keyboardUtils = require("../../../utils/keyboardUtils");
|
|
|
37
37
|
|
|
38
38
|
var _useGridVisibleRows = require("../../utils/useGridVisibleRows");
|
|
39
39
|
|
|
40
|
+
var _gridDetailPanelToggleField = require("../../../constants/gridDetailPanelToggleField");
|
|
41
|
+
|
|
40
42
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
41
43
|
|
|
42
44
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
@@ -268,7 +270,7 @@ const useGridSelection = (apiRef, props) => {
|
|
|
268
270
|
return;
|
|
269
271
|
}
|
|
270
272
|
|
|
271
|
-
if (params.field ===
|
|
273
|
+
if (params.field === _gridDetailPanelToggleField.GRID_DETAIL_PANEL_TOGGLE_FIELD) {
|
|
272
274
|
// click to open the detail panel should not select the row
|
|
273
275
|
return;
|
|
274
276
|
}
|
|
@@ -376,7 +378,7 @@ const useGridSelection = (apiRef, props) => {
|
|
|
376
378
|
selectRows(apiRef.current.getAllRowIds(), true);
|
|
377
379
|
}
|
|
378
380
|
}, [apiRef, handleSingleRowSelection, selectRows, visibleRows.rows, canHaveMultipleSelection]);
|
|
379
|
-
(0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.
|
|
381
|
+
(0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.sortedRowsSet, removeOutdatedSelection);
|
|
380
382
|
(0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.cellClick, handleCellClick);
|
|
381
383
|
(0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.rowSelectionCheckboxChange, handleRowSelectionCheckboxChange);
|
|
382
384
|
(0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.headerSelectionCheckboxChange, handleHeaderSelectionCheckboxChange);
|
|
@@ -111,17 +111,16 @@ const useGridSorting = (apiRef, props) => {
|
|
|
111
111
|
*/
|
|
112
112
|
|
|
113
113
|
const applySorting = React.useCallback(() => {
|
|
114
|
-
if (props.sortingMode === _gridFeatureMode.GridFeatureModeConstant.server) {
|
|
115
|
-
logger.debug('Skipping sorting rows as sortingMode = server');
|
|
116
|
-
apiRef.current.setState(state => (0, _extends2.default)({}, state, {
|
|
117
|
-
sorting: (0, _extends2.default)({}, state.sorting, {
|
|
118
|
-
sortedRows: (0, _rows.gridRowIdsSelector)(state, apiRef.current.instanceId)
|
|
119
|
-
})
|
|
120
|
-
}));
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
114
|
apiRef.current.setState(state => {
|
|
115
|
+
if (props.sortingMode === _gridFeatureMode.GridFeatureModeConstant.server) {
|
|
116
|
+
logger.debug('Skipping sorting rows as sortingMode = server');
|
|
117
|
+
return (0, _extends2.default)({}, state, {
|
|
118
|
+
sorting: (0, _extends2.default)({}, state.sorting, {
|
|
119
|
+
sortedRows: (0, _rows.gridRowIdsSelector)(state, apiRef.current.instanceId)
|
|
120
|
+
})
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
|
|
125
124
|
const sortModel = (0, _gridSortingSelector.gridSortModelSelector)(state, apiRef.current.instanceId);
|
|
126
125
|
const sortRowList = (0, _gridSortingUtils.buildAggregatedSortingApplier)(sortModel, apiRef);
|
|
127
126
|
const sortedRows = apiRef.current.unstable_applyStrategyProcessor('sorting', {
|
|
@@ -133,6 +132,7 @@ const useGridSorting = (apiRef, props) => {
|
|
|
133
132
|
})
|
|
134
133
|
});
|
|
135
134
|
});
|
|
135
|
+
apiRef.current.publishEvent(_events.GridEvents.sortedRowsSet);
|
|
136
136
|
apiRef.current.forceUpdate();
|
|
137
137
|
}, [apiRef, logger, props.sortingMode]);
|
|
138
138
|
const setSortModel = React.useCallback(model => {
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports.getIndexFromScroll = getIndexFromScroll;
|
|
9
|
-
exports.useGridVirtualScroller = void 0;
|
|
9
|
+
exports.useGridVirtualScroller = exports.getRenderableIndexes = void 0;
|
|
10
10
|
|
|
11
11
|
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
12
12
|
|
|
@@ -14,6 +14,8 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
|
|
|
14
14
|
|
|
15
15
|
var React = _interopRequireWildcard(require("react"));
|
|
16
16
|
|
|
17
|
+
var ReactDOM = _interopRequireWildcard(require("react-dom"));
|
|
18
|
+
|
|
17
19
|
var _utils = require("@mui/material/utils");
|
|
18
20
|
|
|
19
21
|
var _useGridApiContext = require("../../utils/useGridApiContext");
|
|
@@ -42,6 +44,8 @@ var _gridSelectionSelector = require("../selection/gridSelectionSelector");
|
|
|
42
44
|
|
|
43
45
|
var _gridRowsMetaSelector = require("../rows/gridRowsMetaSelector");
|
|
44
46
|
|
|
47
|
+
var _gridColumnsUtils = require("../columns/gridColumnsUtils");
|
|
48
|
+
|
|
45
49
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
46
50
|
|
|
47
51
|
const _excluded = ["style"];
|
|
@@ -65,9 +69,19 @@ function getIndexFromScroll(offset, positions, sliceStart = 0, sliceEnd = positi
|
|
|
65
69
|
return offset <= itemOffset ? getIndexFromScroll(offset, positions, sliceStart, pivot) : getIndexFromScroll(offset, positions, pivot + 1, sliceEnd);
|
|
66
70
|
}
|
|
67
71
|
|
|
68
|
-
const
|
|
69
|
-
|
|
72
|
+
const getRenderableIndexes = ({
|
|
73
|
+
firstIndex,
|
|
74
|
+
lastIndex,
|
|
75
|
+
buffer,
|
|
76
|
+
minFirstIndex,
|
|
77
|
+
maxLastIndex
|
|
78
|
+
}) => {
|
|
79
|
+
return [(0, _utils2.clamp)(firstIndex - buffer, minFirstIndex, maxLastIndex), (0, _utils2.clamp)(lastIndex + buffer, minFirstIndex, maxLastIndex)];
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
exports.getRenderableIndexes = getRenderableIndexes;
|
|
70
83
|
|
|
84
|
+
const useGridVirtualScroller = props => {
|
|
71
85
|
const apiRef = (0, _useGridApiContext.useGridApiContext)();
|
|
72
86
|
const rootProps = (0, _useGridRootProps.useGridRootProps)();
|
|
73
87
|
const visibleColumns = (0, _useGridSelector.useGridSelector)(apiRef, _gridColumnsSelector.gridVisibleColumnDefinitionsSelector);
|
|
@@ -142,34 +156,28 @@ const useGridVirtualScroller = props => {
|
|
|
142
156
|
}
|
|
143
157
|
}, []);
|
|
144
158
|
(0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.resize, handleResize);
|
|
145
|
-
|
|
146
|
-
const getRenderableIndexes = ({
|
|
147
|
-
firstIndex,
|
|
148
|
-
lastIndex,
|
|
149
|
-
buffer,
|
|
150
|
-
minFirstIndex,
|
|
151
|
-
maxLastIndex
|
|
152
|
-
}) => {
|
|
153
|
-
return [(0, _utils2.clamp)(firstIndex - buffer, minFirstIndex, maxLastIndex), (0, _utils2.clamp)(lastIndex + buffer, minFirstIndex, maxLastIndex)];
|
|
154
|
-
};
|
|
155
|
-
|
|
156
159
|
const updateRenderZonePosition = React.useCallback(nextRenderContext => {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
const [firstRowToRender] = getRenderableIndexes({
|
|
160
|
+
const [firstRowToRender, lastRowToRender] = getRenderableIndexes({
|
|
160
161
|
firstIndex: nextRenderContext.firstRowIndex,
|
|
161
162
|
lastIndex: nextRenderContext.lastRowIndex,
|
|
162
163
|
minFirstIndex: 0,
|
|
163
|
-
maxLastIndex:
|
|
164
|
+
maxLastIndex: currentPage.rows.length,
|
|
164
165
|
buffer: rootProps.rowBuffer
|
|
165
166
|
});
|
|
166
|
-
const [
|
|
167
|
+
const [initialFirstColumnToRender] = getRenderableIndexes({
|
|
167
168
|
firstIndex: nextRenderContext.firstColumnIndex,
|
|
168
169
|
lastIndex: nextRenderContext.lastColumnIndex,
|
|
169
170
|
minFirstIndex: renderZoneMinColumnIndex,
|
|
170
171
|
maxLastIndex: renderZoneMaxColumnIndex,
|
|
171
172
|
buffer: rootProps.columnBuffer
|
|
172
173
|
});
|
|
174
|
+
const firstColumnToRender = (0, _gridColumnsUtils.getFirstNonSpannedColumnToRender)({
|
|
175
|
+
firstColumnToRender: initialFirstColumnToRender,
|
|
176
|
+
apiRef,
|
|
177
|
+
firstRowToRender,
|
|
178
|
+
lastRowToRender,
|
|
179
|
+
visibleRows: currentPage.rows
|
|
180
|
+
});
|
|
173
181
|
const top = (0, _gridRowsMetaSelector.gridRowsMetaSelector)(apiRef.current.state).positions[firstRowToRender];
|
|
174
182
|
const left = (0, _gridColumnsSelector.gridColumnPositionsSelector)(apiRef)[firstColumnToRender]; // Call directly the selector because it might be outdated when this method is called
|
|
175
183
|
|
|
@@ -181,19 +189,22 @@ const useGridVirtualScroller = props => {
|
|
|
181
189
|
left
|
|
182
190
|
});
|
|
183
191
|
}
|
|
184
|
-
}, [apiRef,
|
|
192
|
+
}, [apiRef, currentPage.rows, onRenderZonePositioning, renderZoneMinColumnIndex, renderZoneMaxColumnIndex, rootProps.columnBuffer, rootProps.rowBuffer]);
|
|
193
|
+
React.useLayoutEffect(() => {
|
|
194
|
+
if (renderContext) {
|
|
195
|
+
updateRenderZonePosition(renderContext);
|
|
196
|
+
}
|
|
197
|
+
}, [renderContext, updateRenderZonePosition]);
|
|
185
198
|
const updateRenderContext = React.useCallback(nextRenderContext => {
|
|
186
199
|
setRenderContext(nextRenderContext);
|
|
187
|
-
updateRenderZonePosition(nextRenderContext);
|
|
188
200
|
prevRenderContext.current = nextRenderContext;
|
|
189
|
-
}, [setRenderContext, prevRenderContext
|
|
201
|
+
}, [setRenderContext, prevRenderContext]);
|
|
190
202
|
React.useEffect(() => {
|
|
191
203
|
if (containerWidth == null) {
|
|
192
204
|
return;
|
|
193
205
|
}
|
|
194
206
|
|
|
195
207
|
const initialRenderContext = computeRenderContext();
|
|
196
|
-
prevRenderContext.current = initialRenderContext;
|
|
197
208
|
updateRenderContext(initialRenderContext);
|
|
198
209
|
const {
|
|
199
210
|
top,
|
|
@@ -231,10 +242,13 @@ const useGridVirtualScroller = props => {
|
|
|
231
242
|
top: scrollTop,
|
|
232
243
|
left: scrollLeft,
|
|
233
244
|
renderContext: shouldSetState ? nextRenderContext : prevRenderContext.current
|
|
234
|
-
});
|
|
245
|
+
}, event);
|
|
235
246
|
|
|
236
247
|
if (shouldSetState) {
|
|
237
|
-
|
|
248
|
+
// Prevents batching render context changes
|
|
249
|
+
ReactDOM.flushSync(() => {
|
|
250
|
+
updateRenderContext(nextRenderContext);
|
|
251
|
+
});
|
|
238
252
|
prevTotalWidth.current = columnsTotalWidth;
|
|
239
253
|
}
|
|
240
254
|
};
|
|
@@ -262,14 +276,32 @@ const useGridVirtualScroller = props => {
|
|
|
262
276
|
maxLastIndex: currentPage.rows.length,
|
|
263
277
|
buffer: rowBuffer
|
|
264
278
|
});
|
|
265
|
-
const
|
|
279
|
+
const renderedRows = [];
|
|
280
|
+
|
|
281
|
+
for (let i = firstRowToRender; i < lastRowToRender; i += 1) {
|
|
282
|
+
const row = currentPage.rows[i];
|
|
283
|
+
renderedRows.push(row);
|
|
284
|
+
apiRef.current.unstable_calculateColSpan({
|
|
285
|
+
rowId: row.id,
|
|
286
|
+
minFirstColumn,
|
|
287
|
+
maxLastColumn
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
const [initialFirstColumnToRender, lastColumnToRender] = getRenderableIndexes({
|
|
266
292
|
firstIndex: nextRenderContext.firstColumnIndex,
|
|
267
293
|
lastIndex: nextRenderContext.lastColumnIndex,
|
|
268
294
|
minFirstIndex: minFirstColumn,
|
|
269
295
|
maxLastIndex: maxLastColumn,
|
|
270
296
|
buffer: columnBuffer
|
|
271
297
|
});
|
|
272
|
-
const
|
|
298
|
+
const firstColumnToRender = (0, _gridColumnsUtils.getFirstNonSpannedColumnToRender)({
|
|
299
|
+
firstColumnToRender: initialFirstColumnToRender,
|
|
300
|
+
apiRef,
|
|
301
|
+
firstRowToRender,
|
|
302
|
+
lastRowToRender,
|
|
303
|
+
visibleRows: currentPage.rows
|
|
304
|
+
});
|
|
273
305
|
const renderedColumns = visibleColumns.slice(firstColumnToRender, lastColumnToRender);
|
|
274
306
|
const rows = [];
|
|
275
307
|
|
package/node/index.js
CHANGED
package/node/internals/index.js
CHANGED
|
@@ -159,6 +159,12 @@ Object.defineProperty(exports, "useGridColumnMenu", {
|
|
|
159
159
|
return _useGridColumnMenu.useGridColumnMenu;
|
|
160
160
|
}
|
|
161
161
|
});
|
|
162
|
+
Object.defineProperty(exports, "useGridColumnSpanning", {
|
|
163
|
+
enumerable: true,
|
|
164
|
+
get: function () {
|
|
165
|
+
return _useGridColumnSpanning.useGridColumnSpanning;
|
|
166
|
+
}
|
|
167
|
+
});
|
|
162
168
|
Object.defineProperty(exports, "useGridColumns", {
|
|
163
169
|
enumerable: true,
|
|
164
170
|
get: function () {
|
|
@@ -352,6 +358,8 @@ var _useGridColumnMenu = require("../hooks/features/columnMenu/useGridColumnMenu
|
|
|
352
358
|
|
|
353
359
|
var _useGridColumns = require("../hooks/features/columns/useGridColumns");
|
|
354
360
|
|
|
361
|
+
var _useGridColumnSpanning = require("../hooks/features/columns/useGridColumnSpanning");
|
|
362
|
+
|
|
355
363
|
var _useGridDensity = require("../hooks/features/density/useGridDensity");
|
|
356
364
|
|
|
357
365
|
var _useGridCsvExport = require("../hooks/features/export/useGridCsvExport");
|