@mui/x-data-grid 5.12.1 → 5.12.2
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 +45 -2
- package/colDef/gridCheckboxSelectionColDef.d.ts +1 -0
- package/colDef/gridCheckboxSelectionColDef.js +2 -1
- package/colDef/gridDateOperators.d.ts +1 -1
- package/colDef/gridNumericColDef.js +1 -1
- package/components/columnHeaders/GridColumnHeaderItem.js +5 -3
- package/components/columnSelection/GridCellCheckboxRenderer.js +0 -1
- package/components/columnSelection/GridHeaderCheckbox.js +0 -1
- package/components/containers/GridRootStyles.js +1 -1
- package/components/panel/GridColumnsPanel.js +2 -5
- package/components/panel/filterPanel/GridFilterPanel.js +1 -2
- package/components/toolbar/GridToolbarColumnsButton.js +0 -1
- package/components/toolbar/GridToolbarDensitySelector.js +0 -1
- package/components/toolbar/GridToolbarExportContainer.js +0 -1
- package/components/toolbar/GridToolbarFilterButton.js +0 -1
- package/constants/localeTextConstants.js +1 -0
- package/hooks/features/columns/useGridColumnSpanning.d.ts +1 -1
- package/hooks/features/columns/useGridColumnSpanning.js +1 -1
- package/hooks/features/columns/useGridColumns.d.ts +1 -1
- package/hooks/features/dimensions/gridDimensionsApi.d.ts +5 -0
- package/hooks/features/dimensions/useGridDimensions.js +9 -8
- package/hooks/features/filter/gridFilterState.d.ts +1 -1
- package/hooks/features/filter/useGridFilter.d.ts +1 -1
- package/hooks/features/rows/useGridRowsMeta.js +79 -77
- package/hooks/features/selection/useGridSelectionPreProcessors.js +8 -6
- package/hooks/features/sorting/useGridSorting.d.ts +1 -1
- package/hooks/features/virtualization/useGridVirtualScroller.d.ts +1 -1
- package/hooks/features/virtualization/useGridVirtualScroller.js +42 -8
- package/index.js +1 -1
- package/legacy/colDef/gridCheckboxSelectionColDef.js +2 -1
- package/legacy/colDef/gridNumericColDef.js +1 -1
- package/legacy/components/columnHeaders/GridColumnHeaderItem.js +5 -3
- package/legacy/components/columnSelection/GridCellCheckboxRenderer.js +0 -1
- package/legacy/components/columnSelection/GridHeaderCheckbox.js +0 -1
- package/legacy/components/containers/GridRootStyles.js +1 -1
- package/legacy/components/panel/GridColumnsPanel.js +2 -5
- package/legacy/components/panel/filterPanel/GridFilterPanel.js +1 -2
- package/legacy/components/toolbar/GridToolbarColumnsButton.js +0 -1
- package/legacy/components/toolbar/GridToolbarDensitySelector.js +0 -1
- package/legacy/components/toolbar/GridToolbarExportContainer.js +0 -1
- package/legacy/components/toolbar/GridToolbarFilterButton.js +0 -1
- package/legacy/constants/localeTextConstants.js +1 -0
- package/legacy/hooks/features/columns/useGridColumnSpanning.js +1 -1
- package/legacy/hooks/features/dimensions/useGridDimensions.js +9 -8
- package/legacy/hooks/features/rows/useGridRowsMeta.js +81 -77
- package/legacy/hooks/features/selection/useGridSelectionPreProcessors.js +8 -6
- package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +42 -8
- package/legacy/index.js +1 -1
- package/legacy/locales/arSD.js +1 -0
- package/legacy/locales/bgBG.js +1 -0
- package/legacy/locales/csCZ.js +1 -0
- package/legacy/locales/daDK.js +1 -0
- package/legacy/locales/deDE.js +1 -0
- package/legacy/locales/elGR.js +1 -0
- package/legacy/locales/esES.js +1 -0
- package/legacy/locales/faIR.js +1 -0
- package/legacy/locales/fiFI.js +1 -0
- package/legacy/locales/frFR.js +1 -0
- package/legacy/locales/heIL.js +1 -0
- package/legacy/locales/huHU.js +1 -0
- package/legacy/locales/itIT.js +1 -0
- package/legacy/locales/jaJP.js +1 -0
- package/legacy/locales/koKR.js +1 -0
- package/legacy/locales/nbNO.js +1 -0
- package/legacy/locales/nlNL.js +1 -0
- package/legacy/locales/plPL.js +1 -0
- package/legacy/locales/ptBR.js +1 -0
- package/legacy/locales/ruRU.js +1 -0
- package/legacy/locales/skSK.js +1 -0
- package/legacy/locales/trTR.js +1 -0
- package/legacy/locales/ukUA.js +1 -0
- package/legacy/locales/viVN.js +1 -0
- package/legacy/locales/zhCN.js +1 -0
- package/locales/arSD.js +1 -0
- package/locales/bgBG.js +1 -0
- package/locales/csCZ.js +1 -0
- package/locales/daDK.js +1 -0
- package/locales/deDE.js +1 -0
- package/locales/elGR.js +1 -0
- package/locales/esES.js +1 -0
- package/locales/faIR.js +1 -0
- package/locales/fiFI.js +1 -0
- package/locales/frFR.js +1 -0
- package/locales/heIL.js +1 -0
- package/locales/huHU.js +1 -0
- package/locales/itIT.js +1 -0
- package/locales/jaJP.js +1 -0
- package/locales/koKR.js +1 -0
- package/locales/nbNO.js +1 -0
- package/locales/nlNL.js +1 -0
- package/locales/plPL.js +1 -0
- package/locales/ptBR.js +1 -0
- package/locales/ruRU.js +1 -0
- package/locales/skSK.js +1 -0
- package/locales/trTR.js +1 -0
- package/locales/ukUA.js +1 -0
- package/locales/viVN.js +1 -0
- package/locales/zhCN.js +1 -0
- package/models/api/gridLocaleTextApi.d.ts +1 -0
- package/models/colDef/gridColDef.d.ts +1 -1
- package/modern/colDef/gridCheckboxSelectionColDef.js +2 -1
- package/modern/colDef/gridNumericColDef.js +1 -1
- package/modern/components/columnHeaders/GridColumnHeaderItem.js +5 -3
- package/modern/components/columnSelection/GridCellCheckboxRenderer.js +0 -1
- package/modern/components/columnSelection/GridHeaderCheckbox.js +0 -1
- package/modern/components/containers/GridRootStyles.js +1 -1
- package/modern/components/panel/GridColumnsPanel.js +2 -5
- package/modern/components/panel/filterPanel/GridFilterPanel.js +1 -2
- package/modern/components/toolbar/GridToolbarColumnsButton.js +0 -1
- package/modern/components/toolbar/GridToolbarDensitySelector.js +0 -1
- package/modern/components/toolbar/GridToolbarExportContainer.js +0 -1
- package/modern/components/toolbar/GridToolbarFilterButton.js +0 -1
- package/modern/constants/localeTextConstants.js +1 -0
- package/modern/hooks/features/columns/useGridColumnSpanning.js +1 -1
- package/modern/hooks/features/dimensions/useGridDimensions.js +9 -8
- package/modern/hooks/features/rows/useGridRowsMeta.js +77 -75
- package/modern/hooks/features/selection/useGridSelectionPreProcessors.js +8 -6
- package/modern/hooks/features/virtualization/useGridVirtualScroller.js +42 -8
- package/modern/index.js +1 -1
- package/modern/locales/arSD.js +1 -0
- package/modern/locales/bgBG.js +1 -0
- package/modern/locales/csCZ.js +1 -0
- package/modern/locales/daDK.js +1 -0
- package/modern/locales/deDE.js +1 -0
- package/modern/locales/elGR.js +1 -0
- package/modern/locales/esES.js +1 -0
- package/modern/locales/faIR.js +1 -0
- package/modern/locales/fiFI.js +1 -0
- package/modern/locales/frFR.js +1 -0
- package/modern/locales/heIL.js +1 -0
- package/modern/locales/huHU.js +1 -0
- package/modern/locales/itIT.js +1 -0
- package/modern/locales/jaJP.js +1 -0
- package/modern/locales/koKR.js +1 -0
- package/modern/locales/nbNO.js +1 -0
- package/modern/locales/nlNL.js +1 -0
- package/modern/locales/plPL.js +1 -0
- package/modern/locales/ptBR.js +1 -0
- package/modern/locales/ruRU.js +1 -0
- package/modern/locales/skSK.js +1 -0
- package/modern/locales/trTR.js +1 -0
- package/modern/locales/ukUA.js +1 -0
- package/modern/locales/viVN.js +1 -0
- package/modern/locales/zhCN.js +1 -0
- package/node/colDef/gridCheckboxSelectionColDef.js +4 -2
- package/node/colDef/gridNumericColDef.js +1 -1
- package/node/components/columnHeaders/GridColumnHeaderItem.js +5 -3
- package/node/components/columnSelection/GridCellCheckboxRenderer.js +0 -1
- package/node/components/columnSelection/GridHeaderCheckbox.js +0 -1
- package/node/components/containers/GridRootStyles.js +1 -1
- package/node/components/panel/GridColumnsPanel.js +2 -5
- package/node/components/panel/filterPanel/GridFilterPanel.js +1 -2
- package/node/components/toolbar/GridToolbarColumnsButton.js +0 -1
- package/node/components/toolbar/GridToolbarDensitySelector.js +0 -1
- package/node/components/toolbar/GridToolbarExportContainer.js +0 -1
- package/node/components/toolbar/GridToolbarFilterButton.js +0 -1
- package/node/constants/localeTextConstants.js +1 -0
- package/node/hooks/features/columns/useGridColumnSpanning.js +11 -16
- package/node/hooks/features/dimensions/useGridDimensions.js +9 -8
- package/node/hooks/features/rows/useGridRowsMeta.js +80 -77
- package/node/hooks/features/selection/useGridSelectionPreProcessors.js +7 -5
- package/node/hooks/features/virtualization/useGridVirtualScroller.js +42 -9
- package/node/index.js +1 -1
- package/node/locales/arSD.js +1 -0
- package/node/locales/bgBG.js +1 -0
- package/node/locales/csCZ.js +1 -0
- package/node/locales/daDK.js +1 -0
- package/node/locales/deDE.js +1 -0
- package/node/locales/elGR.js +1 -0
- package/node/locales/esES.js +1 -0
- package/node/locales/faIR.js +1 -0
- package/node/locales/fiFI.js +1 -0
- package/node/locales/frFR.js +1 -0
- package/node/locales/heIL.js +1 -0
- package/node/locales/huHU.js +1 -0
- package/node/locales/itIT.js +1 -0
- package/node/locales/jaJP.js +1 -0
- package/node/locales/koKR.js +1 -0
- package/node/locales/nbNO.js +1 -0
- package/node/locales/nlNL.js +1 -0
- package/node/locales/plPL.js +1 -0
- package/node/locales/ptBR.js +1 -0
- package/node/locales/ruRU.js +1 -0
- package/node/locales/skSK.js +1 -0
- package/node/locales/trTR.js +1 -0
- package/node/locales/ukUA.js +1 -0
- package/node/locales/viVN.js +1 -0
- package/node/locales/zhCN.js +1 -0
- package/package.json +1 -1
|
@@ -19,7 +19,7 @@ import { gridRowsMetaSelector } from '../rows/gridRowsMetaSelector';
|
|
|
19
19
|
import { getFirstNonSpannedColumnToRender } from '../columns/gridColumnsUtils'; // Uses binary search to avoid looping through all possible positions
|
|
20
20
|
|
|
21
21
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
22
|
-
export function
|
|
22
|
+
export function binarySearch(offset, positions, sliceStart = 0, sliceEnd = positions.length) {
|
|
23
23
|
if (positions.length <= 0) {
|
|
24
24
|
return -1;
|
|
25
25
|
}
|
|
@@ -30,8 +30,20 @@ export function getIndexFromScroll(offset, positions, sliceStart = 0, sliceEnd =
|
|
|
30
30
|
|
|
31
31
|
const pivot = sliceStart + Math.floor((sliceEnd - sliceStart) / 2);
|
|
32
32
|
const itemOffset = positions[pivot];
|
|
33
|
-
return offset <= itemOffset ?
|
|
33
|
+
return offset <= itemOffset ? binarySearch(offset, positions, sliceStart, pivot) : binarySearch(offset, positions, pivot + 1, sliceEnd);
|
|
34
34
|
}
|
|
35
|
+
|
|
36
|
+
function exponentialSearch(offset, positions, index) {
|
|
37
|
+
let interval = 1;
|
|
38
|
+
|
|
39
|
+
while (index < positions.length && positions[index] < offset) {
|
|
40
|
+
index += interval;
|
|
41
|
+
interval *= 2;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return binarySearch(offset, positions, Math.floor(index / 2), Math.min(index, positions.length));
|
|
45
|
+
}
|
|
46
|
+
|
|
35
47
|
export const getRenderableIndexes = ({
|
|
36
48
|
firstIndex,
|
|
37
49
|
lastIndex,
|
|
@@ -73,6 +85,22 @@ export const useGridVirtualScroller = props => {
|
|
|
73
85
|
});
|
|
74
86
|
const [containerWidth, setContainerWidth] = React.useState(null);
|
|
75
87
|
const prevTotalWidth = React.useRef(columnsTotalWidth);
|
|
88
|
+
const getNearestIndexToRender = React.useCallback(offset => {
|
|
89
|
+
const lastMeasuredIndex = Math.max(0, apiRef.current.unstable_getLastMeasuredRowIndex());
|
|
90
|
+
const allRowsMeasured = lastMeasuredIndex === Infinity;
|
|
91
|
+
|
|
92
|
+
if (allRowsMeasured || rowsMeta.positions[lastMeasuredIndex] >= offset) {
|
|
93
|
+
// If all rows were measured (when no row has "auto" as height) or all rows before the offset
|
|
94
|
+
// were measured, then use a binary search because it's faster.
|
|
95
|
+
return binarySearch(offset, rowsMeta.positions);
|
|
96
|
+
} // Otherwise, use an exponential search.
|
|
97
|
+
// If rows have "auto" as height, their positions will be based on estimated heights.
|
|
98
|
+
// In this case, we can skip several steps until we find a position higher than the offset.
|
|
99
|
+
// Inspired by https://github.com/bvaughn/react-virtualized/blob/master/source/Grid/utils/CellSizeAndPositionManager.js
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
return exponentialSearch(offset, rowsMeta.positions, lastMeasuredIndex);
|
|
103
|
+
}, [apiRef, rowsMeta.positions]);
|
|
76
104
|
const computeRenderContext = React.useCallback(() => {
|
|
77
105
|
if (disableVirtualization) {
|
|
78
106
|
return {
|
|
@@ -86,9 +114,11 @@ export const useGridVirtualScroller = props => {
|
|
|
86
114
|
const {
|
|
87
115
|
top,
|
|
88
116
|
left
|
|
89
|
-
} = scrollPosition.current;
|
|
90
|
-
|
|
91
|
-
|
|
117
|
+
} = scrollPosition.current; // Clamp the value because the search may return an index out of bounds.
|
|
118
|
+
// In the last index, this is not needed because Array.slice doesn't include it.
|
|
119
|
+
|
|
120
|
+
const firstRowIndex = Math.min(getNearestIndexToRender(top), rowsMeta.positions.length - 1);
|
|
121
|
+
const lastRowIndex = rootProps.autoHeight ? firstRowIndex + currentPage.rows.length : getNearestIndexToRender(top + rootRef.current.clientHeight);
|
|
92
122
|
let hasRowWithAutoHeight = false;
|
|
93
123
|
let firstColumnIndex = 0;
|
|
94
124
|
let lastColumnIndex = columnPositions.length;
|
|
@@ -106,8 +136,8 @@ export const useGridVirtualScroller = props => {
|
|
|
106
136
|
}
|
|
107
137
|
|
|
108
138
|
if (!hasRowWithAutoHeight) {
|
|
109
|
-
firstColumnIndex =
|
|
110
|
-
lastColumnIndex =
|
|
139
|
+
firstColumnIndex = binarySearch(left, columnPositions);
|
|
140
|
+
lastColumnIndex = binarySearch(left + containerWidth, columnPositions);
|
|
111
141
|
}
|
|
112
142
|
|
|
113
143
|
return {
|
|
@@ -116,7 +146,7 @@ export const useGridVirtualScroller = props => {
|
|
|
116
146
|
firstColumnIndex,
|
|
117
147
|
lastColumnIndex
|
|
118
148
|
};
|
|
119
|
-
}, [disableVirtualization, rowsMeta.positions, rootProps.autoHeight, rootProps.rowBuffer, currentPage.rows, columnPositions, visibleColumns.length, apiRef, containerWidth]);
|
|
149
|
+
}, [disableVirtualization, getNearestIndexToRender, rowsMeta.positions.length, rootProps.autoHeight, rootProps.rowBuffer, currentPage.rows, columnPositions, visibleColumns.length, apiRef, containerWidth]);
|
|
120
150
|
React.useEffect(() => {
|
|
121
151
|
if (disableVirtualization) {
|
|
122
152
|
renderZoneRef.current.style.transform = `translate3d(0px, 0px, 0px)`;
|
|
@@ -374,6 +404,10 @@ export const useGridVirtualScroller = props => {
|
|
|
374
404
|
rootStyle.overflowX = 'hidden';
|
|
375
405
|
}
|
|
376
406
|
|
|
407
|
+
if (rootProps.autoHeight) {
|
|
408
|
+
rootStyle.overflowY = 'hidden';
|
|
409
|
+
}
|
|
410
|
+
|
|
377
411
|
const getRenderContext = React.useCallback(() => {
|
|
378
412
|
return prevRenderContext.current;
|
|
379
413
|
}, []);
|
package/index.js
CHANGED
|
@@ -5,8 +5,9 @@ import { GridHeaderCheckbox } from '../components/columnSelection/GridHeaderChec
|
|
|
5
5
|
import { selectedIdsLookupSelector } from '../hooks/features/selection/gridSelectionSelector';
|
|
6
6
|
import { GRID_BOOLEAN_COL_DEF } from './gridBooleanColDef';
|
|
7
7
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
|
+
export var GRID_CHECKBOX_SELECTION_FIELD = '__check__';
|
|
8
9
|
export var GRID_CHECKBOX_SELECTION_COL_DEF = _extends({}, GRID_BOOLEAN_COL_DEF, {
|
|
9
|
-
field:
|
|
10
|
+
field: GRID_CHECKBOX_SELECTION_FIELD,
|
|
10
11
|
type: 'checkboxSelection',
|
|
11
12
|
width: 50,
|
|
12
13
|
resizable: false,
|
|
@@ -13,7 +13,7 @@ export var GRID_NUMERIC_COL_DEF = _extends({}, GRID_STRING_COL_DEF, {
|
|
|
13
13
|
},
|
|
14
14
|
valueFormatter: function valueFormatter(_ref) {
|
|
15
15
|
var value = _ref.value;
|
|
16
|
-
return
|
|
16
|
+
return isNumber(value) ? value.toLocaleString() : value || '';
|
|
17
17
|
},
|
|
18
18
|
filterOperators: getGridNumericOperators(),
|
|
19
19
|
getApplyQuickFilterFn: getGridNumericQuickFilterFn
|
|
@@ -173,6 +173,7 @@ function GridColumnHeaderItem(props) {
|
|
|
173
173
|
field: column.field,
|
|
174
174
|
colDef: column
|
|
175
175
|
}) : column.headerClassName;
|
|
176
|
+
var label = (_column$headerName = column.headerName) != null ? _column$headerName : column.field;
|
|
176
177
|
return /*#__PURE__*/_jsxs("div", _extends({
|
|
177
178
|
ref: headerCellRef,
|
|
178
179
|
className: clsx(classes.root, headerClassName),
|
|
@@ -185,7 +186,8 @@ function GridColumnHeaderItem(props) {
|
|
|
185
186
|
role: "columnheader",
|
|
186
187
|
tabIndex: tabIndex,
|
|
187
188
|
"aria-colindex": colIndex + 1,
|
|
188
|
-
"aria-sort": ariaSort
|
|
189
|
+
"aria-sort": ariaSort,
|
|
190
|
+
"aria-label": column.renderHeader && headerComponent == null ? label : undefined
|
|
189
191
|
}, mouseEventsHandlers, {
|
|
190
192
|
children: [/*#__PURE__*/_jsxs("div", _extends({
|
|
191
193
|
className: classes.draggableContainer,
|
|
@@ -195,8 +197,8 @@ function GridColumnHeaderItem(props) {
|
|
|
195
197
|
className: classes.titleContainer,
|
|
196
198
|
children: [/*#__PURE__*/_jsx("div", {
|
|
197
199
|
className: classes.titleContainerContent,
|
|
198
|
-
children: headerComponent
|
|
199
|
-
label:
|
|
200
|
+
children: column.renderHeader ? headerComponent : /*#__PURE__*/_jsx(GridColumnHeaderTitle, {
|
|
201
|
+
label: label,
|
|
200
202
|
description: column.description,
|
|
201
203
|
columnWidth: width
|
|
202
204
|
})
|
|
@@ -68,7 +68,7 @@ export var GridRootStyles = styled('div', {
|
|
|
68
68
|
minWidth: 0,
|
|
69
69
|
flex: 1,
|
|
70
70
|
whiteSpace: 'nowrap',
|
|
71
|
-
|
|
71
|
+
overflowX: 'hidden'
|
|
72
72
|
}), _defineProperty(_extends2, "& .".concat(gridClasses.columnHeaderTitleContainerContent), {
|
|
73
73
|
overflow: 'hidden',
|
|
74
74
|
display: 'flex',
|
|
@@ -149,7 +149,6 @@ export function GridColumnsPanel(props) {
|
|
|
149
149
|
checked: columnVisibilityModel[column.field] !== false,
|
|
150
150
|
onClick: toggleColumn,
|
|
151
151
|
name: column.field,
|
|
152
|
-
color: "primary",
|
|
153
152
|
size: "small"
|
|
154
153
|
}, (_rootProps$components2 = rootProps.componentsProps) == null ? void 0 : _rootProps$components2.baseSwitch)),
|
|
155
154
|
label: column.headerName || column.field
|
|
@@ -168,15 +167,13 @@ export function GridColumnsPanel(props) {
|
|
|
168
167
|
children: [/*#__PURE__*/_jsx(rootProps.components.BaseButton, _extends({
|
|
169
168
|
onClick: function onClick() {
|
|
170
169
|
return toggleAllColumns(false);
|
|
171
|
-
}
|
|
172
|
-
color: "primary"
|
|
170
|
+
}
|
|
173
171
|
}, (_rootProps$components3 = rootProps.componentsProps) == null ? void 0 : _rootProps$components3.baseButton, {
|
|
174
172
|
children: apiRef.current.getLocaleText('columnsPanelHideAllButton')
|
|
175
173
|
})), /*#__PURE__*/_jsx(rootProps.components.BaseButton, _extends({
|
|
176
174
|
onClick: function onClick() {
|
|
177
175
|
return toggleAllColumns(true);
|
|
178
|
-
}
|
|
179
|
-
color: "primary"
|
|
176
|
+
}
|
|
180
177
|
}, (_rootProps$components4 = rootProps.componentsProps) == null ? void 0 : _rootProps$components4.baseButton, {
|
|
181
178
|
children: apiRef.current.getLocaleText('columnsPanelShowAllButton')
|
|
182
179
|
}))]
|
|
@@ -116,8 +116,7 @@ var GridFilterPanel = /*#__PURE__*/React.forwardRef(function GridFilterPanel(pro
|
|
|
116
116
|
}), !rootProps.disableMultipleColumnsFiltering && /*#__PURE__*/_jsx(GridPanelFooter, {
|
|
117
117
|
children: /*#__PURE__*/_jsx(rootProps.components.BaseButton, _extends({
|
|
118
118
|
onClick: addNewFilter,
|
|
119
|
-
startIcon: /*#__PURE__*/_jsx(GridAddIcon, {})
|
|
120
|
-
color: "primary"
|
|
119
|
+
startIcon: /*#__PURE__*/_jsx(GridAddIcon, {})
|
|
121
120
|
}, (_rootProps$components = rootProps.componentsProps) == null ? void 0 : _rootProps$components.baseButton, {
|
|
122
121
|
children: apiRef.current.getLocaleText('filterPanelAddFilter')
|
|
123
122
|
}))
|
|
@@ -39,7 +39,6 @@ export var GridToolbarColumnsButton = /*#__PURE__*/React.forwardRef(function Gri
|
|
|
39
39
|
return /*#__PURE__*/_jsx(rootProps.components.BaseButton, _extends({
|
|
40
40
|
ref: ref,
|
|
41
41
|
size: "small",
|
|
42
|
-
color: "primary",
|
|
43
42
|
"aria-label": apiRef.current.getLocaleText('toolbarColumnsLabel'),
|
|
44
43
|
startIcon: /*#__PURE__*/_jsx(rootProps.components.ColumnSelectorIcon, {})
|
|
45
44
|
}, other, {
|
|
@@ -105,7 +105,6 @@ export var GridToolbarDensitySelector = /*#__PURE__*/React.forwardRef(function G
|
|
|
105
105
|
return /*#__PURE__*/_jsxs(React.Fragment, {
|
|
106
106
|
children: [/*#__PURE__*/_jsx(rootProps.components.BaseButton, _extends({
|
|
107
107
|
ref: handleRef,
|
|
108
|
-
color: "primary",
|
|
109
108
|
size: "small",
|
|
110
109
|
startIcon: startIcon,
|
|
111
110
|
"aria-label": apiRef.current.getLocaleText('toolbarDensityLabel'),
|
|
@@ -58,7 +58,6 @@ export var GridToolbarExportContainer = /*#__PURE__*/React.forwardRef(function G
|
|
|
58
58
|
return /*#__PURE__*/_jsxs(React.Fragment, {
|
|
59
59
|
children: [/*#__PURE__*/_jsx(rootProps.components.BaseButton, _extends({
|
|
60
60
|
ref: handleRef,
|
|
61
|
-
color: "primary",
|
|
62
61
|
size: "small",
|
|
63
62
|
startIcon: /*#__PURE__*/_jsx(rootProps.components.ExportIcon, {}),
|
|
64
63
|
"aria-expanded": open ? 'true' : undefined,
|
|
@@ -110,7 +110,6 @@ var GridToolbarFilterButton = /*#__PURE__*/React.forwardRef(function GridToolbar
|
|
|
110
110
|
children: /*#__PURE__*/_jsx(rootProps.components.BaseButton, _extends({
|
|
111
111
|
ref: ref,
|
|
112
112
|
size: "small",
|
|
113
|
-
color: "primary",
|
|
114
113
|
"aria-label": apiRef.current.getLocaleText('toolbarFiltersLabel'),
|
|
115
114
|
startIcon: /*#__PURE__*/_jsx(Badge, {
|
|
116
115
|
badgeContent: activeFilters.length,
|
|
@@ -117,6 +117,7 @@ export var GRID_DEFAULT_LOCALE_TEXT = {
|
|
|
117
117
|
return "Stop grouping by ".concat(name);
|
|
118
118
|
},
|
|
119
119
|
// Master/detail
|
|
120
|
+
detailPanelToggle: 'Detail panel toggle',
|
|
120
121
|
expandDetailPanel: 'Expand',
|
|
121
122
|
collapseDetailPanel: 'Collapse',
|
|
122
123
|
// Used core components translation keys
|
|
@@ -36,7 +36,7 @@ var hasScroll = function hasScroll(_ref) {
|
|
|
36
36
|
|
|
37
37
|
export function useGridDimensions(apiRef, props) {
|
|
38
38
|
var logger = useGridLogger(apiRef, 'useResizeContainer');
|
|
39
|
-
var
|
|
39
|
+
var errorShown = React.useRef(false);
|
|
40
40
|
var rootDimensionsRef = React.useRef(null);
|
|
41
41
|
var fullDimensionsRef = React.useRef(null);
|
|
42
42
|
var rowsMeta = useGridSelector(apiRef, gridRowsMetaSelector);
|
|
@@ -94,7 +94,8 @@ export function useGridDimensions(apiRef, props) {
|
|
|
94
94
|
viewportOuterSize: viewportOuterSize,
|
|
95
95
|
viewportInnerSize: viewportInnerSize,
|
|
96
96
|
hasScrollX: hasScrollX,
|
|
97
|
-
hasScrollY: hasScrollY
|
|
97
|
+
hasScrollY: hasScrollY,
|
|
98
|
+
scrollBarSize: scrollBarSize
|
|
98
99
|
};
|
|
99
100
|
var prevDimensions = fullDimensionsRef.current;
|
|
100
101
|
fullDimensionsRef.current = newFullDimensions;
|
|
@@ -148,14 +149,14 @@ export function useGridDimensions(apiRef, props) {
|
|
|
148
149
|
|
|
149
150
|
var isJSDOM = /jsdom/.test(window.navigator.userAgent);
|
|
150
151
|
|
|
151
|
-
if (size.height === 0 && !
|
|
152
|
-
logger.
|
|
153
|
-
|
|
152
|
+
if (size.height === 0 && !errorShown.current && !props.autoHeight && !isJSDOM) {
|
|
153
|
+
logger.error(['The parent DOM element of the data grid has an empty height.', 'Please make sure that this element has an intrinsic height.', 'The grid displays with a height of 0px.', '', 'More details: https://mui.com/r/x-data-grid-no-dimensions.'].join('\n'));
|
|
154
|
+
errorShown.current = true;
|
|
154
155
|
}
|
|
155
156
|
|
|
156
|
-
if (size.width === 0 && !
|
|
157
|
-
logger.
|
|
158
|
-
|
|
157
|
+
if (size.width === 0 && !errorShown.current && !isJSDOM) {
|
|
158
|
+
logger.error(['The parent DOM element of the data grid has an empty width.', 'Please make sure that this element has an intrinsic width.', 'The grid displays with a width of 0px.', '', 'More details: https://mui.com/r/x-data-grid-no-dimensions.'].join('\n'));
|
|
159
|
+
errorShown.current = true;
|
|
159
160
|
}
|
|
160
161
|
|
|
161
162
|
if (isTestEnvironment) {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import * as React from 'react';
|
|
3
|
+
import { debounce } from '@mui/material/utils';
|
|
3
4
|
import { useGridVisibleRows } from '../../utils/useGridVisibleRows';
|
|
4
5
|
import { useGridApiMethod } from '../../utils/useGridApiMethod';
|
|
5
6
|
import { useGridSelector } from '../../utils/useGridSelector';
|
|
@@ -36,87 +37,87 @@ export var useGridRowsMeta = function useGridRowsMeta(apiRef, props) {
|
|
|
36
37
|
var currentPage = useGridVisibleRows(apiRef, props);
|
|
37
38
|
var hydrateRowsMeta = React.useCallback(function () {
|
|
38
39
|
hasRowWithAutoHeight.current = false;
|
|
39
|
-
apiRef.current.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
needsFirstMeasurement: true // Assume all rows will need to be measured by default
|
|
53
|
-
|
|
54
|
-
};
|
|
55
|
-
}
|
|
40
|
+
var densityFactor = gridDensityFactorSelector(apiRef.current.state, apiRef.current.instanceId);
|
|
41
|
+
var positions = [];
|
|
42
|
+
var currentPageTotalHeight = currentPage.rows.reduce(function (acc, row) {
|
|
43
|
+
positions.push(acc);
|
|
44
|
+
|
|
45
|
+
if (!rowsHeightLookup.current[row.id]) {
|
|
46
|
+
rowsHeightLookup.current[row.id] = {
|
|
47
|
+
sizes: {
|
|
48
|
+
base: rowHeightFromDensity
|
|
49
|
+
},
|
|
50
|
+
isResized: false,
|
|
51
|
+
autoHeight: false,
|
|
52
|
+
needsFirstMeasurement: true // Assume all rows will need to be measured by default
|
|
56
53
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
hasRowWithAutoHeight.current = true;
|
|
84
|
-
rowsHeightLookup.current[row.id].autoHeight = true;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
var _rowsHeightLookup$cur = rowsHeightLookup.current[row.id],
|
|
58
|
+
isResized = _rowsHeightLookup$cur.isResized,
|
|
59
|
+
needsFirstMeasurement = _rowsHeightLookup$cur.needsFirstMeasurement,
|
|
60
|
+
sizes = _rowsHeightLookup$cur.sizes;
|
|
61
|
+
var baseRowHeight = rowHeightFromDensity;
|
|
62
|
+
var existingBaseRowHeight = sizes.base;
|
|
63
|
+
|
|
64
|
+
if (isResized) {
|
|
65
|
+
// Do not recalculate resized row height and use the value from the lookup
|
|
66
|
+
baseRowHeight = existingBaseRowHeight;
|
|
67
|
+
} else if (getRowHeightProp) {
|
|
68
|
+
var rowHeightFromUser = getRowHeightProp(_extends({}, row, {
|
|
69
|
+
densityFactor: densityFactor
|
|
70
|
+
}));
|
|
71
|
+
|
|
72
|
+
if (rowHeightFromUser === 'auto') {
|
|
73
|
+
if (needsFirstMeasurement) {
|
|
74
|
+
var estimatedRowHeight = getEstimatedRowHeight ? getEstimatedRowHeight(_extends({}, row, {
|
|
75
|
+
densityFactor: densityFactor
|
|
76
|
+
})) : rowHeightFromDensity; // If the row was not measured yet use the estimated row height
|
|
77
|
+
|
|
78
|
+
baseRowHeight = estimatedRowHeight != null ? estimatedRowHeight : rowHeightFromDensity;
|
|
85
79
|
} else {
|
|
86
|
-
|
|
87
|
-
baseRowHeight = rowHeightFromUser != null ? rowHeightFromUser : rowHeightFromDensity;
|
|
88
|
-
rowsHeightLookup.current[row.id].needsFirstMeasurement = false;
|
|
89
|
-
rowsHeightLookup.current[row.id].autoHeight = false;
|
|
80
|
+
baseRowHeight = existingBaseRowHeight;
|
|
90
81
|
}
|
|
82
|
+
|
|
83
|
+
hasRowWithAutoHeight.current = true;
|
|
84
|
+
rowsHeightLookup.current[row.id].autoHeight = true;
|
|
91
85
|
} else {
|
|
86
|
+
// Default back to base rowHeight if getRowHeight returns null or undefined.
|
|
87
|
+
baseRowHeight = rowHeightFromUser != null ? rowHeightFromUser : rowHeightFromDensity;
|
|
92
88
|
rowsHeightLookup.current[row.id].needsFirstMeasurement = false;
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
var initialHeights = {
|
|
97
|
-
base: baseRowHeight
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
if (getRowSpacing) {
|
|
101
|
-
var _spacing$top, _spacing$bottom;
|
|
102
|
-
|
|
103
|
-
var indexRelativeToCurrentPage = apiRef.current.getRowIndexRelativeToVisibleRows(row.id);
|
|
104
|
-
var spacing = getRowSpacing(_extends({}, row, {
|
|
105
|
-
isFirstVisible: indexRelativeToCurrentPage === 0,
|
|
106
|
-
isLastVisible: indexRelativeToCurrentPage === currentPage.rows.length - 1,
|
|
107
|
-
indexRelativeToCurrentPage: indexRelativeToCurrentPage
|
|
108
|
-
}));
|
|
109
|
-
initialHeights.spacingTop = (_spacing$top = spacing.top) != null ? _spacing$top : 0;
|
|
110
|
-
initialHeights.spacingBottom = (_spacing$bottom = spacing.bottom) != null ? _spacing$bottom : 0;
|
|
89
|
+
rowsHeightLookup.current[row.id].autoHeight = false;
|
|
111
90
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
91
|
+
} else {
|
|
92
|
+
rowsHeightLookup.current[row.id].needsFirstMeasurement = false;
|
|
93
|
+
} // We use an object to make simple to check if a height is already added or not
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
var initialHeights = {
|
|
97
|
+
base: baseRowHeight
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
if (getRowSpacing) {
|
|
101
|
+
var _spacing$top, _spacing$bottom;
|
|
102
|
+
|
|
103
|
+
var indexRelativeToCurrentPage = apiRef.current.getRowIndexRelativeToVisibleRows(row.id);
|
|
104
|
+
var spacing = getRowSpacing(_extends({}, row, {
|
|
105
|
+
isFirstVisible: indexRelativeToCurrentPage === 0,
|
|
106
|
+
isLastVisible: indexRelativeToCurrentPage === currentPage.rows.length - 1,
|
|
107
|
+
indexRelativeToCurrentPage: indexRelativeToCurrentPage
|
|
108
|
+
}));
|
|
109
|
+
initialHeights.spacingTop = (_spacing$top = spacing.top) != null ? _spacing$top : 0;
|
|
110
|
+
initialHeights.spacingBottom = (_spacing$bottom = spacing.bottom) != null ? _spacing$bottom : 0;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
var processedSizes = apiRef.current.unstable_applyPipeProcessors('rowHeight', initialHeights, row);
|
|
114
|
+
rowsHeightLookup.current[row.id].sizes = processedSizes;
|
|
115
|
+
var finalRowHeight = Object.values(processedSizes).reduce(function (acc2, value) {
|
|
116
|
+
return acc2 + value;
|
|
119
117
|
}, 0);
|
|
118
|
+
return acc + finalRowHeight;
|
|
119
|
+
}, 0);
|
|
120
|
+
apiRef.current.setState(function (state) {
|
|
120
121
|
return _extends({}, state, {
|
|
121
122
|
rowsMeta: {
|
|
122
123
|
currentPageTotalHeight: currentPageTotalHeight,
|
|
@@ -149,6 +150,9 @@ export var useGridRowsMeta = function useGridRowsMeta(apiRef, props) {
|
|
|
149
150
|
rowsHeightLookup.current[id].needsFirstMeasurement = false;
|
|
150
151
|
hydrateRowsMeta();
|
|
151
152
|
}, [hydrateRowsMeta]);
|
|
153
|
+
var debouncedHydrateRowsMeta = React.useMemo(function () {
|
|
154
|
+
return debounce(hydrateRowsMeta);
|
|
155
|
+
}, [hydrateRowsMeta]);
|
|
152
156
|
var storeMeasuredRowHeight = React.useCallback(function (id, height) {
|
|
153
157
|
if (!rowsHeightLookup.current[id] || !rowsHeightLookup.current[id].autoHeight) {
|
|
154
158
|
return;
|
|
@@ -160,9 +164,9 @@ export var useGridRowsMeta = function useGridRowsMeta(apiRef, props) {
|
|
|
160
164
|
rowsHeightLookup.current[id].sizes.base = height;
|
|
161
165
|
|
|
162
166
|
if (needsHydration) {
|
|
163
|
-
|
|
167
|
+
debouncedHydrateRowsMeta();
|
|
164
168
|
}
|
|
165
|
-
}, [
|
|
169
|
+
}, [debouncedHydrateRowsMeta]);
|
|
166
170
|
var rowHasAutoHeight = React.useCallback(function (id) {
|
|
167
171
|
var _rowsHeightLookup$cur3;
|
|
168
172
|
|
|
@@ -172,7 +176,7 @@ export var useGridRowsMeta = function useGridRowsMeta(apiRef, props) {
|
|
|
172
176
|
return lastMeasuredRowIndex.current;
|
|
173
177
|
}, []);
|
|
174
178
|
var setLastMeasuredRowIndex = React.useCallback(function (index) {
|
|
175
|
-
if (hasRowWithAutoHeight.current) {
|
|
179
|
+
if (hasRowWithAutoHeight.current && index > lastMeasuredRowIndex.current) {
|
|
176
180
|
lastMeasuredRowIndex.current = index;
|
|
177
181
|
}
|
|
178
182
|
}, []); // The effect is used to build the rows meta data - currentPageTotalHeight and positions.
|
|
@@ -4,7 +4,7 @@ import * as React from 'react';
|
|
|
4
4
|
import { unstable_composeClasses as composeClasses } from '@mui/material';
|
|
5
5
|
import { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
|
|
6
6
|
import { getDataGridUtilityClass } from '../../../constants';
|
|
7
|
-
import { GRID_CHECKBOX_SELECTION_COL_DEF } from '../../../colDef';
|
|
7
|
+
import { GRID_CHECKBOX_SELECTION_COL_DEF, GRID_CHECKBOX_SELECTION_FIELD } from '../../../colDef';
|
|
8
8
|
|
|
9
9
|
var useUtilityClasses = function useUtilityClasses(ownerState) {
|
|
10
10
|
var classes = ownerState.classes;
|
|
@@ -30,16 +30,18 @@ export var useGridSelectionPreProcessors = function useGridSelectionPreProcessor
|
|
|
30
30
|
});
|
|
31
31
|
|
|
32
32
|
var shouldHaveSelectionColumn = props.checkboxSelection;
|
|
33
|
-
var haveSelectionColumn = columnsState.lookup[
|
|
33
|
+
var haveSelectionColumn = columnsState.lookup[GRID_CHECKBOX_SELECTION_FIELD] != null;
|
|
34
34
|
|
|
35
35
|
if (shouldHaveSelectionColumn && !haveSelectionColumn) {
|
|
36
|
-
columnsState.lookup[
|
|
37
|
-
columnsState.all = [
|
|
36
|
+
columnsState.lookup[GRID_CHECKBOX_SELECTION_FIELD] = selectionColumn;
|
|
37
|
+
columnsState.all = [GRID_CHECKBOX_SELECTION_FIELD].concat(_toConsumableArray(columnsState.all));
|
|
38
38
|
} else if (!shouldHaveSelectionColumn && haveSelectionColumn) {
|
|
39
|
-
delete columnsState.lookup[
|
|
39
|
+
delete columnsState.lookup[GRID_CHECKBOX_SELECTION_FIELD];
|
|
40
40
|
columnsState.all = columnsState.all.filter(function (field) {
|
|
41
|
-
return field !==
|
|
41
|
+
return field !== GRID_CHECKBOX_SELECTION_FIELD;
|
|
42
42
|
});
|
|
43
|
+
} else if (shouldHaveSelectionColumn && haveSelectionColumn) {
|
|
44
|
+
columnsState.lookup[GRID_CHECKBOX_SELECTION_FIELD] = _extends({}, selectionColumn, columnsState.lookup[GRID_CHECKBOX_SELECTION_FIELD]);
|
|
43
45
|
}
|
|
44
46
|
|
|
45
47
|
return columnsState;
|