@mui/x-data-grid 5.15.2 → 5.17.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 +177 -2
- package/DataGrid/DataGrid.js +3 -1
- package/DataGrid/useDataGridComponent.js +5 -0
- package/README.md +2 -1
- package/components/DataGridColumnHeaders.js +4 -3
- package/components/ErrorBoundary.d.ts +1 -0
- package/components/GridAutoSizer.js +7 -0
- package/components/GridRow.d.ts +2 -1
- package/components/GridRow.js +136 -85
- package/components/base/GridBody.js +8 -5
- package/components/base/GridOverlays.js +4 -7
- package/components/cell/GridActionsCellItem.d.ts +2 -2
- package/components/cell/GridBooleanCell.js +2 -1
- package/components/cell/GridEditBooleanCell.js +2 -1
- package/components/cell/GridEditDateCell.js +3 -2
- package/components/cell/GridEditInputCell.js +2 -1
- package/components/cell/GridEditSingleSelectCell.js +11 -2
- package/components/cell/GridSkeletonCell.d.ts +12 -0
- package/components/cell/GridSkeletonCell.js +60 -0
- package/components/cell/index.d.ts +1 -0
- package/components/cell/index.js +2 -1
- package/components/columnHeaders/GridColumnGroupHeader.d.ts +14 -0
- package/components/columnHeaders/GridColumnGroupHeader.js +122 -0
- package/components/columnHeaders/GridColumnHeaderItem.js +55 -71
- package/components/columnHeaders/GridColumnHeadersInner.js +2 -1
- package/components/columnHeaders/GridGenericColumnHeaderItem.d.ts +32 -0
- package/components/columnHeaders/GridGenericColumnHeaderItem.js +104 -0
- package/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
- package/components/containers/GridOverlay.js +7 -1
- package/components/containers/GridRoot.js +3 -3
- package/components/containers/GridRootStyles.js +16 -2
- package/components/menu/GridMenu.d.ts +3 -2
- package/components/menu/GridMenu.js +1 -0
- package/components/menu/columnMenu/GridColumnHeaderMenu.d.ts +1 -1
- package/components/panel/GridColumnsPanel.d.ts +6 -1
- package/components/panel/GridColumnsPanel.js +38 -6
- package/components/panel/GridPanel.d.ts +1 -1
- package/components/panel/GridPanel.js +1 -0
- package/components/panel/filterPanel/GridFilterForm.d.ts +4 -0
- package/components/panel/filterPanel/GridFilterForm.js +5 -0
- package/components/panel/filterPanel/GridFilterInputMultipleValue.d.ts +1 -1
- package/components/panel/filterPanel/GridFilterPanel.d.ts +4 -0
- package/components/panel/filterPanel/GridFilterPanel.js +5 -0
- package/components/toolbar/GridToolbarColumnsButton.d.ts +1 -1
- package/components/toolbar/GridToolbarDensitySelector.d.ts +1 -1
- package/components/toolbar/GridToolbarExportContainer.d.ts +1 -1
- package/constants/defaultGridSlotsComponents.js +2 -1
- package/constants/gridClasses.d.ts +24 -0
- package/constants/gridClasses.js +1 -1
- package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +5 -1
- package/hooks/features/columnGrouping/gridColumnGroupsInterfaces.d.ts +7 -0
- package/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +1 -0
- package/hooks/features/columnGrouping/gridColumnGroupsSelector.d.ts +7 -0
- package/hooks/features/columnGrouping/gridColumnGroupsSelector.js +8 -0
- package/hooks/features/columnGrouping/index.d.ts +2 -0
- package/hooks/features/columnGrouping/index.js +2 -0
- package/hooks/features/columnGrouping/useGridColumnGrouping.d.ts +24 -0
- package/hooks/features/columnGrouping/useGridColumnGrouping.js +153 -0
- package/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.d.ts +4 -0
- package/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +35 -0
- package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +7 -6
- package/hooks/features/columnHeaders/useGridColumnHeaders.js +204 -9
- package/hooks/features/density/densitySelector.d.ts +2 -0
- package/hooks/features/density/densitySelector.js +3 -1
- package/hooks/features/density/densityState.d.ts +1 -0
- package/hooks/features/density/useGridDensity.d.ts +1 -1
- package/hooks/features/density/useGridDensity.js +45 -9
- package/hooks/features/dimensions/useGridDimensions.js +4 -4
- package/hooks/features/export/useGridPrintExport.js +3 -3
- package/hooks/features/filter/gridFilterSelector.d.ts +3 -3
- package/hooks/features/filter/gridFilterUtils.d.ts +1 -1
- package/hooks/features/filter/gridFilterUtils.js +55 -54
- package/hooks/features/filter/useGridFilter.js +1 -1
- package/hooks/features/index.d.ts +1 -0
- package/hooks/features/index.js +1 -0
- package/hooks/features/pagination/gridPaginationSelector.d.ts +1 -1
- package/hooks/features/rows/gridRowsSelector.d.ts +1 -1
- package/hooks/features/rows/useGridParamsApi.js +1 -1
- package/hooks/features/rows/useGridRows.js +65 -8
- package/hooks/features/rows/useGridRowsMeta.js +36 -16
- package/hooks/features/selection/gridSelectionSelector.d.ts +1 -1
- package/hooks/features/sorting/gridSortingSelector.d.ts +1 -1
- package/hooks/features/virtualization/useGridVirtualScroller.d.ts +2 -2
- package/hooks/features/virtualization/useGridVirtualScroller.js +17 -5
- package/hooks/utils/useGridNativeEventListener.d.ts +1 -1
- package/hooks/utils/useGridNativeEventListener.js +2 -2
- package/hooks/utils/useGridVisibleRows.d.ts +2 -2
- package/index.js +1 -1
- package/internals/index.d.ts +2 -0
- package/internals/index.js +2 -0
- package/legacy/DataGrid/DataGrid.js +3 -1
- package/legacy/DataGrid/useDataGridComponent.js +5 -0
- package/legacy/components/DataGridColumnHeaders.js +4 -3
- package/legacy/components/GridAutoSizer.js +7 -0
- package/legacy/components/GridRow.js +138 -85
- package/legacy/components/base/GridBody.js +8 -5
- package/legacy/components/base/GridOverlays.js +4 -7
- package/legacy/components/cell/GridBooleanCell.js +2 -1
- package/legacy/components/cell/GridEditBooleanCell.js +2 -1
- package/legacy/components/cell/GridEditDateCell.js +3 -2
- package/legacy/components/cell/GridEditInputCell.js +2 -1
- package/legacy/components/cell/GridEditSingleSelectCell.js +11 -2
- package/legacy/components/cell/GridSkeletonCell.js +57 -0
- package/legacy/components/cell/index.js +2 -1
- package/legacy/components/columnHeaders/GridColumnGroupHeader.js +120 -0
- package/legacy/components/columnHeaders/GridColumnHeaderItem.js +78 -88
- package/legacy/components/columnHeaders/GridColumnHeadersInner.js +2 -1
- package/legacy/components/columnHeaders/GridGenericColumnHeaderItem.js +112 -0
- package/legacy/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
- package/legacy/components/containers/GridOverlay.js +7 -1
- package/legacy/components/containers/GridRoot.js +3 -3
- package/legacy/components/containers/GridRootStyles.js +14 -5
- package/legacy/components/menu/GridMenu.js +1 -0
- package/legacy/components/panel/GridColumnsPanel.js +41 -6
- package/legacy/components/panel/GridPanel.js +1 -0
- package/legacy/components/panel/filterPanel/GridFilterForm.js +5 -0
- package/legacy/components/panel/filterPanel/GridFilterPanel.js +5 -0
- package/legacy/constants/defaultGridSlotsComponents.js +2 -1
- package/legacy/constants/gridClasses.js +1 -1
- package/legacy/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +1 -0
- package/legacy/hooks/features/columnGrouping/gridColumnGroupsSelector.js +12 -0
- package/legacy/hooks/features/columnGrouping/index.js +2 -0
- package/legacy/hooks/features/columnGrouping/useGridColumnGrouping.js +151 -0
- package/legacy/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +35 -0
- package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +213 -12
- package/legacy/hooks/features/density/densitySelector.js +6 -0
- package/legacy/hooks/features/density/useGridDensity.js +44 -6
- package/legacy/hooks/features/dimensions/useGridDimensions.js +4 -4
- package/legacy/hooks/features/export/useGridPrintExport.js +3 -3
- package/legacy/hooks/features/filter/gridFilterUtils.js +61 -56
- package/legacy/hooks/features/filter/useGridFilter.js +1 -1
- package/legacy/hooks/features/index.js +1 -0
- package/legacy/hooks/features/rows/useGridParamsApi.js +1 -1
- package/legacy/hooks/features/rows/useGridRows.js +73 -8
- package/legacy/hooks/features/rows/useGridRowsMeta.js +45 -18
- package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +31 -13
- package/legacy/hooks/utils/useGridNativeEventListener.js +2 -2
- package/legacy/index.js +1 -1
- package/legacy/internals/index.js +2 -0
- package/legacy/models/api/gridColumnGroupingApi.js +1 -0
- package/legacy/models/events/gridEvents.js +2 -0
- package/legacy/models/gridColumnGrouping.js +6 -0
- package/legacy/models/index.js +2 -1
- package/legacy/models/params/gridRenderedRowsIntervalChangeParams.js +1 -0
- package/legacy/models/params/index.js +2 -1
- package/legacy/utils/utils.js +18 -0
- package/models/api/gridApiCommon.d.ts +2 -1
- package/models/api/gridColumnGroupingApi.d.ts +19 -0
- package/models/api/gridColumnGroupingApi.js +1 -0
- package/models/api/gridDensityApi.d.ts +2 -1
- package/models/api/gridParamsApi.d.ts +1 -1
- package/models/api/gridRowApi.d.ts +6 -0
- package/models/api/gridRowsMetaApi.d.ts +6 -1
- package/models/colDef/gridColDef.d.ts +15 -1
- package/models/events/gridEventLookup.d.ts +7 -1
- package/models/events/gridEvents.d.ts +3 -1
- package/models/events/gridEvents.js +2 -0
- package/models/gridColumnGrouping.d.ts +67 -0
- package/models/gridColumnGrouping.js +6 -0
- package/models/gridRows.d.ts +5 -5
- package/models/gridSlotsComponent.d.ts +5 -0
- package/models/gridStateCommunity.d.ts +2 -1
- package/models/index.d.ts +1 -0
- package/models/index.js +2 -1
- package/models/params/gridCellParams.d.ts +7 -2
- package/models/params/gridMenuParams.d.ts +1 -2
- package/models/params/gridRenderedRowsIntervalChangeParams.d.ts +10 -0
- package/models/params/gridRenderedRowsIntervalChangeParams.js +1 -0
- package/models/params/index.d.ts +1 -0
- package/models/params/index.js +2 -1
- package/models/props/DataGridProps.d.ts +7 -1
- package/modern/DataGrid/DataGrid.js +3 -1
- package/modern/DataGrid/useDataGridComponent.js +5 -0
- package/modern/components/DataGridColumnHeaders.js +4 -3
- package/modern/components/GridAutoSizer.js +7 -0
- package/modern/components/GridRow.js +133 -84
- package/modern/components/base/GridBody.js +8 -5
- package/modern/components/base/GridOverlays.js +4 -7
- package/modern/components/cell/GridBooleanCell.js +2 -1
- package/modern/components/cell/GridEditBooleanCell.js +2 -1
- package/modern/components/cell/GridEditDateCell.js +3 -2
- package/modern/components/cell/GridEditInputCell.js +2 -1
- package/modern/components/cell/GridEditSingleSelectCell.js +11 -2
- package/modern/components/cell/GridSkeletonCell.js +60 -0
- package/modern/components/cell/index.js +2 -1
- package/modern/components/columnHeaders/GridColumnGroupHeader.js +120 -0
- package/modern/components/columnHeaders/GridColumnHeaderItem.js +53 -69
- package/modern/components/columnHeaders/GridColumnHeadersInner.js +2 -1
- package/modern/components/columnHeaders/GridGenericColumnHeaderItem.js +104 -0
- package/modern/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
- package/modern/components/containers/GridOverlay.js +7 -1
- package/modern/components/containers/GridRoot.js +3 -3
- package/modern/components/containers/GridRootStyles.js +16 -2
- package/modern/components/menu/GridMenu.js +1 -0
- package/modern/components/panel/GridColumnsPanel.js +38 -6
- package/modern/components/panel/GridPanel.js +1 -0
- package/modern/components/panel/filterPanel/GridFilterForm.js +5 -0
- package/modern/components/panel/filterPanel/GridFilterPanel.js +5 -0
- package/modern/constants/defaultGridSlotsComponents.js +2 -1
- package/modern/constants/gridClasses.js +1 -1
- package/modern/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +1 -0
- package/modern/hooks/features/columnGrouping/gridColumnGroupsSelector.js +8 -0
- package/modern/hooks/features/columnGrouping/index.js +2 -0
- package/modern/hooks/features/columnGrouping/useGridColumnGrouping.js +145 -0
- package/modern/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +29 -0
- package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +186 -9
- package/modern/hooks/features/density/densitySelector.js +3 -1
- package/modern/hooks/features/density/useGridDensity.js +37 -9
- package/modern/hooks/features/dimensions/useGridDimensions.js +4 -4
- package/modern/hooks/features/export/useGridPrintExport.js +3 -3
- package/modern/hooks/features/filter/gridFilterUtils.js +54 -53
- package/modern/hooks/features/filter/useGridFilter.js +1 -1
- package/modern/hooks/features/index.js +1 -0
- package/modern/hooks/features/rows/useGridParamsApi.js +1 -1
- package/modern/hooks/features/rows/useGridRows.js +65 -8
- package/modern/hooks/features/rows/useGridRowsMeta.js +36 -16
- package/modern/hooks/features/virtualization/useGridVirtualScroller.js +17 -5
- package/modern/hooks/utils/useGridNativeEventListener.js +2 -2
- package/modern/index.js +1 -1
- package/modern/internals/index.js +2 -0
- package/modern/models/api/gridColumnGroupingApi.js +1 -0
- package/modern/models/events/gridEvents.js +2 -0
- package/modern/models/gridColumnGrouping.js +6 -0
- package/modern/models/index.js +2 -1
- package/modern/models/params/gridRenderedRowsIntervalChangeParams.js +1 -0
- package/modern/models/params/index.js +2 -1
- package/modern/utils/utils.js +16 -0
- package/node/DataGrid/DataGrid.js +3 -1
- package/node/DataGrid/useDataGridComponent.js +7 -0
- package/node/components/DataGridColumnHeaders.js +4 -3
- package/node/components/GridAutoSizer.js +7 -0
- package/node/components/GridRow.js +136 -77
- package/node/components/base/GridBody.js +7 -4
- package/node/components/base/GridOverlays.js +3 -6
- package/node/components/cell/GridBooleanCell.js +2 -1
- package/node/components/cell/GridEditBooleanCell.js +2 -1
- package/node/components/cell/GridEditDateCell.js +3 -2
- package/node/components/cell/GridEditInputCell.js +2 -1
- package/node/components/cell/GridEditSingleSelectCell.js +11 -2
- package/node/components/cell/GridSkeletonCell.js +81 -0
- package/node/components/cell/index.js +13 -0
- package/node/components/columnHeaders/GridColumnGroupHeader.js +141 -0
- package/node/components/columnHeaders/GridColumnHeaderItem.js +53 -72
- package/node/components/columnHeaders/GridColumnHeadersInner.js +2 -1
- package/node/components/columnHeaders/GridGenericColumnHeaderItem.js +126 -0
- package/node/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
- package/node/components/containers/GridOverlay.js +7 -1
- package/node/components/containers/GridRoot.js +4 -4
- package/node/components/containers/GridRootStyles.js +16 -2
- package/node/components/menu/GridMenu.js +1 -0
- package/node/components/panel/GridColumnsPanel.js +36 -5
- package/node/components/panel/GridPanel.js +1 -0
- package/node/components/panel/filterPanel/GridFilterForm.js +5 -0
- package/node/components/panel/filterPanel/GridFilterPanel.js +5 -0
- package/node/constants/defaultGridSlotsComponents.js +1 -0
- package/node/constants/gridClasses.js +1 -1
- package/node/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +5 -0
- package/node/hooks/features/columnGrouping/gridColumnGroupsSelector.js +18 -0
- package/node/hooks/features/columnGrouping/index.js +18 -0
- package/node/hooks/features/columnGrouping/useGridColumnGrouping.js +182 -0
- package/node/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +55 -0
- package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +207 -8
- package/node/hooks/features/density/densitySelector.js +6 -2
- package/node/hooks/features/density/useGridDensity.js +48 -9
- package/node/hooks/features/dimensions/useGridDimensions.js +3 -3
- package/node/hooks/features/export/useGridPrintExport.js +2 -2
- package/node/hooks/features/filter/gridFilterUtils.js +55 -55
- package/node/hooks/features/filter/useGridFilter.js +1 -1
- package/node/hooks/features/index.js +13 -0
- package/node/hooks/features/rows/useGridParamsApi.js +1 -1
- package/node/hooks/features/rows/useGridRows.js +60 -7
- package/node/hooks/features/rows/useGridRowsMeta.js +35 -15
- package/node/hooks/features/virtualization/useGridVirtualScroller.js +17 -5
- package/node/hooks/utils/useGridNativeEventListener.js +2 -2
- package/node/index.js +1 -1
- package/node/internals/index.js +22 -0
- package/node/models/api/gridColumnGroupingApi.js +5 -0
- package/node/models/events/gridEvents.js +2 -0
- package/node/models/gridColumnGrouping.js +13 -0
- package/node/models/index.js +13 -0
- package/node/models/params/gridRenderedRowsIntervalChangeParams.js +5 -0
- package/node/models/params/index.js +13 -0
- package/node/utils/utils.js +18 -0
- package/package.json +3 -3
- package/utils/utils.d.ts +1 -0
- package/utils/utils.js +16 -0
|
@@ -131,14 +131,14 @@ const useGridRows = (apiRef, props) => {
|
|
|
131
131
|
} // we remove duplicate updates. A server can batch updates, and send several updates for the same row in one fn call.
|
|
132
132
|
|
|
133
133
|
|
|
134
|
-
const
|
|
134
|
+
const uniqueUpdates = new Map();
|
|
135
135
|
updates.forEach(update => {
|
|
136
136
|
const id = (0, _gridRowsUtils.getRowIdFromRowModel)(update, props.getRowId, 'A row was provided without id when calling updateRows():');
|
|
137
137
|
|
|
138
|
-
if (
|
|
139
|
-
|
|
138
|
+
if (uniqueUpdates.has(id)) {
|
|
139
|
+
uniqueUpdates.set(id, (0, _extends2.default)({}, uniqueUpdates.get(id), update));
|
|
140
140
|
} else {
|
|
141
|
-
|
|
141
|
+
uniqueUpdates.set(id, update);
|
|
142
142
|
}
|
|
143
143
|
});
|
|
144
144
|
const deletedRowIds = [];
|
|
@@ -150,7 +150,7 @@ const useGridRows = (apiRef, props) => {
|
|
|
150
150
|
idToIdLookup: (0, _extends2.default)({}, prevCache.idToIdLookup),
|
|
151
151
|
ids: [...prevCache.ids]
|
|
152
152
|
};
|
|
153
|
-
|
|
153
|
+
uniqueUpdates.forEach((partialRow, id) => {
|
|
154
154
|
// eslint-disable-next-line no-underscore-dangle
|
|
155
155
|
if (partialRow._action === 'delete') {
|
|
156
156
|
delete newCache.idRowsLookup[id];
|
|
@@ -267,8 +267,60 @@ const useGridRows = (apiRef, props) => {
|
|
|
267
267
|
ids: updatedRows
|
|
268
268
|
})
|
|
269
269
|
}));
|
|
270
|
-
apiRef.current.
|
|
270
|
+
apiRef.current.publishEvent('rowsSet');
|
|
271
271
|
}, [apiRef, logger]);
|
|
272
|
+
const replaceRows = React.useCallback((firstRowToRender, newRows) => {
|
|
273
|
+
if (props.signature === _useGridApiEventHandler.GridSignature.DataGrid && newRows.length > 1) {
|
|
274
|
+
throw new Error(["MUI: You can't replace rows using `apiRef.current.unstable_replaceRows` on the DataGrid.", 'You need to upgrade to DataGridPro or DataGridPremium component to unlock this feature.'].join('\n'));
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
if (newRows.length === 0) {
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
const allRows = (0, _gridRowsSelector.gridRowIdsSelector)(apiRef);
|
|
282
|
+
const updatedRows = [...allRows];
|
|
283
|
+
const idRowsLookup = (0, _gridRowsSelector.gridRowsLookupSelector)(apiRef);
|
|
284
|
+
const idToIdLookup = (0, _gridRowsSelector.gridRowsIdToIdLookupSelector)(apiRef);
|
|
285
|
+
const tree = (0, _gridRowsSelector.gridRowTreeSelector)(apiRef);
|
|
286
|
+
const updatedIdRowsLookup = (0, _extends2.default)({}, idRowsLookup);
|
|
287
|
+
const updatedIdToIdLookup = (0, _extends2.default)({}, idToIdLookup);
|
|
288
|
+
const updatedTree = (0, _extends2.default)({}, tree);
|
|
289
|
+
const newRowEntries = newRows.map(newRowModel => {
|
|
290
|
+
const rowId = (0, _gridRowsUtils.getRowIdFromRowModel)(newRowModel, props.getRowId, 'A row was provided without id when calling replaceRows().');
|
|
291
|
+
return {
|
|
292
|
+
id: rowId,
|
|
293
|
+
model: newRowModel
|
|
294
|
+
};
|
|
295
|
+
});
|
|
296
|
+
newRowEntries.forEach((row, index) => {
|
|
297
|
+
const [replacedRowId] = updatedRows.splice(firstRowToRender + index, 1, row.id);
|
|
298
|
+
delete updatedIdRowsLookup[replacedRowId];
|
|
299
|
+
delete updatedIdToIdLookup[replacedRowId];
|
|
300
|
+
delete updatedTree[replacedRowId];
|
|
301
|
+
});
|
|
302
|
+
newRowEntries.forEach(row => {
|
|
303
|
+
const rowTreeNodeConfig = {
|
|
304
|
+
id: row.id,
|
|
305
|
+
parent: null,
|
|
306
|
+
depth: 0,
|
|
307
|
+
groupingKey: null,
|
|
308
|
+
groupingField: null
|
|
309
|
+
};
|
|
310
|
+
updatedIdRowsLookup[row.id] = row.model;
|
|
311
|
+
updatedIdToIdLookup[row.id] = row.id;
|
|
312
|
+
updatedTree[row.id] = rowTreeNodeConfig;
|
|
313
|
+
});
|
|
314
|
+
apiRef.current.setState(state => (0, _extends2.default)({}, state, {
|
|
315
|
+
rows: (0, _extends2.default)({}, state.rows, {
|
|
316
|
+
idRowsLookup: updatedIdRowsLookup,
|
|
317
|
+
idToIdLookup: updatedIdToIdLookup,
|
|
318
|
+
tree: updatedTree,
|
|
319
|
+
ids: updatedRows
|
|
320
|
+
})
|
|
321
|
+
}));
|
|
322
|
+
apiRef.current.publishEvent('rowsSet');
|
|
323
|
+
}, [apiRef, props.signature, props.getRowId]);
|
|
272
324
|
const rowApi = {
|
|
273
325
|
getRow,
|
|
274
326
|
getRowModels,
|
|
@@ -280,7 +332,8 @@ const useGridRows = (apiRef, props) => {
|
|
|
280
332
|
setRowChildrenExpansion,
|
|
281
333
|
getRowNode,
|
|
282
334
|
getRowIndexRelativeToVisibleRows,
|
|
283
|
-
getRowGroupChildren
|
|
335
|
+
getRowGroupChildren,
|
|
336
|
+
unstable_replaceRows: replaceRows
|
|
284
337
|
};
|
|
285
338
|
/**
|
|
286
339
|
* EVENTS
|
|
@@ -75,7 +75,7 @@ const useGridRowsMeta = (apiRef, props) => {
|
|
|
75
75
|
if (!rowsHeightLookup.current[row.id]) {
|
|
76
76
|
rowsHeightLookup.current[row.id] = {
|
|
77
77
|
sizes: {
|
|
78
|
-
|
|
78
|
+
baseCenter: rowHeightFromDensity
|
|
79
79
|
},
|
|
80
80
|
isResized: false,
|
|
81
81
|
autoHeight: false,
|
|
@@ -90,7 +90,7 @@ const useGridRowsMeta = (apiRef, props) => {
|
|
|
90
90
|
sizes
|
|
91
91
|
} = rowsHeightLookup.current[row.id];
|
|
92
92
|
let baseRowHeight = rowHeightFromDensity;
|
|
93
|
-
const existingBaseRowHeight = sizes.
|
|
93
|
+
const existingBaseRowHeight = sizes.baseCenter;
|
|
94
94
|
|
|
95
95
|
if (isResized) {
|
|
96
96
|
// Do not recalculate resized row height and use the value from the lookup
|
|
@@ -121,12 +121,19 @@ const useGridRowsMeta = (apiRef, props) => {
|
|
|
121
121
|
}
|
|
122
122
|
} else {
|
|
123
123
|
rowsHeightLookup.current[row.id].needsFirstMeasurement = false;
|
|
124
|
-
}
|
|
124
|
+
}
|
|
125
125
|
|
|
126
|
+
const existingBaseSizes = Object.entries(sizes).reduce((acc, [key, size]) => {
|
|
127
|
+
if (/^base[A-Z]/.test(key)) {
|
|
128
|
+
acc[key] = size;
|
|
129
|
+
}
|
|
126
130
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
131
|
+
return acc;
|
|
132
|
+
}, {}); // We use an object to make simple to check if a height is already added or not
|
|
133
|
+
|
|
134
|
+
const initialHeights = (0, _extends2.default)({}, existingBaseSizes, {
|
|
135
|
+
baseCenter: baseRowHeight
|
|
136
|
+
});
|
|
130
137
|
|
|
131
138
|
if (getRowSpacing) {
|
|
132
139
|
var _spacing$top, _spacing$bottom;
|
|
@@ -149,9 +156,17 @@ const useGridRowsMeta = (apiRef, props) => {
|
|
|
149
156
|
const positions = [];
|
|
150
157
|
const currentPageTotalHeight = currentPage.rows.reduce((acc, row) => {
|
|
151
158
|
positions.push(acc);
|
|
159
|
+
let maximumBaseSize = 0;
|
|
160
|
+
let otherSizes = 0;
|
|
152
161
|
const processedSizes = calculateRowProcessedSizes(row);
|
|
153
|
-
|
|
154
|
-
|
|
162
|
+
Object.entries(processedSizes).forEach(([size, value]) => {
|
|
163
|
+
if (/^base[A-Z]/.test(size)) {
|
|
164
|
+
maximumBaseSize = value > maximumBaseSize ? value : maximumBaseSize;
|
|
165
|
+
} else {
|
|
166
|
+
otherSizes += value;
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
return acc + maximumBaseSize + otherSizes;
|
|
155
170
|
}, 0);
|
|
156
171
|
pinnedRows == null ? void 0 : (_pinnedRows$top = pinnedRows.top) == null ? void 0 : _pinnedRows$top.forEach(row => {
|
|
157
172
|
calculateRowProcessedSizes(row);
|
|
@@ -177,7 +192,7 @@ const useGridRowsMeta = (apiRef, props) => {
|
|
|
177
192
|
}, [apiRef, currentPage.rows, rowHeightFromDensity, getRowHeightProp, getRowSpacing, getEstimatedRowHeight, pinnedRows]);
|
|
178
193
|
const getRowHeight = React.useCallback(rowId => {
|
|
179
194
|
const height = rowsHeightLookup.current[rowId];
|
|
180
|
-
return height ? height.sizes.
|
|
195
|
+
return height ? height.sizes.baseCenter : rowHeightFromDensity;
|
|
181
196
|
}, [rowHeightFromDensity]);
|
|
182
197
|
|
|
183
198
|
const getRowInternalSizes = rowId => {
|
|
@@ -187,21 +202,21 @@ const useGridRowsMeta = (apiRef, props) => {
|
|
|
187
202
|
};
|
|
188
203
|
|
|
189
204
|
const setRowHeight = React.useCallback((id, height) => {
|
|
190
|
-
rowsHeightLookup.current[id].sizes.
|
|
205
|
+
rowsHeightLookup.current[id].sizes.baseCenter = height;
|
|
191
206
|
rowsHeightLookup.current[id].isResized = true;
|
|
192
207
|
rowsHeightLookup.current[id].needsFirstMeasurement = false;
|
|
193
208
|
hydrateRowsMeta();
|
|
194
209
|
}, [hydrateRowsMeta]);
|
|
195
210
|
const debouncedHydrateRowsMeta = React.useMemo(() => (0, _utils.debounce)(hydrateRowsMeta), [hydrateRowsMeta]);
|
|
196
|
-
const storeMeasuredRowHeight = React.useCallback((id, height) => {
|
|
211
|
+
const storeMeasuredRowHeight = React.useCallback((id, height, position) => {
|
|
197
212
|
if (!rowsHeightLookup.current[id] || !rowsHeightLookup.current[id].autoHeight) {
|
|
198
213
|
return;
|
|
199
214
|
} // Only trigger hydration if the value is different, otherwise we trigger a loop
|
|
200
215
|
|
|
201
216
|
|
|
202
|
-
const needsHydration = rowsHeightLookup.current[id].sizes
|
|
217
|
+
const needsHydration = rowsHeightLookup.current[id].sizes[`base${(0, _utils.capitalize)(position)}`] !== height;
|
|
203
218
|
rowsHeightLookup.current[id].needsFirstMeasurement = false;
|
|
204
|
-
rowsHeightLookup.current[id].sizes
|
|
219
|
+
rowsHeightLookup.current[id].sizes[`base${(0, _utils.capitalize)(position)}`] = height;
|
|
205
220
|
|
|
206
221
|
if (needsHydration) {
|
|
207
222
|
debouncedHydrateRowsMeta();
|
|
@@ -219,7 +234,11 @@ const useGridRowsMeta = (apiRef, props) => {
|
|
|
219
234
|
if (hasRowWithAutoHeight.current && index > lastMeasuredRowIndex.current) {
|
|
220
235
|
lastMeasuredRowIndex.current = index;
|
|
221
236
|
}
|
|
222
|
-
}, []);
|
|
237
|
+
}, []);
|
|
238
|
+
const resetRowHeights = React.useCallback(() => {
|
|
239
|
+
rowsHeightLookup.current = {};
|
|
240
|
+
hydrateRowsMeta();
|
|
241
|
+
}, [hydrateRowsMeta]); // The effect is used to build the rows meta data - currentPageTotalHeight and positions.
|
|
223
242
|
// Because of variable row height this is needed for the virtualization
|
|
224
243
|
|
|
225
244
|
React.useEffect(() => {
|
|
@@ -233,7 +252,8 @@ const useGridRowsMeta = (apiRef, props) => {
|
|
|
233
252
|
unstable_getRowHeight: getRowHeight,
|
|
234
253
|
unstable_getRowInternalSizes: getRowInternalSizes,
|
|
235
254
|
unstable_setRowHeight: setRowHeight,
|
|
236
|
-
unstable_storeRowHeightMeasurement: storeMeasuredRowHeight
|
|
255
|
+
unstable_storeRowHeightMeasurement: storeMeasuredRowHeight,
|
|
256
|
+
resetRowHeights
|
|
237
257
|
};
|
|
238
258
|
(0, _useGridApiMethod.useGridApiMethod)(apiRef, rowsMetaApi, 'GridRowsMetaApi');
|
|
239
259
|
};
|
|
@@ -252,8 +252,19 @@ const useGridVirtualScroller = props => {
|
|
|
252
252
|
}, [renderContext, updateRenderZonePosition]);
|
|
253
253
|
const updateRenderContext = React.useCallback(nextRenderContext => {
|
|
254
254
|
setRenderContext(nextRenderContext);
|
|
255
|
+
const [firstRowToRender, lastRowToRender] = getRenderableIndexes({
|
|
256
|
+
firstIndex: nextRenderContext.firstRowIndex,
|
|
257
|
+
lastIndex: nextRenderContext.lastRowIndex,
|
|
258
|
+
minFirstIndex: 0,
|
|
259
|
+
maxLastIndex: currentPage.rows.length,
|
|
260
|
+
buffer: rootProps.rowBuffer
|
|
261
|
+
});
|
|
262
|
+
apiRef.current.publishEvent('renderedRowsIntervalChange', {
|
|
263
|
+
firstRowToRender,
|
|
264
|
+
lastRowToRender
|
|
265
|
+
});
|
|
255
266
|
prevRenderContext.current = nextRenderContext;
|
|
256
|
-
}, [setRenderContext, prevRenderContext]);
|
|
267
|
+
}, [apiRef, setRenderContext, prevRenderContext, currentPage.rows.length, rootProps.rowBuffer]);
|
|
257
268
|
React.useEffect(() => {
|
|
258
269
|
if (containerWidth == null) {
|
|
259
270
|
return;
|
|
@@ -324,8 +335,8 @@ const useGridVirtualScroller = props => {
|
|
|
324
335
|
minFirstColumn = renderZoneMinColumnIndex,
|
|
325
336
|
maxLastColumn = renderZoneMaxColumnIndex,
|
|
326
337
|
availableSpace = containerWidth,
|
|
327
|
-
|
|
328
|
-
|
|
338
|
+
rowIndexOffset = 0,
|
|
339
|
+
position = 'center'
|
|
329
340
|
} = params;
|
|
330
341
|
|
|
331
342
|
if (!nextRenderContext || availableSpace == null) {
|
|
@@ -395,7 +406,7 @@ const useGridVirtualScroller = props => {
|
|
|
395
406
|
model
|
|
396
407
|
} = renderedRows[i];
|
|
397
408
|
const lastVisibleRowIndex = firstRowToRender + i === currentPage.rows.length - 1;
|
|
398
|
-
const baseRowHeight = !apiRef.current.unstable_rowHasAutoHeight(id)
|
|
409
|
+
const baseRowHeight = !apiRef.current.unstable_rowHasAutoHeight(id) ? apiRef.current.unstable_getRowHeight(id) : 'auto';
|
|
399
410
|
let isSelected;
|
|
400
411
|
|
|
401
412
|
if (selectedRowsLookup[id] == null) {
|
|
@@ -421,7 +432,8 @@ const useGridVirtualScroller = props => {
|
|
|
421
432
|
selected: isSelected,
|
|
422
433
|
index: rowIndexOffset + ((currentPage == null ? void 0 : (_currentPage$range5 = currentPage.range) == null ? void 0 : _currentPage$range5.firstRowIndex) || 0) + firstRowToRender + i,
|
|
423
434
|
containerWidth: availableSpace,
|
|
424
|
-
isLastVisible: lastVisibleRowIndex
|
|
435
|
+
isLastVisible: lastVisibleRowIndex,
|
|
436
|
+
position: position
|
|
425
437
|
}, typeof getRowProps === 'function' ? getRowProps(id, model) : {}, (_rootProps$components = rootProps.componentsProps) == null ? void 0 : _rootProps$components.row), id));
|
|
426
438
|
}
|
|
427
439
|
|
|
@@ -19,8 +19,8 @@ const useGridNativeEventListener = (apiRef, ref, eventName, handler, options) =>
|
|
|
19
19
|
const logger = (0, _useGridLogger.useGridLogger)(apiRef, 'useNativeEventListener');
|
|
20
20
|
const [added, setAdded] = React.useState(false);
|
|
21
21
|
const handlerRef = React.useRef(handler);
|
|
22
|
-
const wrapHandler = React.useCallback(
|
|
23
|
-
return handlerRef.current && handlerRef.current(
|
|
22
|
+
const wrapHandler = React.useCallback(event => {
|
|
23
|
+
return handlerRef.current && handlerRef.current(event);
|
|
24
24
|
}, []);
|
|
25
25
|
React.useEffect(() => {
|
|
26
26
|
handlerRef.current = handler;
|
package/node/index.js
CHANGED
package/node/internals/index.js
CHANGED
|
@@ -57,6 +57,12 @@ Object.defineProperty(exports, "clamp", {
|
|
|
57
57
|
return _utils2.clamp;
|
|
58
58
|
}
|
|
59
59
|
});
|
|
60
|
+
Object.defineProperty(exports, "columnGroupsStateInitializer", {
|
|
61
|
+
enumerable: true,
|
|
62
|
+
get: function () {
|
|
63
|
+
return _useGridColumnGrouping.columnGroupsStateInitializer;
|
|
64
|
+
}
|
|
65
|
+
});
|
|
60
66
|
Object.defineProperty(exports, "columnMenuStateInitializer", {
|
|
61
67
|
enumerable: true,
|
|
62
68
|
get: function () {
|
|
@@ -225,6 +231,18 @@ Object.defineProperty(exports, "useGridClipboard", {
|
|
|
225
231
|
return _useGridClipboard.useGridClipboard;
|
|
226
232
|
}
|
|
227
233
|
});
|
|
234
|
+
Object.defineProperty(exports, "useGridColumnGrouping", {
|
|
235
|
+
enumerable: true,
|
|
236
|
+
get: function () {
|
|
237
|
+
return _useGridColumnGrouping.useGridColumnGrouping;
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
Object.defineProperty(exports, "useGridColumnGroupingPreProcessors", {
|
|
241
|
+
enumerable: true,
|
|
242
|
+
get: function () {
|
|
243
|
+
return _useGridColumnGroupingPreProcessors.useGridColumnGroupingPreProcessors;
|
|
244
|
+
}
|
|
245
|
+
});
|
|
228
246
|
Object.defineProperty(exports, "useGridColumnHeaders", {
|
|
229
247
|
enumerable: true,
|
|
230
248
|
get: function () {
|
|
@@ -438,6 +456,10 @@ var _useGridColumns = require("../hooks/features/columns/useGridColumns");
|
|
|
438
456
|
|
|
439
457
|
var _useGridColumnSpanning = require("../hooks/features/columns/useGridColumnSpanning");
|
|
440
458
|
|
|
459
|
+
var _useGridColumnGrouping = require("../hooks/features/columnGrouping/useGridColumnGrouping");
|
|
460
|
+
|
|
461
|
+
var _useGridColumnGroupingPreProcessors = require("../hooks/features/columnGrouping/useGridColumnGroupingPreProcessors");
|
|
462
|
+
|
|
441
463
|
var _useGridDensity = require("../hooks/features/density/useGridDensity");
|
|
442
464
|
|
|
443
465
|
var _useGridCsvExport = require("../hooks/features/export/useGridCsvExport");
|
|
@@ -92,4 +92,6 @@ exports.GridEvents = GridEvents;
|
|
|
92
92
|
GridEvents["preferencePanelOpen"] = "preferencePanelOpen";
|
|
93
93
|
GridEvents["menuOpen"] = "menuOpen";
|
|
94
94
|
GridEvents["menuClose"] = "menuClose";
|
|
95
|
+
GridEvents["renderedRowsIntervalChange"] = "renderedRowsIntervalChange";
|
|
96
|
+
GridEvents["fetchRows"] = "fetchRows";
|
|
95
97
|
})(GridEvents || (exports.GridEvents = GridEvents = {}));
|
package/node/models/index.js
CHANGED
|
@@ -316,6 +316,19 @@ Object.keys(_gridSortModel).forEach(function (key) {
|
|
|
316
316
|
});
|
|
317
317
|
});
|
|
318
318
|
|
|
319
|
+
var _gridColumnGrouping = require("./gridColumnGrouping");
|
|
320
|
+
|
|
321
|
+
Object.keys(_gridColumnGrouping).forEach(function (key) {
|
|
322
|
+
if (key === "default" || key === "__esModule") return;
|
|
323
|
+
if (key in exports && exports[key] === _gridColumnGrouping[key]) return;
|
|
324
|
+
Object.defineProperty(exports, key, {
|
|
325
|
+
enumerable: true,
|
|
326
|
+
get: function () {
|
|
327
|
+
return _gridColumnGrouping[key];
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
});
|
|
331
|
+
|
|
319
332
|
var _gridFilterOperator = require("./gridFilterOperator");
|
|
320
333
|
|
|
321
334
|
Object.keys(_gridFilterOperator).forEach(function (key) {
|
|
@@ -184,4 +184,17 @@ Object.keys(_gridMenuParams).forEach(function (key) {
|
|
|
184
184
|
return _gridMenuParams[key];
|
|
185
185
|
}
|
|
186
186
|
});
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
var _gridRenderedRowsIntervalChangeParams = require("./gridRenderedRowsIntervalChangeParams");
|
|
190
|
+
|
|
191
|
+
Object.keys(_gridRenderedRowsIntervalChangeParams).forEach(function (key) {
|
|
192
|
+
if (key === "default" || key === "__esModule") return;
|
|
193
|
+
if (key in exports && exports[key] === _gridRenderedRowsIntervalChangeParams[key]) return;
|
|
194
|
+
Object.defineProperty(exports, key, {
|
|
195
|
+
enumerable: true,
|
|
196
|
+
get: function () {
|
|
197
|
+
return _gridRenderedRowsIntervalChangeParams[key];
|
|
198
|
+
}
|
|
199
|
+
});
|
|
187
200
|
});
|
package/node/utils/utils.js
CHANGED
|
@@ -10,6 +10,7 @@ exports.isFunction = isFunction;
|
|
|
10
10
|
exports.isNumber = isNumber;
|
|
11
11
|
exports.isObject = isObject;
|
|
12
12
|
exports.localStorageAvailable = localStorageAvailable;
|
|
13
|
+
exports.randomNumberBetween = randomNumberBetween;
|
|
13
14
|
|
|
14
15
|
function isNumber(value) {
|
|
15
16
|
return typeof value === 'number';
|
|
@@ -198,4 +199,21 @@ function isDeepEqual(a, b) {
|
|
|
198
199
|
|
|
199
200
|
|
|
200
201
|
return a !== a && b !== b;
|
|
202
|
+
} // Pseudo random number. See https://stackoverflow.com/a/47593316
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
function mulberry32(a) {
|
|
206
|
+
return () => {
|
|
207
|
+
/* eslint-disable */
|
|
208
|
+
let t = a += 0x6d2b79f5;
|
|
209
|
+
t = Math.imul(t ^ t >>> 15, t | 1);
|
|
210
|
+
t ^= t + Math.imul(t ^ t >>> 7, t | 61);
|
|
211
|
+
return ((t ^ t >>> 14) >>> 0) / 4294967296;
|
|
212
|
+
/* eslint-enable */
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
function randomNumberBetween(seed, min, max) {
|
|
217
|
+
const random = mulberry32(seed);
|
|
218
|
+
return () => min + (max - min) * random();
|
|
201
219
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mui/x-data-grid",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.17.0",
|
|
4
4
|
"description": "The community edition of the data grid component (MUI X).",
|
|
5
5
|
"author": "MUI Team",
|
|
6
6
|
"main": "./node/index.js",
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
"directory": "packages/grid/x-data-grid"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@babel/runtime": "^7.18.
|
|
39
|
-
"@mui/utils": "^5.
|
|
38
|
+
"@babel/runtime": "^7.18.9",
|
|
39
|
+
"@mui/utils": "^5.9.3",
|
|
40
40
|
"clsx": "^1.2.1",
|
|
41
41
|
"prop-types": "^15.8.1",
|
|
42
42
|
"reselect": "^4.1.6"
|
package/utils/utils.d.ts
CHANGED
|
@@ -35,3 +35,4 @@ export declare const clamp: (value: number, min: number, max: number) => number;
|
|
|
35
35
|
* We only type the public interface to avoid dozens of `as` in the function.
|
|
36
36
|
*/
|
|
37
37
|
export declare function isDeepEqual<T>(actual: any, expected: T): actual is T;
|
|
38
|
+
export declare function randomNumberBetween(seed: number, min: number, max: number): () => number;
|
package/utils/utils.js
CHANGED
|
@@ -177,4 +177,20 @@ export function isDeepEqual(a, b) {
|
|
|
177
177
|
|
|
178
178
|
|
|
179
179
|
return a !== a && b !== b;
|
|
180
|
+
} // Pseudo random number. See https://stackoverflow.com/a/47593316
|
|
181
|
+
|
|
182
|
+
function mulberry32(a) {
|
|
183
|
+
return () => {
|
|
184
|
+
/* eslint-disable */
|
|
185
|
+
let t = a += 0x6d2b79f5;
|
|
186
|
+
t = Math.imul(t ^ t >>> 15, t | 1);
|
|
187
|
+
t ^= t + Math.imul(t ^ t >>> 7, t | 61);
|
|
188
|
+
return ((t ^ t >>> 14) >>> 0) / 4294967296;
|
|
189
|
+
/* eslint-enable */
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export function randomNumberBetween(seed, min, max) {
|
|
194
|
+
const random = mulberry32(seed);
|
|
195
|
+
return () => min + (max - min) * random();
|
|
180
196
|
}
|