@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
|
@@ -69,74 +69,74 @@ export const sanitizeFilterModel = (model, disableMultipleColumnsFiltering, apiR
|
|
|
69
69
|
export const mergeStateWithFilterModel = (filterModel, disableMultipleColumnsFiltering, apiRef) => filteringState => _extends({}, filteringState, {
|
|
70
70
|
filterModel: sanitizeFilterModel(filterModel, disableMultipleColumnsFiltering, apiRef)
|
|
71
71
|
});
|
|
72
|
-
/**
|
|
73
|
-
* Generates a method to easily check if a row is matching the current filter model.
|
|
74
|
-
* @param {GridFilterModel} filterModel The model with which we want to filter the rows.
|
|
75
|
-
* @param {React.MutableRefObject<GridApiCommunity>} apiRef The API of the grid.
|
|
76
|
-
* @returns {GridAggregatedFilterItemApplier | null} A method that checks if a row is matching the current filter model. If `null`, we consider that all the rows are matching the filters.
|
|
77
|
-
*/
|
|
78
72
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
const getFilterCallbackFromItem = filterItem => {
|
|
85
|
-
if (!filterItem.columnField || !filterItem.operatorValue) {
|
|
86
|
-
return null;
|
|
87
|
-
}
|
|
73
|
+
const getFilterCallbackFromItem = (filterItem, apiRef) => {
|
|
74
|
+
if (!filterItem.columnField || !filterItem.operatorValue) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
88
77
|
|
|
89
|
-
|
|
78
|
+
const column = apiRef.current.getColumn(filterItem.columnField);
|
|
90
79
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
80
|
+
if (!column) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
94
83
|
|
|
95
|
-
|
|
84
|
+
let parsedValue;
|
|
96
85
|
|
|
97
|
-
|
|
98
|
-
|
|
86
|
+
if (column.valueParser) {
|
|
87
|
+
var _filterItem$value;
|
|
99
88
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
89
|
+
const parser = column.valueParser;
|
|
90
|
+
parsedValue = Array.isArray(filterItem.value) ? (_filterItem$value = filterItem.value) == null ? void 0 : _filterItem$value.map(x => parser(x)) : parser(filterItem.value);
|
|
91
|
+
} else {
|
|
92
|
+
parsedValue = filterItem.value;
|
|
93
|
+
}
|
|
105
94
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
95
|
+
const newFilterItem = _extends({}, filterItem, {
|
|
96
|
+
value: parsedValue
|
|
97
|
+
});
|
|
109
98
|
|
|
110
|
-
|
|
99
|
+
const filterOperators = column.filterOperators;
|
|
111
100
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
101
|
+
if (!(filterOperators != null && filterOperators.length)) {
|
|
102
|
+
throw new Error(`MUI: No filter operators found for column '${column.field}'.`);
|
|
103
|
+
}
|
|
115
104
|
|
|
116
|
-
|
|
105
|
+
const filterOperator = filterOperators.find(operator => operator.value === newFilterItem.operatorValue);
|
|
117
106
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
107
|
+
if (!filterOperator) {
|
|
108
|
+
throw new Error(`MUI: No filter operator found for column '${column.field}' and operator value '${newFilterItem.operatorValue}'.`);
|
|
109
|
+
}
|
|
121
110
|
|
|
122
|
-
|
|
111
|
+
const applyFilterOnRow = filterOperator.getApplyFilterFn(newFilterItem, column);
|
|
123
112
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
113
|
+
if (typeof applyFilterOnRow !== 'function') {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
127
116
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
117
|
+
const fn = rowId => {
|
|
118
|
+
const cellParams = apiRef.current.getCellParams(rowId, newFilterItem.columnField);
|
|
119
|
+
return applyFilterOnRow(cellParams);
|
|
120
|
+
};
|
|
132
121
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
};
|
|
122
|
+
return {
|
|
123
|
+
fn,
|
|
124
|
+
item: newFilterItem
|
|
137
125
|
};
|
|
126
|
+
};
|
|
127
|
+
/**
|
|
128
|
+
* Generates a method to easily check if a row is matching the current filter model.
|
|
129
|
+
* @param {GridFilterModel} filterModel The model with which we want to filter the rows.
|
|
130
|
+
* @param {React.MutableRefObject<GridApiCommunity>} apiRef The API of the grid.
|
|
131
|
+
* @returns {GridAggregatedFilterItemApplier | null} A method that checks if a row is matching the current filter model. If `null`, we consider that all the rows are matching the filters.
|
|
132
|
+
*/
|
|
138
133
|
|
|
139
|
-
|
|
134
|
+
|
|
135
|
+
export const buildAggregatedFilterItemsApplier = (filterModel, apiRef) => {
|
|
136
|
+
const {
|
|
137
|
+
items
|
|
138
|
+
} = filterModel;
|
|
139
|
+
const appliers = items.map(item => getFilterCallbackFromItem(item, apiRef)).filter(callback => !!callback);
|
|
140
140
|
|
|
141
141
|
if (appliers.length === 0) {
|
|
142
142
|
return null;
|
|
@@ -219,9 +219,10 @@ export const buildAggregatedFilterApplier = (filterModel, apiRef) => {
|
|
|
219
219
|
passingQuickFilterValues: isRowMatchingQuickFilter && isRowMatchingQuickFilter(rowId, shouldApplyFilter)
|
|
220
220
|
});
|
|
221
221
|
};
|
|
222
|
-
export const passFilterLogic = (allFilterItemResults, allQuickFilterResults, filterModel) => {
|
|
222
|
+
export const passFilterLogic = (allFilterItemResults, allQuickFilterResults, filterModel, apiRef) => {
|
|
223
223
|
var _filterModel$quickFil, _filterModel$linkOper;
|
|
224
224
|
|
|
225
|
+
const cleanedFilterItems = filterModel.items.filter(item => getFilterCallbackFromItem(item, apiRef) !== null);
|
|
225
226
|
const cleanedAllFilterItemResults = allFilterItemResults.filter(result => result != null);
|
|
226
227
|
const cleanedAllQuickFilterResults = allQuickFilterResults.filter(result => result != null); // Defaultize operators
|
|
227
228
|
|
|
@@ -235,13 +236,13 @@ export const passFilterLogic = (allFilterItemResults, allQuickFilterResults, fil
|
|
|
235
236
|
};
|
|
236
237
|
|
|
237
238
|
if (linkOperator === GridLinkOperator.And) {
|
|
238
|
-
const passesAllFilters =
|
|
239
|
+
const passesAllFilters = cleanedFilterItems.every(filterItemPredicate);
|
|
239
240
|
|
|
240
241
|
if (!passesAllFilters) {
|
|
241
242
|
return false;
|
|
242
243
|
}
|
|
243
244
|
} else {
|
|
244
|
-
const passesSomeFilters =
|
|
245
|
+
const passesSomeFilters = cleanedFilterItems.some(filterItemPredicate);
|
|
245
246
|
|
|
246
247
|
if (!passesSomeFilters) {
|
|
247
248
|
return false;
|
|
@@ -271,7 +271,7 @@ export const useGridFilter = (apiRef, props) => {
|
|
|
271
271
|
passingFilterItems,
|
|
272
272
|
passingQuickFilterValues
|
|
273
273
|
} = params.isRowMatchingFilters(rowId);
|
|
274
|
-
isRowPassing = passFilterLogic([passingFilterItems], [passingQuickFilterValues], params.filterModel);
|
|
274
|
+
isRowPassing = passFilterLogic([passingFilterItems], [passingQuickFilterValues], params.filterModel, apiRef);
|
|
275
275
|
}
|
|
276
276
|
|
|
277
277
|
filteredRowsLookup[rowId] = isRowPassing;
|
package/hooks/features/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Only export the variable and types that should be publicly exposed and re-exported from `@mui/x-data-grid-pro`
|
|
2
2
|
export * from './columnMenu';
|
|
3
3
|
export * from './columns';
|
|
4
|
+
export * from './columnGrouping';
|
|
4
5
|
export * from './density';
|
|
5
6
|
export * from './editRows';
|
|
6
7
|
export * from './filter';
|
|
@@ -33,7 +33,7 @@ export declare const gridPaginationRowRangeSelector: import("../../../utils/crea
|
|
|
33
33
|
*/
|
|
34
34
|
export declare const gridPaginatedVisibleSortedGridRowEntriesSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, {
|
|
35
35
|
id: import("../../..").GridRowId;
|
|
36
|
-
model:
|
|
36
|
+
model: import("../../..").GridValidRowModel;
|
|
37
37
|
}[]>;
|
|
38
38
|
/**
|
|
39
39
|
* Get the id of each row to include in the current page if the pagination is enabled.
|
|
@@ -3,7 +3,7 @@ export declare const gridRowsStateSelector: (state: GridStateCommunity) => impor
|
|
|
3
3
|
export declare const gridRowCountSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, number>;
|
|
4
4
|
export declare const gridRowsLoadingSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, boolean | undefined>;
|
|
5
5
|
export declare const gridTopLevelRowCountSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, number>;
|
|
6
|
-
export declare const gridRowsLookupSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, import("../../..").GridRowsLookup<
|
|
6
|
+
export declare const gridRowsLookupSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, import("../../..").GridRowsLookup<import("../../..").GridValidRowModel>>;
|
|
7
7
|
export declare const gridRowsIdToIdLookupSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, Record<string, import("../../..").GridRowId>>;
|
|
8
8
|
export declare const gridRowTreeSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, import("../../..").GridRowTreeConfig>;
|
|
9
9
|
export declare const gridRowGroupingNameSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, string>;
|
|
@@ -2,7 +2,7 @@ import _extends from "@babel/runtime/helpers/esm/extends";
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { useGridApiMethod } from '../../utils/useGridApiMethod';
|
|
4
4
|
import { useGridLogger } from '../../utils/useGridLogger';
|
|
5
|
-
import { gridRowCountSelector, gridRowsLookupSelector, gridRowTreeSelector, gridRowIdsSelector, gridRowGroupingNameSelector } from './gridRowsSelector';
|
|
5
|
+
import { gridRowCountSelector, gridRowsLookupSelector, gridRowTreeSelector, gridRowIdsSelector, gridRowGroupingNameSelector, gridRowsIdToIdLookupSelector } from './gridRowsSelector';
|
|
6
6
|
import { GridSignature, useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
|
|
7
7
|
import { useGridVisibleRows } from '../../utils/useGridVisibleRows';
|
|
8
8
|
import { gridSortedRowIdsSelector } from '../sorting/gridSortingSelector';
|
|
@@ -104,14 +104,14 @@ export const useGridRows = (apiRef, props) => {
|
|
|
104
104
|
} // we remove duplicate updates. A server can batch updates, and send several updates for the same row in one fn call.
|
|
105
105
|
|
|
106
106
|
|
|
107
|
-
const
|
|
107
|
+
const uniqueUpdates = new Map();
|
|
108
108
|
updates.forEach(update => {
|
|
109
109
|
const id = getRowIdFromRowModel(update, props.getRowId, 'A row was provided without id when calling updateRows():');
|
|
110
110
|
|
|
111
|
-
if (
|
|
112
|
-
|
|
111
|
+
if (uniqueUpdates.has(id)) {
|
|
112
|
+
uniqueUpdates.set(id, _extends({}, uniqueUpdates.get(id), update));
|
|
113
113
|
} else {
|
|
114
|
-
|
|
114
|
+
uniqueUpdates.set(id, update);
|
|
115
115
|
}
|
|
116
116
|
});
|
|
117
117
|
const deletedRowIds = [];
|
|
@@ -123,7 +123,7 @@ export const useGridRows = (apiRef, props) => {
|
|
|
123
123
|
idToIdLookup: _extends({}, prevCache.idToIdLookup),
|
|
124
124
|
ids: [...prevCache.ids]
|
|
125
125
|
};
|
|
126
|
-
|
|
126
|
+
uniqueUpdates.forEach((partialRow, id) => {
|
|
127
127
|
// eslint-disable-next-line no-underscore-dangle
|
|
128
128
|
if (partialRow._action === 'delete') {
|
|
129
129
|
delete newCache.idRowsLookup[id];
|
|
@@ -241,8 +241,64 @@ export const useGridRows = (apiRef, props) => {
|
|
|
241
241
|
ids: updatedRows
|
|
242
242
|
})
|
|
243
243
|
}));
|
|
244
|
-
apiRef.current.
|
|
244
|
+
apiRef.current.publishEvent('rowsSet');
|
|
245
245
|
}, [apiRef, logger]);
|
|
246
|
+
const replaceRows = React.useCallback((firstRowToRender, newRows) => {
|
|
247
|
+
if (props.signature === GridSignature.DataGrid && newRows.length > 1) {
|
|
248
|
+
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'));
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
if (newRows.length === 0) {
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
const allRows = gridRowIdsSelector(apiRef);
|
|
256
|
+
const updatedRows = [...allRows];
|
|
257
|
+
const idRowsLookup = gridRowsLookupSelector(apiRef);
|
|
258
|
+
const idToIdLookup = gridRowsIdToIdLookupSelector(apiRef);
|
|
259
|
+
const tree = gridRowTreeSelector(apiRef);
|
|
260
|
+
|
|
261
|
+
const updatedIdRowsLookup = _extends({}, idRowsLookup);
|
|
262
|
+
|
|
263
|
+
const updatedIdToIdLookup = _extends({}, idToIdLookup);
|
|
264
|
+
|
|
265
|
+
const updatedTree = _extends({}, tree);
|
|
266
|
+
|
|
267
|
+
const newRowEntries = newRows.map(newRowModel => {
|
|
268
|
+
const rowId = getRowIdFromRowModel(newRowModel, props.getRowId, 'A row was provided without id when calling replaceRows().');
|
|
269
|
+
return {
|
|
270
|
+
id: rowId,
|
|
271
|
+
model: newRowModel
|
|
272
|
+
};
|
|
273
|
+
});
|
|
274
|
+
newRowEntries.forEach((row, index) => {
|
|
275
|
+
const [replacedRowId] = updatedRows.splice(firstRowToRender + index, 1, row.id);
|
|
276
|
+
delete updatedIdRowsLookup[replacedRowId];
|
|
277
|
+
delete updatedIdToIdLookup[replacedRowId];
|
|
278
|
+
delete updatedTree[replacedRowId];
|
|
279
|
+
});
|
|
280
|
+
newRowEntries.forEach(row => {
|
|
281
|
+
const rowTreeNodeConfig = {
|
|
282
|
+
id: row.id,
|
|
283
|
+
parent: null,
|
|
284
|
+
depth: 0,
|
|
285
|
+
groupingKey: null,
|
|
286
|
+
groupingField: null
|
|
287
|
+
};
|
|
288
|
+
updatedIdRowsLookup[row.id] = row.model;
|
|
289
|
+
updatedIdToIdLookup[row.id] = row.id;
|
|
290
|
+
updatedTree[row.id] = rowTreeNodeConfig;
|
|
291
|
+
});
|
|
292
|
+
apiRef.current.setState(state => _extends({}, state, {
|
|
293
|
+
rows: _extends({}, state.rows, {
|
|
294
|
+
idRowsLookup: updatedIdRowsLookup,
|
|
295
|
+
idToIdLookup: updatedIdToIdLookup,
|
|
296
|
+
tree: updatedTree,
|
|
297
|
+
ids: updatedRows
|
|
298
|
+
})
|
|
299
|
+
}));
|
|
300
|
+
apiRef.current.publishEvent('rowsSet');
|
|
301
|
+
}, [apiRef, props.signature, props.getRowId]);
|
|
246
302
|
const rowApi = {
|
|
247
303
|
getRow,
|
|
248
304
|
getRowModels,
|
|
@@ -254,7 +310,8 @@ export const useGridRows = (apiRef, props) => {
|
|
|
254
310
|
setRowChildrenExpansion,
|
|
255
311
|
getRowNode,
|
|
256
312
|
getRowIndexRelativeToVisibleRows,
|
|
257
|
-
getRowGroupChildren
|
|
313
|
+
getRowGroupChildren,
|
|
314
|
+
unstable_replaceRows: replaceRows
|
|
258
315
|
};
|
|
259
316
|
/**
|
|
260
317
|
* EVENTS
|
|
@@ -1,6 +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
|
+
import { debounce, capitalize } from '@mui/material/utils';
|
|
4
4
|
import { useGridVisibleRows } from '../../utils/useGridVisibleRows';
|
|
5
5
|
import { useGridApiMethod } from '../../utils/useGridApiMethod';
|
|
6
6
|
import { useGridSelector } from '../../utils/useGridSelector';
|
|
@@ -47,7 +47,7 @@ export const useGridRowsMeta = (apiRef, props) => {
|
|
|
47
47
|
if (!rowsHeightLookup.current[row.id]) {
|
|
48
48
|
rowsHeightLookup.current[row.id] = {
|
|
49
49
|
sizes: {
|
|
50
|
-
|
|
50
|
+
baseCenter: rowHeightFromDensity
|
|
51
51
|
},
|
|
52
52
|
isResized: false,
|
|
53
53
|
autoHeight: false,
|
|
@@ -62,7 +62,7 @@ export const useGridRowsMeta = (apiRef, props) => {
|
|
|
62
62
|
sizes
|
|
63
63
|
} = rowsHeightLookup.current[row.id];
|
|
64
64
|
let baseRowHeight = rowHeightFromDensity;
|
|
65
|
-
const existingBaseRowHeight = sizes.
|
|
65
|
+
const existingBaseRowHeight = sizes.baseCenter;
|
|
66
66
|
|
|
67
67
|
if (isResized) {
|
|
68
68
|
// Do not recalculate resized row height and use the value from the lookup
|
|
@@ -93,12 +93,19 @@ export const useGridRowsMeta = (apiRef, props) => {
|
|
|
93
93
|
}
|
|
94
94
|
} else {
|
|
95
95
|
rowsHeightLookup.current[row.id].needsFirstMeasurement = false;
|
|
96
|
-
}
|
|
96
|
+
}
|
|
97
97
|
|
|
98
|
+
const existingBaseSizes = Object.entries(sizes).reduce((acc, [key, size]) => {
|
|
99
|
+
if (/^base[A-Z]/.test(key)) {
|
|
100
|
+
acc[key] = size;
|
|
101
|
+
}
|
|
98
102
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
103
|
+
return acc;
|
|
104
|
+
}, {}); // We use an object to make simple to check if a height is already added or not
|
|
105
|
+
|
|
106
|
+
const initialHeights = _extends({}, existingBaseSizes, {
|
|
107
|
+
baseCenter: baseRowHeight
|
|
108
|
+
});
|
|
102
109
|
|
|
103
110
|
if (getRowSpacing) {
|
|
104
111
|
var _spacing$top, _spacing$bottom;
|
|
@@ -121,9 +128,17 @@ export const useGridRowsMeta = (apiRef, props) => {
|
|
|
121
128
|
const positions = [];
|
|
122
129
|
const currentPageTotalHeight = currentPage.rows.reduce((acc, row) => {
|
|
123
130
|
positions.push(acc);
|
|
131
|
+
let maximumBaseSize = 0;
|
|
132
|
+
let otherSizes = 0;
|
|
124
133
|
const processedSizes = calculateRowProcessedSizes(row);
|
|
125
|
-
|
|
126
|
-
|
|
134
|
+
Object.entries(processedSizes).forEach(([size, value]) => {
|
|
135
|
+
if (/^base[A-Z]/.test(size)) {
|
|
136
|
+
maximumBaseSize = value > maximumBaseSize ? value : maximumBaseSize;
|
|
137
|
+
} else {
|
|
138
|
+
otherSizes += value;
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
return acc + maximumBaseSize + otherSizes;
|
|
127
142
|
}, 0);
|
|
128
143
|
pinnedRows == null ? void 0 : (_pinnedRows$top = pinnedRows.top) == null ? void 0 : _pinnedRows$top.forEach(row => {
|
|
129
144
|
calculateRowProcessedSizes(row);
|
|
@@ -149,7 +164,7 @@ export const useGridRowsMeta = (apiRef, props) => {
|
|
|
149
164
|
}, [apiRef, currentPage.rows, rowHeightFromDensity, getRowHeightProp, getRowSpacing, getEstimatedRowHeight, pinnedRows]);
|
|
150
165
|
const getRowHeight = React.useCallback(rowId => {
|
|
151
166
|
const height = rowsHeightLookup.current[rowId];
|
|
152
|
-
return height ? height.sizes.
|
|
167
|
+
return height ? height.sizes.baseCenter : rowHeightFromDensity;
|
|
153
168
|
}, [rowHeightFromDensity]);
|
|
154
169
|
|
|
155
170
|
const getRowInternalSizes = rowId => {
|
|
@@ -159,21 +174,21 @@ export const useGridRowsMeta = (apiRef, props) => {
|
|
|
159
174
|
};
|
|
160
175
|
|
|
161
176
|
const setRowHeight = React.useCallback((id, height) => {
|
|
162
|
-
rowsHeightLookup.current[id].sizes.
|
|
177
|
+
rowsHeightLookup.current[id].sizes.baseCenter = height;
|
|
163
178
|
rowsHeightLookup.current[id].isResized = true;
|
|
164
179
|
rowsHeightLookup.current[id].needsFirstMeasurement = false;
|
|
165
180
|
hydrateRowsMeta();
|
|
166
181
|
}, [hydrateRowsMeta]);
|
|
167
182
|
const debouncedHydrateRowsMeta = React.useMemo(() => debounce(hydrateRowsMeta), [hydrateRowsMeta]);
|
|
168
|
-
const storeMeasuredRowHeight = React.useCallback((id, height) => {
|
|
183
|
+
const storeMeasuredRowHeight = React.useCallback((id, height, position) => {
|
|
169
184
|
if (!rowsHeightLookup.current[id] || !rowsHeightLookup.current[id].autoHeight) {
|
|
170
185
|
return;
|
|
171
186
|
} // Only trigger hydration if the value is different, otherwise we trigger a loop
|
|
172
187
|
|
|
173
188
|
|
|
174
|
-
const needsHydration = rowsHeightLookup.current[id].sizes
|
|
189
|
+
const needsHydration = rowsHeightLookup.current[id].sizes[`base${capitalize(position)}`] !== height;
|
|
175
190
|
rowsHeightLookup.current[id].needsFirstMeasurement = false;
|
|
176
|
-
rowsHeightLookup.current[id].sizes
|
|
191
|
+
rowsHeightLookup.current[id].sizes[`base${capitalize(position)}`] = height;
|
|
177
192
|
|
|
178
193
|
if (needsHydration) {
|
|
179
194
|
debouncedHydrateRowsMeta();
|
|
@@ -191,7 +206,11 @@ export const useGridRowsMeta = (apiRef, props) => {
|
|
|
191
206
|
if (hasRowWithAutoHeight.current && index > lastMeasuredRowIndex.current) {
|
|
192
207
|
lastMeasuredRowIndex.current = index;
|
|
193
208
|
}
|
|
194
|
-
}, []);
|
|
209
|
+
}, []);
|
|
210
|
+
const resetRowHeights = React.useCallback(() => {
|
|
211
|
+
rowsHeightLookup.current = {};
|
|
212
|
+
hydrateRowsMeta();
|
|
213
|
+
}, [hydrateRowsMeta]); // The effect is used to build the rows meta data - currentPageTotalHeight and positions.
|
|
195
214
|
// Because of variable row height this is needed for the virtualization
|
|
196
215
|
|
|
197
216
|
React.useEffect(() => {
|
|
@@ -205,7 +224,8 @@ export const useGridRowsMeta = (apiRef, props) => {
|
|
|
205
224
|
unstable_getRowHeight: getRowHeight,
|
|
206
225
|
unstable_getRowInternalSizes: getRowInternalSizes,
|
|
207
226
|
unstable_setRowHeight: setRowHeight,
|
|
208
|
-
unstable_storeRowHeightMeasurement: storeMeasuredRowHeight
|
|
227
|
+
unstable_storeRowHeightMeasurement: storeMeasuredRowHeight,
|
|
228
|
+
resetRowHeights
|
|
209
229
|
};
|
|
210
230
|
useGridApiMethod(apiRef, rowsMetaApi, 'GridRowsMetaApi');
|
|
211
231
|
};
|
|
@@ -2,5 +2,5 @@ import { GridStateCommunity } from '../../../models/gridStateCommunity';
|
|
|
2
2
|
import { GridRowId } from '../../../models/gridRows';
|
|
3
3
|
export declare const gridSelectionStateSelector: (state: GridStateCommunity) => import("../../..").GridSelectionModel;
|
|
4
4
|
export declare const selectedGridRowsCountSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, number>;
|
|
5
|
-
export declare const selectedGridRowsSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, Map<GridRowId,
|
|
5
|
+
export declare const selectedGridRowsSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, Map<GridRowId, import("../../../models/gridRows").GridValidRowModel>>;
|
|
6
6
|
export declare const selectedIdsLookupSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, Record<GridRowId, GridRowId>>;
|
|
@@ -16,7 +16,7 @@ export declare const gridSortedRowIdsSelector: import("../../../utils/createSele
|
|
|
16
16
|
*/
|
|
17
17
|
export declare const gridSortedRowEntriesSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, {
|
|
18
18
|
id: import("../../..").GridRowId;
|
|
19
|
-
model:
|
|
19
|
+
model: import("../../..").GridValidRowModel;
|
|
20
20
|
}[]>;
|
|
21
21
|
/**
|
|
22
22
|
* Get the current sorting model.
|
|
@@ -25,11 +25,11 @@ export declare const useGridVirtualScroller: (props: UseGridVirtualScrollerProps
|
|
|
25
25
|
updateRenderZonePosition: (nextRenderContext: GridRenderContext) => void;
|
|
26
26
|
getRows: (params?: {
|
|
27
27
|
renderContext: GridRenderContext | null;
|
|
28
|
+
position?: string | undefined;
|
|
28
29
|
minFirstColumn?: number | undefined;
|
|
29
30
|
maxLastColumn?: number | undefined;
|
|
30
31
|
availableSpace?: number | null | undefined;
|
|
31
|
-
|
|
32
|
-
rows?: GridRowEntry<any>[] | undefined;
|
|
32
|
+
rows?: GridRowEntry<import("../../../models").GridValidRowModel>[] | undefined;
|
|
33
33
|
rowIndexOffset?: number | undefined;
|
|
34
34
|
}) => JSX.Element[] | null;
|
|
35
35
|
getRootProps: ({ style, ...other }?: {
|
|
@@ -215,8 +215,19 @@ export const useGridVirtualScroller = props => {
|
|
|
215
215
|
}, [renderContext, updateRenderZonePosition]);
|
|
216
216
|
const updateRenderContext = React.useCallback(nextRenderContext => {
|
|
217
217
|
setRenderContext(nextRenderContext);
|
|
218
|
+
const [firstRowToRender, lastRowToRender] = getRenderableIndexes({
|
|
219
|
+
firstIndex: nextRenderContext.firstRowIndex,
|
|
220
|
+
lastIndex: nextRenderContext.lastRowIndex,
|
|
221
|
+
minFirstIndex: 0,
|
|
222
|
+
maxLastIndex: currentPage.rows.length,
|
|
223
|
+
buffer: rootProps.rowBuffer
|
|
224
|
+
});
|
|
225
|
+
apiRef.current.publishEvent('renderedRowsIntervalChange', {
|
|
226
|
+
firstRowToRender,
|
|
227
|
+
lastRowToRender
|
|
228
|
+
});
|
|
218
229
|
prevRenderContext.current = nextRenderContext;
|
|
219
|
-
}, [setRenderContext, prevRenderContext]);
|
|
230
|
+
}, [apiRef, setRenderContext, prevRenderContext, currentPage.rows.length, rootProps.rowBuffer]);
|
|
220
231
|
React.useEffect(() => {
|
|
221
232
|
if (containerWidth == null) {
|
|
222
233
|
return;
|
|
@@ -287,8 +298,8 @@ export const useGridVirtualScroller = props => {
|
|
|
287
298
|
minFirstColumn = renderZoneMinColumnIndex,
|
|
288
299
|
maxLastColumn = renderZoneMaxColumnIndex,
|
|
289
300
|
availableSpace = containerWidth,
|
|
290
|
-
|
|
291
|
-
|
|
301
|
+
rowIndexOffset = 0,
|
|
302
|
+
position = 'center'
|
|
292
303
|
} = params;
|
|
293
304
|
|
|
294
305
|
if (!nextRenderContext || availableSpace == null) {
|
|
@@ -358,7 +369,7 @@ export const useGridVirtualScroller = props => {
|
|
|
358
369
|
model
|
|
359
370
|
} = renderedRows[i];
|
|
360
371
|
const lastVisibleRowIndex = firstRowToRender + i === currentPage.rows.length - 1;
|
|
361
|
-
const baseRowHeight = !apiRef.current.unstable_rowHasAutoHeight(id)
|
|
372
|
+
const baseRowHeight = !apiRef.current.unstable_rowHasAutoHeight(id) ? apiRef.current.unstable_getRowHeight(id) : 'auto';
|
|
362
373
|
let isSelected;
|
|
363
374
|
|
|
364
375
|
if (selectedRowsLookup[id] == null) {
|
|
@@ -384,7 +395,8 @@ export const useGridVirtualScroller = props => {
|
|
|
384
395
|
selected: isSelected,
|
|
385
396
|
index: rowIndexOffset + ((currentPage == null ? void 0 : (_currentPage$range5 = currentPage.range) == null ? void 0 : _currentPage$range5.firstRowIndex) || 0) + firstRowToRender + i,
|
|
386
397
|
containerWidth: availableSpace,
|
|
387
|
-
isLastVisible: lastVisibleRowIndex
|
|
398
|
+
isLastVisible: lastVisibleRowIndex,
|
|
399
|
+
position: position
|
|
388
400
|
}, typeof getRowProps === 'function' ? getRowProps(id, model) : {}, (_rootProps$components = rootProps.componentsProps) == null ? void 0 : _rootProps$components.row), id));
|
|
389
401
|
}
|
|
390
402
|
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { GridApiCommon } from '../../models';
|
|
3
|
-
export declare const useGridNativeEventListener: <Api extends GridApiCommon,
|
|
3
|
+
export declare const useGridNativeEventListener: <Api extends GridApiCommon, K extends keyof HTMLElementEventMap>(apiRef: React.MutableRefObject<Api>, ref: React.MutableRefObject<HTMLDivElement | null> | (() => HTMLElement | undefined | null), eventName: K, handler?: ((event: HTMLElementEventMap[K]) => any) | undefined, options?: AddEventListenerOptions) => void;
|
|
@@ -5,8 +5,8 @@ export const useGridNativeEventListener = (apiRef, ref, eventName, handler, opti
|
|
|
5
5
|
const logger = useGridLogger(apiRef, 'useNativeEventListener');
|
|
6
6
|
const [added, setAdded] = React.useState(false);
|
|
7
7
|
const handlerRef = React.useRef(handler);
|
|
8
|
-
const wrapHandler = React.useCallback(
|
|
9
|
-
return handlerRef.current && handlerRef.current(
|
|
8
|
+
const wrapHandler = React.useCallback(event => {
|
|
9
|
+
return handlerRef.current && handlerRef.current(event);
|
|
10
10
|
}, []);
|
|
11
11
|
React.useEffect(() => {
|
|
12
12
|
handlerRef.current = handler;
|
|
@@ -2,7 +2,7 @@ import * as React from 'react';
|
|
|
2
2
|
import { DataGridProcessedProps } from '../../models/props/DataGridProps';
|
|
3
3
|
import type { GridApiCommon, GridRowEntry } from '../../models';
|
|
4
4
|
export declare const getVisibleRows: <Api extends GridApiCommon>(apiRef: React.MutableRefObject<Api>, props: Pick<DataGridProcessedProps, 'pagination' | 'paginationMode'>) => {
|
|
5
|
-
rows: GridRowEntry<
|
|
5
|
+
rows: GridRowEntry<import("../../models").GridValidRowModel>[];
|
|
6
6
|
range: {
|
|
7
7
|
firstRowIndex: number;
|
|
8
8
|
lastRowIndex: number;
|
|
@@ -16,7 +16,7 @@ export declare const getVisibleRows: <Api extends GridApiCommon>(apiRef: React.M
|
|
|
16
16
|
* - If the row tree is flat, it only contains up to `state.pageSize` rows.
|
|
17
17
|
*/
|
|
18
18
|
export declare const useGridVisibleRows: <Api extends GridApiCommon>(apiRef: React.MutableRefObject<Api>, props: Pick<DataGridProcessedProps, 'pagination' | 'paginationMode'>) => {
|
|
19
|
-
rows: GridRowEntry<
|
|
19
|
+
rows: GridRowEntry<import("../../models").GridValidRowModel>[];
|
|
20
20
|
range: {
|
|
21
21
|
firstRowIndex: number;
|
|
22
22
|
lastRowIndex: number;
|
package/index.js
CHANGED
package/internals/index.d.ts
CHANGED
|
@@ -13,6 +13,8 @@ export { useGridColumnHeaders } from '../hooks/features/columnHeaders/useGridCol
|
|
|
13
13
|
export { useGridColumnMenu, columnMenuStateInitializer, } from '../hooks/features/columnMenu/useGridColumnMenu';
|
|
14
14
|
export { useGridColumns, columnsStateInitializer } from '../hooks/features/columns/useGridColumns';
|
|
15
15
|
export { useGridColumnSpanning } from '../hooks/features/columns/useGridColumnSpanning';
|
|
16
|
+
export { useGridColumnGrouping, columnGroupsStateInitializer, } from '../hooks/features/columnGrouping/useGridColumnGrouping';
|
|
17
|
+
export { useGridColumnGroupingPreProcessors } from '../hooks/features/columnGrouping/useGridColumnGroupingPreProcessors';
|
|
16
18
|
export type { GridColumnRawLookup, GridColumnsRawState, GridHydrateColumnsValue, } from '../hooks/features/columns/gridColumnsInterfaces';
|
|
17
19
|
export { useGridDensity, densityStateInitializer } from '../hooks/features/density/useGridDensity';
|
|
18
20
|
export { useGridCsvExport } from '../hooks/features/export/useGridCsvExport';
|
package/internals/index.js
CHANGED
|
@@ -11,6 +11,8 @@ export { useGridColumnHeaders } from '../hooks/features/columnHeaders/useGridCol
|
|
|
11
11
|
export { useGridColumnMenu, columnMenuStateInitializer } from '../hooks/features/columnMenu/useGridColumnMenu';
|
|
12
12
|
export { useGridColumns, columnsStateInitializer } from '../hooks/features/columns/useGridColumns';
|
|
13
13
|
export { useGridColumnSpanning } from '../hooks/features/columns/useGridColumnSpanning';
|
|
14
|
+
export { useGridColumnGrouping, columnGroupsStateInitializer } from '../hooks/features/columnGrouping/useGridColumnGrouping';
|
|
15
|
+
export { useGridColumnGroupingPreProcessors } from '../hooks/features/columnGrouping/useGridColumnGroupingPreProcessors';
|
|
14
16
|
export { useGridDensity, densityStateInitializer } from '../hooks/features/density/useGridDensity';
|
|
15
17
|
export { useGridCsvExport } from '../hooks/features/export/useGridCsvExport';
|
|
16
18
|
export { useGridPrintExport } from '../hooks/features/export/useGridPrintExport';
|
|
@@ -79,6 +79,7 @@ DataGridRaw.propTypes = {
|
|
|
79
79
|
* @default 3
|
|
80
80
|
*/
|
|
81
81
|
columnBuffer: PropTypes.number,
|
|
82
|
+
columnGroupingModel: PropTypes.arrayOf(PropTypes.object),
|
|
82
83
|
|
|
83
84
|
/**
|
|
84
85
|
* Set of columns of type [[GridColumns]].
|
|
@@ -196,6 +197,7 @@ DataGridRaw.propTypes = {
|
|
|
196
197
|
* For each feature, if the flag is not explicitly set to `true`, the feature will be fully disabled and any property / method call will not have any effect.
|
|
197
198
|
*/
|
|
198
199
|
experimentalFeatures: PropTypes.shape({
|
|
200
|
+
columnGrouping: PropTypes.bool,
|
|
199
201
|
newEditingApi: PropTypes.bool,
|
|
200
202
|
preventCommitWhileValidating: PropTypes.bool,
|
|
201
203
|
warnIfFocusStateIsNotSynced: PropTypes.bool
|
|
@@ -349,7 +351,7 @@ DataGridRaw.propTypes = {
|
|
|
349
351
|
|
|
350
352
|
/**
|
|
351
353
|
* Allows to pass the logging level or false to turn off logging.
|
|
352
|
-
* @default "
|
|
354
|
+
* @default "error" ("warn" in dev mode)
|
|
353
355
|
*/
|
|
354
356
|
logLevel: PropTypes.oneOf(['debug', 'error', 'info', 'warn', false]),
|
|
355
357
|
|