@mui/x-data-grid 7.0.0-beta.7 → 7.1.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 +266 -12
- package/DataGrid/DataGrid.js +18 -17
- package/DataGrid/useDataGridProps.js +4 -5
- package/README.md +1 -1
- package/components/GridFooter.js +2 -3
- package/components/GridHeader.js +1 -2
- package/components/GridPagination.d.ts +6 -5
- package/components/GridPagination.js +12 -4
- package/components/GridRow.js +13 -17
- package/components/base/GridFooterPlaceholder.js +1 -2
- package/components/base/GridOverlays.js +3 -6
- package/components/cell/GridActionsCell.js +4 -6
- package/components/cell/GridActionsCellItem.d.ts +8 -25
- package/components/cell/GridActionsCellItem.js +8 -5
- package/components/cell/GridBooleanCell.d.ts +1 -0
- package/components/cell/GridBooleanCell.js +3 -2
- package/components/cell/GridCell.js +7 -8
- package/components/cell/GridEditBooleanCell.js +1 -2
- package/components/cell/GridEditDateCell.js +2 -3
- package/components/cell/GridEditInputCell.js +2 -2
- package/components/cell/GridEditSingleSelectCell.js +5 -8
- package/components/columnHeaders/ColumnHeaderMenuIcon.js +2 -3
- package/components/columnHeaders/GridColumnGroupHeader.js +4 -5
- package/components/columnHeaders/GridColumnHeaderFilterIconButton.js +2 -3
- package/components/columnHeaders/GridColumnHeaderItem.js +8 -7
- package/components/columnHeaders/GridColumnHeaderSortIcon.js +1 -2
- package/components/columnHeaders/GridColumnHeaderTitle.js +2 -3
- package/components/columnHeaders/GridGenericColumnHeaderItem.js +4 -2
- package/components/columnSelection/GridCellCheckboxRenderer.js +3 -5
- package/components/columnSelection/GridHeaderCheckbox.js +1 -2
- package/components/columnsManagement/GridColumnsManagement.js +17 -21
- package/components/containers/GridRoot.js +3 -3
- package/components/menu/GridMenu.js +4 -6
- package/components/menu/columnMenu/GridColumnHeaderMenu.js +1 -1
- package/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +2 -3
- package/components/panel/GridColumnsPanel.js +1 -2
- package/components/panel/GridPanel.d.ts +1 -10
- package/components/panel/GridPanel.js +1 -2
- package/components/panel/GridPreferencesPanel.js +2 -3
- package/components/panel/filterPanel/GridFilterForm.js +24 -27
- package/components/panel/filterPanel/GridFilterInputBoolean.d.ts +1 -1
- package/components/panel/filterPanel/GridFilterInputBoolean.js +6 -7
- package/components/panel/filterPanel/GridFilterInputDate.d.ts +1 -1
- package/components/panel/filterPanel/GridFilterInputDate.js +3 -4
- package/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +11 -15
- package/components/panel/filterPanel/GridFilterInputMultipleValue.js +10 -14
- package/components/panel/filterPanel/GridFilterInputSingleSelect.d.ts +1 -1
- package/components/panel/filterPanel/GridFilterInputSingleSelect.js +10 -11
- package/components/panel/filterPanel/GridFilterInputValue.d.ts +1 -1
- package/components/panel/filterPanel/GridFilterInputValue.js +5 -7
- package/components/panel/filterPanel/GridFilterPanel.js +5 -9
- package/components/panel/filterPanel/filterPanelUtils.js +1 -1
- package/components/toolbar/GridToolbarColumnsButton.js +3 -5
- package/components/toolbar/GridToolbarDensitySelector.js +8 -10
- package/components/toolbar/GridToolbarExport.js +2 -2
- package/components/toolbar/GridToolbarExportContainer.js +3 -5
- package/components/toolbar/GridToolbarFilterButton.js +3 -5
- package/components/toolbar/GridToolbarQuickFilter.js +21 -7
- package/components/virtualization/GridVirtualScrollerContent.js +1 -2
- package/components/virtualization/GridVirtualScrollerRenderZone.js +1 -2
- package/hooks/core/strategyProcessing/useGridStrategyProcessing.js +1 -2
- package/hooks/core/useGridApiInitialization.js +4 -6
- package/hooks/features/clipboard/useGridClipboard.js +6 -5
- package/hooks/features/columnGrouping/gridColumnGroupsSelector.js +4 -16
- package/hooks/features/columnGrouping/gridColumnGroupsUtils.js +4 -8
- package/hooks/features/columnGrouping/useGridColumnGrouping.js +12 -23
- package/hooks/features/columnHeaders/useGridColumnHeaders.js +6 -8
- package/hooks/features/columnMenu/useGridColumnMenuSlots.js +2 -2
- package/hooks/features/columnResize/useGridColumnResize.js +9 -19
- package/hooks/features/columns/gridColumnsSelector.js +1 -2
- package/hooks/features/columns/gridColumnsUtils.d.ts +0 -9
- package/hooks/features/columns/gridColumnsUtils.js +2 -22
- package/hooks/features/columns/useGridColumnSpanning.js +1 -2
- package/hooks/features/columns/useGridColumns.js +11 -19
- package/hooks/features/density/densitySelector.d.ts +4 -2
- package/hooks/features/density/densitySelector.js +8 -2
- package/hooks/features/density/densityState.d.ts +1 -4
- package/hooks/features/density/useGridDensity.d.ts +2 -4
- package/hooks/features/density/useGridDensity.js +21 -29
- package/hooks/features/dimensions/useGridDimensions.d.ts +1 -1
- package/hooks/features/dimensions/useGridDimensions.js +6 -7
- package/hooks/features/editing/useGridCellEditing.js +4 -6
- package/hooks/features/editing/useGridEditing.js +1 -2
- package/hooks/features/editing/useGridRowEditing.js +17 -10
- package/hooks/features/export/serializers/csvSerializer.d.ts +2 -0
- package/hooks/features/export/serializers/csvSerializer.js +25 -16
- package/hooks/features/export/useGridCsvExport.js +9 -10
- package/hooks/features/export/useGridPrintExport.js +9 -15
- package/hooks/features/export/utils.js +2 -3
- package/hooks/features/filter/gridFilterSelector.js +15 -22
- package/hooks/features/filter/gridFilterUtils.js +10 -16
- package/hooks/features/filter/useGridFilter.js +9 -15
- package/hooks/features/focus/useGridFocus.js +5 -6
- package/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +1 -4
- package/hooks/features/headerFiltering/useGridHeaderFiltering.js +12 -17
- package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +1 -2
- package/hooks/features/pagination/gridPaginationSelector.js +1 -2
- package/hooks/features/pagination/useGridPagination.js +2 -3
- package/hooks/features/pagination/useGridPaginationModel.js +6 -11
- package/hooks/features/pagination/useGridRowCount.js +3 -6
- package/hooks/features/preferencesPanel/useGridPreferencesPanel.js +7 -12
- package/hooks/features/rowSelection/useGridRowSelection.js +11 -16
- package/hooks/features/rows/gridRowsSelector.js +11 -19
- package/hooks/features/rows/gridRowsUtils.js +7 -9
- package/hooks/features/rows/useGridParamsApi.js +1 -1
- package/hooks/features/rows/useGridRows.js +4 -13
- package/hooks/features/rows/useGridRowsMeta.js +7 -13
- package/hooks/features/scroll/useGridScroll.js +2 -3
- package/hooks/features/sorting/gridSortingSelector.js +4 -7
- package/hooks/features/sorting/useGridSorting.js +8 -14
- package/hooks/features/virtualization/useGridVirtualScroller.d.ts +1 -1
- package/hooks/features/virtualization/useGridVirtualScroller.js +220 -71
- package/hooks/utils/useGridApiEventHandler.js +5 -10
- package/hooks/utils/useGridNativeEventListener.js +1 -2
- package/index.js +1 -1
- package/internals/index.d.ts +2 -0
- package/internals/index.js +1 -0
- package/internals/utils/useProps.js +1 -2
- package/joy/joySlots.js +7 -13
- package/models/api/gridRowsMetaApi.d.ts +1 -1
- package/models/api/index.d.ts +1 -1
- package/models/api/index.js +0 -1
- package/models/events/gridEventLookup.d.ts +7 -0
- package/models/gridExport.d.ts +6 -0
- package/models/gridStateCommunity.d.ts +1 -0
- package/models/props/DataGridProps.d.ts +26 -25
- package/modern/DataGrid/DataGrid.js +18 -17
- package/modern/DataGrid/useDataGridProps.js +4 -5
- package/modern/components/GridPagination.js +11 -2
- package/modern/components/cell/GridActionsCell.js +1 -1
- package/modern/components/cell/GridActionsCellItem.js +4 -0
- package/modern/components/cell/GridBooleanCell.js +3 -2
- package/modern/components/columnHeaders/GridColumnHeaderItem.js +3 -1
- package/modern/components/columnHeaders/GridGenericColumnHeaderItem.js +3 -1
- package/modern/components/containers/GridRoot.js +3 -3
- package/modern/components/panel/filterPanel/GridFilterInputBoolean.js +1 -1
- package/modern/components/panel/filterPanel/GridFilterInputDate.js +1 -1
- package/modern/components/panel/filterPanel/GridFilterInputSingleSelect.js +1 -1
- package/modern/components/panel/filterPanel/GridFilterInputValue.js +1 -1
- package/modern/components/toolbar/GridToolbarDensitySelector.js +5 -5
- package/modern/components/toolbar/GridToolbarQuickFilter.js +17 -2
- package/modern/hooks/features/clipboard/useGridClipboard.js +4 -2
- package/modern/hooks/features/columnResize/useGridColumnResize.js +1 -1
- package/modern/hooks/features/columns/gridColumnsUtils.js +0 -19
- package/modern/hooks/features/density/densitySelector.js +8 -2
- package/modern/hooks/features/density/useGridDensity.js +21 -29
- package/modern/hooks/features/dimensions/useGridDimensions.js +3 -2
- package/modern/hooks/features/editing/useGridCellEditing.js +1 -1
- package/modern/hooks/features/editing/useGridRowEditing.js +14 -5
- package/modern/hooks/features/export/serializers/csvSerializer.js +23 -12
- package/modern/hooks/features/export/useGridCsvExport.js +2 -1
- package/modern/hooks/features/filter/gridFilterUtils.js +1 -1
- package/modern/hooks/features/rowSelection/useGridRowSelection.js +3 -2
- package/modern/hooks/features/virtualization/useGridVirtualScroller.js +211 -57
- package/modern/index.js +1 -1
- package/modern/internals/index.js +1 -0
- package/modern/models/api/index.js +0 -1
- package/modern/utils/createSelector.js +1 -1
- package/modern/utils/domUtils.js +1 -1
- package/modern/utils/keyboardUtils.js +1 -1
- package/modern/utils/throttle.js +19 -0
- package/node/DataGrid/DataGrid.js +18 -17
- package/node/DataGrid/useDataGridProps.js +4 -5
- package/node/components/GridPagination.js +9 -1
- package/node/components/cell/GridActionsCell.js +1 -1
- package/node/components/cell/GridActionsCellItem.js +4 -0
- package/node/components/cell/GridBooleanCell.js +3 -2
- package/node/components/columnHeaders/GridColumnHeaderItem.js +3 -1
- package/node/components/columnHeaders/GridGenericColumnHeaderItem.js +3 -1
- package/node/components/containers/GridRoot.js +2 -2
- package/node/components/panel/filterPanel/GridFilterInputBoolean.js +1 -1
- package/node/components/panel/filterPanel/GridFilterInputDate.js +1 -1
- package/node/components/panel/filterPanel/GridFilterInputSingleSelect.js +1 -1
- package/node/components/panel/filterPanel/GridFilterInputValue.js +1 -1
- package/node/components/toolbar/GridToolbarDensitySelector.js +4 -4
- package/node/components/toolbar/GridToolbarQuickFilter.js +17 -2
- package/node/hooks/features/clipboard/useGridClipboard.js +4 -2
- package/node/hooks/features/columnResize/useGridColumnResize.js +1 -1
- package/node/hooks/features/columns/gridColumnsUtils.js +0 -20
- package/node/hooks/features/density/densitySelector.js +9 -3
- package/node/hooks/features/density/useGridDensity.js +22 -30
- package/node/hooks/features/dimensions/useGridDimensions.js +2 -1
- package/node/hooks/features/editing/useGridCellEditing.js +1 -1
- package/node/hooks/features/editing/useGridRowEditing.js +14 -5
- package/node/hooks/features/export/serializers/csvSerializer.js +23 -12
- package/node/hooks/features/export/useGridCsvExport.js +2 -1
- package/node/hooks/features/filter/gridFilterUtils.js +1 -1
- package/node/hooks/features/rowSelection/useGridRowSelection.js +2 -1
- package/node/hooks/features/virtualization/useGridVirtualScroller.js +211 -57
- package/node/index.js +1 -1
- package/node/internals/index.js +12 -0
- package/node/models/api/index.js +0 -11
- package/node/utils/createSelector.js +1 -1
- package/node/utils/domUtils.js +1 -1
- package/node/utils/keyboardUtils.js +1 -1
- package/node/utils/throttle.js +25 -0
- package/package.json +4 -4
- package/utils/createSelector.js +9 -9
- package/utils/domUtils.js +4 -7
- package/utils/getGridLocalization.js +9 -12
- package/utils/keyboardUtils.js +1 -1
- package/utils/throttle.d.ts +4 -0
- package/utils/throttle.js +19 -0
|
@@ -12,8 +12,7 @@ export function unwrapPrivateAPI(publicApi) {
|
|
|
12
12
|
}
|
|
13
13
|
let globalId = 0;
|
|
14
14
|
function createPrivateAPI(publicApiRef) {
|
|
15
|
-
|
|
16
|
-
const existingPrivateApi = (_publicApiRef$current = publicApiRef.current) == null ? void 0 : _publicApiRef$current[SYMBOL_API_PRIVATE];
|
|
15
|
+
const existingPrivateApi = publicApiRef.current?.[SYMBOL_API_PRIVATE];
|
|
17
16
|
if (existingPrivateApi) {
|
|
18
17
|
return existingPrivateApi;
|
|
19
18
|
}
|
|
@@ -31,7 +30,7 @@ function createPrivateAPI(publicApiRef) {
|
|
|
31
30
|
Object.keys(methods).forEach(methodName => {
|
|
32
31
|
const method = methods[methodName];
|
|
33
32
|
const currentPrivateMethod = privateApi[methodName];
|
|
34
|
-
if (
|
|
33
|
+
if (currentPrivateMethod?.spying === true) {
|
|
35
34
|
currentPrivateMethod.target = method;
|
|
36
35
|
} else {
|
|
37
36
|
privateApi[methodName] = method;
|
|
@@ -39,7 +38,7 @@ function createPrivateAPI(publicApiRef) {
|
|
|
39
38
|
if (visibility === 'public') {
|
|
40
39
|
const publicApi = publicApiRef.current;
|
|
41
40
|
const currentPublicMethod = publicApi[methodName];
|
|
42
|
-
if (
|
|
41
|
+
if (currentPublicMethod?.spying === true) {
|
|
43
42
|
currentPublicMethod.target = method;
|
|
44
43
|
} else {
|
|
45
44
|
publicApi[methodName] = method;
|
|
@@ -69,7 +68,6 @@ function createPublicAPI(privateApiRef) {
|
|
|
69
68
|
return publicApi;
|
|
70
69
|
}
|
|
71
70
|
export function useGridApiInitialization(inputApiRef, props) {
|
|
72
|
-
var _inputApiRef$current;
|
|
73
71
|
const publicApiRef = React.useRef();
|
|
74
72
|
const privateApiRef = React.useRef();
|
|
75
73
|
if (!privateApiRef.current) {
|
|
@@ -100,7 +98,7 @@ export function useGridApiInitialization(inputApiRef, props) {
|
|
|
100
98
|
subscribeEvent,
|
|
101
99
|
publishEvent
|
|
102
100
|
}, 'public');
|
|
103
|
-
if (inputApiRef && !
|
|
101
|
+
if (inputApiRef && !inputApiRef.current?.state) {
|
|
104
102
|
inputApiRef.current = publicApiRef.current;
|
|
105
103
|
}
|
|
106
104
|
React.useImperativeHandle(inputApiRef, () => publicApiRef.current, [publicApiRef]);
|
|
@@ -30,9 +30,8 @@ function copyToClipboard(data) {
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
function hasNativeSelection(element) {
|
|
33
|
-
var _window$getSelection;
|
|
34
33
|
// When getSelection is called on an <iframe> that is not displayed Firefox will return null.
|
|
35
|
-
if (
|
|
34
|
+
if (window.getSelection()?.toString()) {
|
|
36
35
|
return true;
|
|
37
36
|
}
|
|
38
37
|
|
|
@@ -51,7 +50,7 @@ function hasNativeSelection(element) {
|
|
|
51
50
|
*/
|
|
52
51
|
export const useGridClipboard = (apiRef, props) => {
|
|
53
52
|
const ignoreValueFormatterProp = props.ignoreValueFormatterDuringExport;
|
|
54
|
-
const ignoreValueFormatter = (typeof ignoreValueFormatterProp === 'object' ? ignoreValueFormatterProp
|
|
53
|
+
const ignoreValueFormatter = (typeof ignoreValueFormatterProp === 'object' ? ignoreValueFormatterProp?.clipboardExport : ignoreValueFormatterProp) || false;
|
|
55
54
|
const clipboardCopyCellDelimiter = props.clipboardCopyCellDelimiter;
|
|
56
55
|
const handleCopy = React.useCallback(event => {
|
|
57
56
|
if (!((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'c' && !event.shiftKey && !event.altKey)) {
|
|
@@ -68,7 +67,8 @@ export const useGridClipboard = (apiRef, props) => {
|
|
|
68
67
|
textToCopy = apiRef.current.getDataAsCsv({
|
|
69
68
|
includeHeaders: false,
|
|
70
69
|
// TODO: make it configurable
|
|
71
|
-
delimiter: clipboardCopyCellDelimiter
|
|
70
|
+
delimiter: clipboardCopyCellDelimiter,
|
|
71
|
+
shouldAppendQuotes: false
|
|
72
72
|
});
|
|
73
73
|
} else {
|
|
74
74
|
const focusedCell = gridFocusCellSelector(apiRef);
|
|
@@ -76,7 +76,8 @@ export const useGridClipboard = (apiRef, props) => {
|
|
|
76
76
|
const cellParams = apiRef.current.getCellParams(focusedCell.id, focusedCell.field);
|
|
77
77
|
textToCopy = serializeCellValue(cellParams, {
|
|
78
78
|
delimiterCharacter: clipboardCopyCellDelimiter,
|
|
79
|
-
ignoreValueFormatter
|
|
79
|
+
ignoreValueFormatter,
|
|
80
|
+
shouldAppendQuotes: false
|
|
80
81
|
});
|
|
81
82
|
}
|
|
82
83
|
}
|
|
@@ -4,19 +4,7 @@ import { createSelector, createSelectorMemoized } from '../../../utils/createSel
|
|
|
4
4
|
* @ignore - do not document.
|
|
5
5
|
*/
|
|
6
6
|
export const gridColumnGroupingSelector = state => state.columnGrouping;
|
|
7
|
-
export const gridColumnGroupsUnwrappedModelSelector = createSelectorMemoized(gridColumnGroupingSelector, columnGrouping => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
export const gridColumnGroupsLookupSelector = createSelectorMemoized(gridColumnGroupingSelector, columnGrouping => {
|
|
12
|
-
var _columnGrouping$looku;
|
|
13
|
-
return (_columnGrouping$looku = columnGrouping == null ? void 0 : columnGrouping.lookup) != null ? _columnGrouping$looku : {};
|
|
14
|
-
});
|
|
15
|
-
export const gridColumnGroupsHeaderStructureSelector = createSelectorMemoized(gridColumnGroupingSelector, columnGrouping => {
|
|
16
|
-
var _columnGrouping$heade;
|
|
17
|
-
return (_columnGrouping$heade = columnGrouping == null ? void 0 : columnGrouping.headerStructure) != null ? _columnGrouping$heade : [];
|
|
18
|
-
});
|
|
19
|
-
export const gridColumnGroupsHeaderMaxDepthSelector = createSelector(gridColumnGroupingSelector, columnGrouping => {
|
|
20
|
-
var _columnGrouping$maxDe;
|
|
21
|
-
return (_columnGrouping$maxDe = columnGrouping == null ? void 0 : columnGrouping.maxDepth) != null ? _columnGrouping$maxDe : 0;
|
|
22
|
-
});
|
|
7
|
+
export const gridColumnGroupsUnwrappedModelSelector = createSelectorMemoized(gridColumnGroupingSelector, columnGrouping => columnGrouping?.unwrappedGroupingModel ?? {});
|
|
8
|
+
export const gridColumnGroupsLookupSelector = createSelectorMemoized(gridColumnGroupingSelector, columnGrouping => columnGrouping?.lookup ?? {});
|
|
9
|
+
export const gridColumnGroupsHeaderStructureSelector = createSelectorMemoized(gridColumnGroupingSelector, columnGrouping => columnGrouping?.headerStructure ?? []);
|
|
10
|
+
export const gridColumnGroupsHeaderMaxDepthSelector = createSelector(gridColumnGroupingSelector, columnGrouping => columnGrouping?.maxDepth ?? 0);
|
|
@@ -35,26 +35,22 @@ export const unwrapGroupingColumnModel = columnGroupingModel => {
|
|
|
35
35
|
return unwrappedSubTree;
|
|
36
36
|
};
|
|
37
37
|
export const getColumnGroupsHeaderStructure = (orderedColumns, unwrappedGroupingModel, pinnedFields) => {
|
|
38
|
-
const getParents = field =>
|
|
39
|
-
var _unwrappedGroupingMod;
|
|
40
|
-
return (_unwrappedGroupingMod = unwrappedGroupingModel[field]) != null ? _unwrappedGroupingMod : [];
|
|
41
|
-
};
|
|
38
|
+
const getParents = field => unwrappedGroupingModel[field] ?? [];
|
|
42
39
|
const groupingHeaderStructure = [];
|
|
43
40
|
const maxDepth = Math.max(...orderedColumns.map(field => getParents(field).length));
|
|
44
41
|
const haveSameParents = (field1, field2, depth) => isDeepEqual(getParents(field1).slice(0, depth + 1), getParents(field2).slice(0, depth + 1));
|
|
45
42
|
const haveDifferentContainers = (field1, field2) => {
|
|
46
|
-
if (pinnedFields
|
|
43
|
+
if (pinnedFields?.left && pinnedFields.left.includes(field1) && !pinnedFields.left.includes(field2)) {
|
|
47
44
|
return true;
|
|
48
45
|
}
|
|
49
|
-
if (pinnedFields
|
|
46
|
+
if (pinnedFields?.right && !pinnedFields.right.includes(field1) && pinnedFields.right.includes(field2)) {
|
|
50
47
|
return true;
|
|
51
48
|
}
|
|
52
49
|
return false;
|
|
53
50
|
};
|
|
54
51
|
for (let depth = 0; depth < maxDepth; depth += 1) {
|
|
55
52
|
const depthStructure = orderedColumns.reduce((structure, newField) => {
|
|
56
|
-
|
|
57
|
-
const groupId = (_getParents$depth = getParents(newField)[depth]) != null ? _getParents$depth : null;
|
|
53
|
+
const groupId = getParents(newField)[depth] ?? null;
|
|
58
54
|
if (structure.length === 0) {
|
|
59
55
|
return [{
|
|
60
56
|
columnFields: [newField],
|
|
@@ -41,19 +41,15 @@ const createGroupLookup = columnGroupingModel => {
|
|
|
41
41
|
return _extends({}, groupLookup);
|
|
42
42
|
};
|
|
43
43
|
export const columnGroupsStateInitializer = (state, props, apiRef) => {
|
|
44
|
-
var _props$columnGrouping, _props$columnGrouping2, _apiRef$current$state;
|
|
45
44
|
if (!props.columnGroupingModel) {
|
|
46
45
|
return state;
|
|
47
46
|
}
|
|
48
47
|
const columnFields = gridColumnFieldsSelector(apiRef);
|
|
49
48
|
const visibleColumnFields = gridVisibleColumnFieldsSelector(apiRef);
|
|
50
|
-
const groupLookup = createGroupLookup(
|
|
51
|
-
const unwrappedGroupingModel = unwrapGroupingColumnModel(
|
|
52
|
-
const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(columnFields, unwrappedGroupingModel,
|
|
53
|
-
const maxDepth = visibleColumnFields.length === 0 ? 0 : Math.max(...visibleColumnFields.map(field =>
|
|
54
|
-
var _unwrappedGroupingMod, _unwrappedGroupingMod2;
|
|
55
|
-
return (_unwrappedGroupingMod = (_unwrappedGroupingMod2 = unwrappedGroupingModel[field]) == null ? void 0 : _unwrappedGroupingMod2.length) != null ? _unwrappedGroupingMod : 0;
|
|
56
|
-
}));
|
|
49
|
+
const groupLookup = createGroupLookup(props.columnGroupingModel ?? []);
|
|
50
|
+
const unwrappedGroupingModel = unwrapGroupingColumnModel(props.columnGroupingModel ?? []);
|
|
51
|
+
const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(columnFields, unwrappedGroupingModel, apiRef.current.state.pinnedColumns ?? {});
|
|
52
|
+
const maxDepth = visibleColumnFields.length === 0 ? 0 : Math.max(...visibleColumnFields.map(field => unwrappedGroupingModel[field]?.length ?? 0));
|
|
57
53
|
return _extends({}, state, {
|
|
58
54
|
columnGrouping: {
|
|
59
55
|
lookup: groupLookup,
|
|
@@ -73,9 +69,8 @@ export const useGridColumnGrouping = (apiRef, props) => {
|
|
|
73
69
|
* API METHODS
|
|
74
70
|
*/
|
|
75
71
|
const getColumnGroupPath = React.useCallback(field => {
|
|
76
|
-
var _unwrappedGroupingMod3;
|
|
77
72
|
const unwrappedGroupingModel = gridColumnGroupsUnwrappedModelSelector(apiRef);
|
|
78
|
-
return
|
|
73
|
+
return unwrappedGroupingModel[field] ?? [];
|
|
79
74
|
}, [apiRef]);
|
|
80
75
|
const getAllGroupDetails = React.useCallback(() => {
|
|
81
76
|
const columnGroupLookup = gridColumnGroupsLookupSelector(apiRef);
|
|
@@ -87,12 +82,10 @@ export const useGridColumnGrouping = (apiRef, props) => {
|
|
|
87
82
|
};
|
|
88
83
|
useGridApiMethod(apiRef, columnGroupingApi, 'public');
|
|
89
84
|
const handleColumnIndexChange = React.useCallback(() => {
|
|
90
|
-
|
|
91
|
-
const unwrappedGroupingModel = unwrapGroupingColumnModel((_props$columnGrouping3 = props.columnGroupingModel) != null ? _props$columnGrouping3 : []);
|
|
85
|
+
const unwrappedGroupingModel = unwrapGroupingColumnModel(props.columnGroupingModel ?? []);
|
|
92
86
|
apiRef.current.setState(state => {
|
|
93
|
-
|
|
94
|
-
const
|
|
95
|
-
const pinnedColumns = (_state$pinnedColumns = state.pinnedColumns) != null ? _state$pinnedColumns : {};
|
|
87
|
+
const orderedFields = state.columns?.orderedFields ?? [];
|
|
88
|
+
const pinnedColumns = state.pinnedColumns ?? {};
|
|
96
89
|
const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(orderedFields, unwrappedGroupingModel, pinnedColumns);
|
|
97
90
|
return _extends({}, state, {
|
|
98
91
|
columnGrouping: _extends({}, state.columnGrouping, {
|
|
@@ -102,18 +95,14 @@ export const useGridColumnGrouping = (apiRef, props) => {
|
|
|
102
95
|
});
|
|
103
96
|
}, [apiRef, props.columnGroupingModel]);
|
|
104
97
|
const updateColumnGroupingState = React.useCallback(columnGroupingModel => {
|
|
105
|
-
var _apiRef$current$getPi, _apiRef$current$getPi2, _apiRef$current;
|
|
106
98
|
// @ts-expect-error Move this logic to `Pro` package
|
|
107
|
-
const pinnedColumns =
|
|
99
|
+
const pinnedColumns = apiRef.current.getPinnedColumns?.() ?? {};
|
|
108
100
|
const columnFields = gridColumnFieldsSelector(apiRef);
|
|
109
101
|
const visibleColumnFields = gridVisibleColumnFieldsSelector(apiRef);
|
|
110
|
-
const groupLookup = createGroupLookup(columnGroupingModel
|
|
111
|
-
const unwrappedGroupingModel = unwrapGroupingColumnModel(columnGroupingModel
|
|
102
|
+
const groupLookup = createGroupLookup(columnGroupingModel ?? []);
|
|
103
|
+
const unwrappedGroupingModel = unwrapGroupingColumnModel(columnGroupingModel ?? []);
|
|
112
104
|
const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(columnFields, unwrappedGroupingModel, pinnedColumns);
|
|
113
|
-
const maxDepth = visibleColumnFields.length === 0 ? 0 : Math.max(...visibleColumnFields.map(field =>
|
|
114
|
-
var _unwrappedGroupingMod4, _unwrappedGroupingMod5;
|
|
115
|
-
return (_unwrappedGroupingMod4 = (_unwrappedGroupingMod5 = unwrappedGroupingModel[field]) == null ? void 0 : _unwrappedGroupingMod5.length) != null ? _unwrappedGroupingMod4 : 0;
|
|
116
|
-
}));
|
|
105
|
+
const maxDepth = visibleColumnFields.length === 0 ? 0 : Math.max(...visibleColumnFields.map(field => unwrappedGroupingModel[field]?.length ?? 0));
|
|
117
106
|
apiRef.current.setState(state => {
|
|
118
107
|
return _extends({}, state, {
|
|
119
108
|
columnGrouping: {
|
|
@@ -92,8 +92,8 @@ export const useGridColumnHeaders = props => {
|
|
|
92
92
|
};
|
|
93
93
|
};
|
|
94
94
|
const getFillers = (params, children, leftOverflow, borderTop = false) => {
|
|
95
|
-
const isPinnedRight =
|
|
96
|
-
const isNotPinned =
|
|
95
|
+
const isPinnedRight = params?.position === GridPinnedColumnPosition.RIGHT;
|
|
96
|
+
const isNotPinned = params?.position === undefined;
|
|
97
97
|
const hasScrollbarFiller = pinnedColumns.right.length > 0 && isPinnedRight || pinnedColumns.right.length === 0 && isNotPinned;
|
|
98
98
|
const leftOffsetWidth = offsetLeft - leftOverflow;
|
|
99
99
|
return /*#__PURE__*/_jsxs(React.Fragment, {
|
|
@@ -146,7 +146,7 @@ export const useGridColumnHeaders = props => {
|
|
|
146
146
|
const tabIndex = columnHeaderTabIndexState !== null && columnHeaderTabIndexState.field === colDef.field || isFirstColumn && !hasOtherElementInTabSequence ? 0 : -1;
|
|
147
147
|
const hasFocus = columnHeaderFocus !== null && columnHeaderFocus.field === colDef.field;
|
|
148
148
|
const open = columnMenuState.open && columnMenuState.field === colDef.field;
|
|
149
|
-
const pinnedPosition = params
|
|
149
|
+
const pinnedPosition = params?.position;
|
|
150
150
|
const style = getCellOffsetStyle({
|
|
151
151
|
pinnedPosition,
|
|
152
152
|
columnIndex,
|
|
@@ -201,7 +201,6 @@ export const useGridColumnHeaders = props => {
|
|
|
201
201
|
depth,
|
|
202
202
|
params
|
|
203
203
|
}) => {
|
|
204
|
-
var _apiRef$current$getCo, _apiRef$current$getCo2;
|
|
205
204
|
const columnsToRender = getColumnsToRender(params);
|
|
206
205
|
if (columnsToRender.renderedColumns.length === 0) {
|
|
207
206
|
return null;
|
|
@@ -213,13 +212,13 @@ export const useGridColumnHeaders = props => {
|
|
|
213
212
|
} = columnsToRender;
|
|
214
213
|
const rowStructure = columnGroupsHeaderStructure[depth];
|
|
215
214
|
const firstColumnFieldToRender = visibleColumns[firstColumnToRender].field;
|
|
216
|
-
const firstGroupToRender =
|
|
215
|
+
const firstGroupToRender = apiRef.current.getColumnGroupPath(firstColumnFieldToRender)[depth] ?? null;
|
|
217
216
|
const firstGroupIndex = rowStructure.findIndex(({
|
|
218
217
|
groupId,
|
|
219
218
|
columnFields
|
|
220
219
|
}) => groupId === firstGroupToRender && columnFields.includes(firstColumnFieldToRender));
|
|
221
220
|
const lastColumnFieldToRender = visibleColumns[lastColumnToRender - 1].field;
|
|
222
|
-
const lastGroupToRender =
|
|
221
|
+
const lastGroupToRender = apiRef.current.getColumnGroupPath(lastColumnFieldToRender)[depth] ?? null;
|
|
223
222
|
const lastGroupIndex = rowStructure.findIndex(({
|
|
224
223
|
groupId,
|
|
225
224
|
columnFields
|
|
@@ -232,9 +231,8 @@ export const useGridColumnHeaders = props => {
|
|
|
232
231
|
const firstVisibleColumnIndex = visibleColumnGroupHeader[0].columnFields.indexOf(firstColumnFieldToRender);
|
|
233
232
|
const hiddenGroupColumns = visibleColumnGroupHeader[0].columnFields.slice(0, firstVisibleColumnIndex);
|
|
234
233
|
const leftOverflow = hiddenGroupColumns.reduce((acc, field) => {
|
|
235
|
-
var _column$computedWidth;
|
|
236
234
|
const column = apiRef.current.getColumn(field);
|
|
237
|
-
return acc + (
|
|
235
|
+
return acc + (column.computedWidth ?? 0);
|
|
238
236
|
}, 0);
|
|
239
237
|
let columnIndex = firstColumnToRender;
|
|
240
238
|
const children = visibleColumnGroupHeader.map(({
|
|
@@ -37,8 +37,8 @@ const useGridColumnMenuSlots = props => {
|
|
|
37
37
|
const sorted = cleansedItems.sort((a, b) => {
|
|
38
38
|
const leftItemProps = processedSlotProps[a];
|
|
39
39
|
const rightItemProps = processedSlotProps[b];
|
|
40
|
-
const leftDisplayOrder = Number.isFinite(leftItemProps
|
|
41
|
-
const rightDisplayOrder = Number.isFinite(rightItemProps
|
|
40
|
+
const leftDisplayOrder = Number.isFinite(leftItemProps?.displayOrder) ? leftItemProps.displayOrder : 100;
|
|
41
|
+
const rightDisplayOrder = Number.isFinite(rightItemProps?.displayOrder) ? rightItemProps.displayOrder : 100;
|
|
42
42
|
return leftDisplayOrder - rightDisplayOrder;
|
|
43
43
|
});
|
|
44
44
|
return sorted.reduce((acc, key, index) => {
|
|
@@ -126,7 +126,7 @@ function excludeOutliers(inputValues, factor) {
|
|
|
126
126
|
const iqr = q3 - q1;
|
|
127
127
|
|
|
128
128
|
// We make a small adjustment if `iqr < 5` for the cases where the IQR is
|
|
129
|
-
// very small (
|
|
129
|
+
// very small (for example zero) due to very close by values in the input data.
|
|
130
130
|
// Otherwise, with an IQR of `0`, anything outside that would be considered
|
|
131
131
|
// an outlier, but it makes more sense visually to allow for this 5px variance
|
|
132
132
|
// rather than showing a cropped cell.
|
|
@@ -140,23 +140,21 @@ function extractColumnWidths(apiRef, options, columns) {
|
|
|
140
140
|
columns.forEach(column => {
|
|
141
141
|
const cells = findGridCells(apiRef.current, column.field);
|
|
142
142
|
const widths = cells.map(cell => {
|
|
143
|
-
|
|
144
|
-
return (_cell$getBoundingClie = cell.getBoundingClientRect().width) != null ? _cell$getBoundingClie : 0;
|
|
143
|
+
return cell.getBoundingClientRect().width ?? 0;
|
|
145
144
|
});
|
|
146
145
|
const filteredWidths = options.includeOutliers ? widths : excludeOutliers(widths, options.outliersFactor);
|
|
147
146
|
if (options.includeHeaders) {
|
|
148
147
|
const header = findGridHeader(apiRef.current, column.field);
|
|
149
148
|
if (header) {
|
|
150
|
-
var _iconContainer$client, _menuContainer$client;
|
|
151
149
|
const title = header.querySelector(`.${gridClasses.columnHeaderTitle}`);
|
|
152
150
|
const content = header.querySelector(`.${gridClasses.columnHeaderTitleContainerContent}`);
|
|
153
151
|
const iconContainer = header.querySelector(`.${gridClasses.iconButtonContainer}`);
|
|
154
152
|
const menuContainer = header.querySelector(`.${gridClasses.menuIcon}`);
|
|
155
|
-
const element = title
|
|
153
|
+
const element = title ?? content;
|
|
156
154
|
const style = window.getComputedStyle(header, null);
|
|
157
155
|
const paddingWidth = parseInt(style.paddingLeft, 10) + parseInt(style.paddingRight, 10);
|
|
158
156
|
const contentWidth = element.scrollWidth + 1;
|
|
159
|
-
const width = contentWidth + paddingWidth + (
|
|
157
|
+
const width = contentWidth + paddingWidth + (iconContainer?.clientWidth ?? 0) + (menuContainer?.clientWidth ?? 0);
|
|
160
158
|
filteredWidths.push(width);
|
|
161
159
|
}
|
|
162
160
|
}
|
|
@@ -290,7 +288,6 @@ export const useGridColumnResize = (apiRef, props) => {
|
|
|
290
288
|
});
|
|
291
289
|
};
|
|
292
290
|
const storeReferences = (colDef, separator, xStart) => {
|
|
293
|
-
var _apiRef$current$colum;
|
|
294
291
|
const root = apiRef.current.rootElementRef.current;
|
|
295
292
|
colDefRef.current = colDef;
|
|
296
293
|
columnHeaderElementRef.current = findHeaderElementFromField(apiRef.current.columnHeadersContainerRef.current, colDef.field);
|
|
@@ -298,7 +295,7 @@ export const useGridColumnResize = (apiRef, props) => {
|
|
|
298
295
|
if (headerFilterElement) {
|
|
299
296
|
headerFilterElementRef.current = headerFilterElement;
|
|
300
297
|
}
|
|
301
|
-
groupHeaderElementsRef.current = findGroupHeaderElementsFromField(
|
|
298
|
+
groupHeaderElementsRef.current = findGroupHeaderElementsFromField(apiRef.current.columnHeadersContainerRef?.current, colDef.field);
|
|
302
299
|
cellElementsRef.current = findGridCellElementsFromCol(columnHeaderElementRef.current, apiRef.current);
|
|
303
300
|
fillerLeftRef.current = findGridElement(apiRef.current, 'filler--pinnedLeft');
|
|
304
301
|
fillerRightRef.current = findGridElement(apiRef.current, 'filler--pinnedRight');
|
|
@@ -471,8 +468,7 @@ export const useGridColumnResize = (apiRef, props) => {
|
|
|
471
468
|
const columnVirtualizationDisabled = useColumnVirtualizationDisabled(apiRef);
|
|
472
469
|
const isAutosizingRef = React.useRef(false);
|
|
473
470
|
const autosizeColumns = React.useCallback(async userOptions => {
|
|
474
|
-
|
|
475
|
-
const root = (_apiRef$current$rootE = apiRef.current.rootElementRef) == null ? void 0 : _apiRef$current$rootE.current;
|
|
471
|
+
const root = apiRef.current.rootElementRef?.current;
|
|
476
472
|
if (!root) {
|
|
477
473
|
return;
|
|
478
474
|
}
|
|
@@ -482,7 +478,7 @@ export const useGridColumnResize = (apiRef, props) => {
|
|
|
482
478
|
isAutosizingRef.current = true;
|
|
483
479
|
const state = gridColumnsStateSelector(apiRef.current.state);
|
|
484
480
|
const options = _extends({}, DEFAULT_GRID_AUTOSIZE_OPTIONS, userOptions, {
|
|
485
|
-
columns:
|
|
481
|
+
columns: userOptions?.columns ?? state.orderedFields
|
|
486
482
|
});
|
|
487
483
|
options.columns = options.columns.filter(c => state.columnVisibilityModel[c] !== false);
|
|
488
484
|
const columns = options.columns.map(c => apiRef.current.state.columns.lookup[c]);
|
|
@@ -496,10 +492,7 @@ export const useGridColumnResize = (apiRef, props) => {
|
|
|
496
492
|
}));
|
|
497
493
|
if (options.expand) {
|
|
498
494
|
const visibleColumns = state.orderedFields.map(field => state.lookup[field]).filter(c => state.columnVisibilityModel[c.field] !== false);
|
|
499
|
-
const totalWidth = visibleColumns.reduce((total, column) =>
|
|
500
|
-
var _ref, _widthByField$column$;
|
|
501
|
-
return total + ((_ref = (_widthByField$column$ = widthByField[column.field]) != null ? _widthByField$column$ : column.computedWidth) != null ? _ref : column.width);
|
|
502
|
-
}, 0);
|
|
495
|
+
const totalWidth = visibleColumns.reduce((total, column) => total + (widthByField[column.field] ?? column.computedWidth ?? column.width), 0);
|
|
503
496
|
const availableWidth = apiRef.current.getRootDimensions().viewportInnerSize.width;
|
|
504
497
|
const remainingWidth = availableWidth - totalWidth;
|
|
505
498
|
if (remainingWidth > 0) {
|
|
@@ -539,10 +532,7 @@ export const useGridColumnResize = (apiRef, props) => {
|
|
|
539
532
|
});
|
|
540
533
|
}
|
|
541
534
|
});
|
|
542
|
-
useGridNativeEventListener(apiRef, () => {
|
|
543
|
-
var _apiRef$current$colum2;
|
|
544
|
-
return (_apiRef$current$colum2 = apiRef.current.columnHeadersContainerRef) == null ? void 0 : _apiRef$current$colum2.current;
|
|
545
|
-
}, 'touchstart', handleTouchStart, {
|
|
535
|
+
useGridNativeEventListener(apiRef, () => apiRef.current.columnHeadersContainerRef?.current, 'touchstart', handleTouchStart, {
|
|
546
536
|
passive: doesSupportTouchActionNone()
|
|
547
537
|
});
|
|
548
538
|
useGridApiMethod(apiRef, {
|
|
@@ -64,11 +64,10 @@ export const gridVisiblePinnedColumnDefinitionsSelector = createSelectorMemoized
|
|
|
64
64
|
return visiblePinnedColumns;
|
|
65
65
|
});
|
|
66
66
|
function filterVisibleColumns(pinnedColumns, columns, invert) {
|
|
67
|
-
var _pinnedColumns$left, _pinnedColumns$right;
|
|
68
67
|
if (!Array.isArray(pinnedColumns.left) && !Array.isArray(pinnedColumns.right)) {
|
|
69
68
|
return EMPTY_PINNED_COLUMN_FIELDS;
|
|
70
69
|
}
|
|
71
|
-
if (
|
|
70
|
+
if (pinnedColumns.left?.length === 0 && pinnedColumns.right?.length === 0) {
|
|
72
71
|
return EMPTY_PINNED_COLUMN_FIELDS;
|
|
73
72
|
}
|
|
74
73
|
const filter = (newPinnedColumns, remainingColumns) => {
|
|
@@ -51,13 +51,4 @@ export declare function getFirstNonSpannedColumnToRender({ firstColumnToRender,
|
|
|
51
51
|
lastRowToRender: number;
|
|
52
52
|
visibleRows: GridRowEntry[];
|
|
53
53
|
}): number;
|
|
54
|
-
export declare function getFirstColumnIndexToRender({ firstColumnIndex, minColumnIndex, columnBuffer, firstRowToRender, lastRowToRender, apiRef, visibleRows, }: {
|
|
55
|
-
firstColumnIndex: number;
|
|
56
|
-
minColumnIndex: number;
|
|
57
|
-
columnBuffer: number;
|
|
58
|
-
apiRef: React.MutableRefObject<GridApiCommon>;
|
|
59
|
-
firstRowToRender: number;
|
|
60
|
-
lastRowToRender: number;
|
|
61
|
-
visibleRows: GridRowEntry[];
|
|
62
|
-
}): number;
|
|
63
54
|
export declare function getTotalHeaderHeight(apiRef: React.MutableRefObject<GridApiCommunity>, headerHeight: number): number;
|
|
@@ -213,7 +213,6 @@ export const createColumnsState = ({
|
|
|
213
213
|
columnVisibilityModel = gridColumnVisibilityModelSelector(apiRef),
|
|
214
214
|
keepOnlyColumnsToUpsert = false
|
|
215
215
|
}) => {
|
|
216
|
-
var _apiRef$current$getRo, _apiRef$current$getRo2, _apiRef$current;
|
|
217
216
|
const isInsideStateInitializer = !apiRef.current.state.columns;
|
|
218
217
|
let columnsState;
|
|
219
218
|
if (isInsideStateInitializer) {
|
|
@@ -283,7 +282,7 @@ export const createColumnsState = ({
|
|
|
283
282
|
}
|
|
284
283
|
const columnsStateWithPreProcessing = apiRef.current.unstable_applyPipeProcessors('hydrateColumns', columnsState);
|
|
285
284
|
const columnsStateWithPortableColumns = applyInitialState(columnsStateWithPreProcessing, initialState);
|
|
286
|
-
return hydrateColumnsWidth(columnsStateWithPortableColumns,
|
|
285
|
+
return hydrateColumnsWidth(columnsStateWithPortableColumns, apiRef.current.getRootDimensions?.().viewportInnerSize.width ?? 0);
|
|
287
286
|
};
|
|
288
287
|
export function getFirstNonSpannedColumnToRender({
|
|
289
288
|
firstColumnToRender,
|
|
@@ -305,29 +304,10 @@ export function getFirstNonSpannedColumnToRender({
|
|
|
305
304
|
}
|
|
306
305
|
return firstNonSpannedColumnToRender;
|
|
307
306
|
}
|
|
308
|
-
export function getFirstColumnIndexToRender({
|
|
309
|
-
firstColumnIndex,
|
|
310
|
-
minColumnIndex,
|
|
311
|
-
columnBuffer,
|
|
312
|
-
firstRowToRender,
|
|
313
|
-
lastRowToRender,
|
|
314
|
-
apiRef,
|
|
315
|
-
visibleRows
|
|
316
|
-
}) {
|
|
317
|
-
const initialFirstColumnToRender = Math.max(firstColumnIndex - columnBuffer, minColumnIndex);
|
|
318
|
-
const firstColumnToRender = getFirstNonSpannedColumnToRender({
|
|
319
|
-
firstColumnToRender: initialFirstColumnToRender,
|
|
320
|
-
apiRef,
|
|
321
|
-
firstRowToRender,
|
|
322
|
-
lastRowToRender,
|
|
323
|
-
visibleRows
|
|
324
|
-
});
|
|
325
|
-
return firstColumnToRender;
|
|
326
|
-
}
|
|
327
307
|
export function getTotalHeaderHeight(apiRef, headerHeight) {
|
|
328
308
|
const densityFactor = gridDensityFactorSelector(apiRef);
|
|
329
309
|
const maxDepth = gridColumnGroupsHeaderMaxDepthSelector(apiRef);
|
|
330
310
|
const isHeaderFilteringEnabled = gridHeaderFilteringEnabledSelector(apiRef);
|
|
331
311
|
const multiplicationFactor = isHeaderFilteringEnabled ? 2 : 1;
|
|
332
|
-
return Math.floor(headerHeight * densityFactor) * ((maxDepth
|
|
312
|
+
return Math.floor(headerHeight * densityFactor) * ((maxDepth ?? 0) + multiplicationFactor);
|
|
333
313
|
}
|
|
@@ -8,8 +8,7 @@ import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
|
|
|
8
8
|
export const useGridColumnSpanning = apiRef => {
|
|
9
9
|
const lookup = React.useRef({});
|
|
10
10
|
const getCellColSpanInfo = (rowId, columnIndex) => {
|
|
11
|
-
|
|
12
|
-
return (_lookup$current$rowId = lookup.current[rowId]) == null ? void 0 : _lookup$current$rowId[columnIndex];
|
|
11
|
+
return lookup.current[rowId]?.[columnIndex];
|
|
13
12
|
};
|
|
14
13
|
|
|
15
14
|
// Calculate `colSpan` for each cell in the row
|
|
@@ -10,19 +10,18 @@ import { hydrateColumnsWidth, createColumnsState, COLUMNS_DIMENSION_PROPERTIES }
|
|
|
10
10
|
import { GridPreferencePanelsValue } from '../preferencesPanel';
|
|
11
11
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
12
|
export const columnsStateInitializer = (state, props, apiRef) => {
|
|
13
|
-
var _props$initialState, _ref, _props$columnVisibili, _props$initialState2, _state$pinnedColumns;
|
|
14
13
|
const columnsState = createColumnsState({
|
|
15
14
|
apiRef,
|
|
16
15
|
columnsToUpsert: props.columns,
|
|
17
|
-
initialState:
|
|
18
|
-
columnVisibilityModel:
|
|
16
|
+
initialState: props.initialState?.columns,
|
|
17
|
+
columnVisibilityModel: props.columnVisibilityModel ?? props.initialState?.columns?.columnVisibilityModel ?? {},
|
|
19
18
|
keepOnlyColumnsToUpsert: true
|
|
20
19
|
});
|
|
21
20
|
return _extends({}, state, {
|
|
22
21
|
columns: columnsState,
|
|
23
22
|
// In pro/premium, this part of the state is defined. We give it an empty but defined value
|
|
24
23
|
// for the community version.
|
|
25
|
-
pinnedColumns:
|
|
24
|
+
pinnedColumns: state.pinnedColumns ?? EMPTY_PINNED_COLUMN_FIELDS
|
|
26
25
|
});
|
|
27
26
|
};
|
|
28
27
|
|
|
@@ -32,7 +31,6 @@ export const columnsStateInitializer = (state, props, apiRef) => {
|
|
|
32
31
|
* TODO: Impossible priority - useGridParamsApi also needs to be after useGridColumns
|
|
33
32
|
*/
|
|
34
33
|
export function useGridColumns(apiRef, props) {
|
|
35
|
-
var _props$initialState4, _props$slotProps2;
|
|
36
34
|
const logger = useGridLogger(apiRef, 'useGridColumns');
|
|
37
35
|
const previousColumnsProp = React.useRef(props.columns);
|
|
38
36
|
apiRef.current.registerControlState({
|
|
@@ -43,11 +41,10 @@ export function useGridColumns(apiRef, props) {
|
|
|
43
41
|
changeEvent: 'columnVisibilityModelChange'
|
|
44
42
|
});
|
|
45
43
|
const setGridColumnsState = React.useCallback(columnsState => {
|
|
46
|
-
var _apiRef$current$updat, _apiRef$current;
|
|
47
44
|
logger.debug('Updating columns state.');
|
|
48
45
|
apiRef.current.setState(mergeColumnsState(columnsState));
|
|
49
46
|
apiRef.current.publishEvent('columnsChange', columnsState.orderedFields);
|
|
50
|
-
|
|
47
|
+
apiRef.current.updateRenderContext?.();
|
|
51
48
|
apiRef.current.forceUpdate();
|
|
52
49
|
}, [logger, apiRef]);
|
|
53
50
|
|
|
@@ -68,7 +65,6 @@ export function useGridColumns(apiRef, props) {
|
|
|
68
65
|
const setColumnVisibilityModel = React.useCallback(model => {
|
|
69
66
|
const currentModel = gridColumnVisibilityModelSelector(apiRef);
|
|
70
67
|
if (currentModel !== model) {
|
|
71
|
-
var _apiRef$current$updat2, _apiRef$current2;
|
|
72
68
|
apiRef.current.setState(state => _extends({}, state, {
|
|
73
69
|
columns: createColumnsState({
|
|
74
70
|
apiRef,
|
|
@@ -78,7 +74,7 @@ export function useGridColumns(apiRef, props) {
|
|
|
78
74
|
keepOnlyColumnsToUpsert: false
|
|
79
75
|
})
|
|
80
76
|
}));
|
|
81
|
-
|
|
77
|
+
apiRef.current.updateRenderContext?.();
|
|
82
78
|
apiRef.current.forceUpdate();
|
|
83
79
|
}
|
|
84
80
|
}, [apiRef]);
|
|
@@ -92,9 +88,8 @@ export function useGridColumns(apiRef, props) {
|
|
|
92
88
|
setGridColumnsState(columnsState);
|
|
93
89
|
}, [apiRef, setGridColumnsState]);
|
|
94
90
|
const setColumnVisibility = React.useCallback((field, isVisible) => {
|
|
95
|
-
var _columnVisibilityMode;
|
|
96
91
|
const columnVisibilityModel = gridColumnVisibilityModelSelector(apiRef);
|
|
97
|
-
const isCurrentlyVisible =
|
|
92
|
+
const isCurrentlyVisible = columnVisibilityModel[field] ?? true;
|
|
98
93
|
if (isVisible !== isCurrentlyVisible) {
|
|
99
94
|
const newModel = _extends({}, columnVisibilityModel, {
|
|
100
95
|
[field]: isVisible
|
|
@@ -167,7 +162,6 @@ export function useGridColumns(apiRef, props) {
|
|
|
167
162
|
* PRE-PROCESSING
|
|
168
163
|
*/
|
|
169
164
|
const stateExportPreProcessing = React.useCallback((prevState, context) => {
|
|
170
|
-
var _props$initialState$c, _props$initialState3;
|
|
171
165
|
const columnsStateToExport = {};
|
|
172
166
|
const columnVisibilityModelToExport = gridColumnVisibilityModelSelector(apiRef);
|
|
173
167
|
const shouldExportColumnVisibilityModel =
|
|
@@ -177,7 +171,7 @@ export function useGridColumns(apiRef, props) {
|
|
|
177
171
|
props.columnVisibilityModel != null ||
|
|
178
172
|
// Always export if the model has been initialized
|
|
179
173
|
// TODO v6 Do a nullish check instead to export even if the initial model equals "{}"
|
|
180
|
-
Object.keys(
|
|
174
|
+
Object.keys(props.initialState?.columns?.columnVisibilityModel ?? {}).length > 0 ||
|
|
181
175
|
// Always export if the model is not empty
|
|
182
176
|
Object.keys(columnVisibilityModelToExport).length > 0;
|
|
183
177
|
if (shouldExportColumnVisibilityModel) {
|
|
@@ -205,10 +199,9 @@ export function useGridColumns(apiRef, props) {
|
|
|
205
199
|
return _extends({}, prevState, {
|
|
206
200
|
columns: columnsStateToExport
|
|
207
201
|
});
|
|
208
|
-
}, [apiRef, props.columnVisibilityModel,
|
|
202
|
+
}, [apiRef, props.columnVisibilityModel, props.initialState?.columns]);
|
|
209
203
|
const stateRestorePreProcessing = React.useCallback((params, context) => {
|
|
210
|
-
|
|
211
|
-
const columnVisibilityModelToImport = (_context$stateToResto = context.stateToRestore.columns) == null ? void 0 : _context$stateToResto.columnVisibilityModel;
|
|
204
|
+
const columnVisibilityModelToImport = context.stateToRestore.columns?.columnVisibilityModel;
|
|
212
205
|
const initialState = context.stateToRestore.columns;
|
|
213
206
|
if (columnVisibilityModelToImport == null && initialState == null) {
|
|
214
207
|
return params;
|
|
@@ -228,12 +221,11 @@ export function useGridColumns(apiRef, props) {
|
|
|
228
221
|
}, [apiRef]);
|
|
229
222
|
const preferencePanelPreProcessing = React.useCallback((initialValue, value) => {
|
|
230
223
|
if (value === GridPreferencePanelsValue.columns) {
|
|
231
|
-
var _props$slotProps;
|
|
232
224
|
const ColumnsPanel = props.slots.columnsPanel;
|
|
233
|
-
return /*#__PURE__*/_jsx(ColumnsPanel, _extends({},
|
|
225
|
+
return /*#__PURE__*/_jsx(ColumnsPanel, _extends({}, props.slotProps?.columnsPanel));
|
|
234
226
|
}
|
|
235
227
|
return initialValue;
|
|
236
|
-
}, [props.slots.columnsPanel,
|
|
228
|
+
}, [props.slots.columnsPanel, props.slotProps?.columnsPanel]);
|
|
237
229
|
const addColumnMenuItems = React.useCallback(columnMenuItems => {
|
|
238
230
|
if (props.disableColumnSelector) {
|
|
239
231
|
return columnMenuItems;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { GridStateCommunity } from '../../../models/gridStateCommunity';
|
|
2
|
-
|
|
3
|
-
export declare const
|
|
2
|
+
import { GridDensity } from '../../../models/gridDensity';
|
|
3
|
+
export declare const COMPACT_DENSITY_FACTOR = 0.7;
|
|
4
|
+
export declare const COMFORTABLE_DENSITY_FACTOR = 1.3;
|
|
5
|
+
export declare const gridDensitySelector: (state: GridStateCommunity) => GridDensity;
|
|
4
6
|
export declare const gridDensityFactorSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, number>;
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { createSelector } from '../../../utils/createSelector';
|
|
2
|
+
export const COMPACT_DENSITY_FACTOR = 0.7;
|
|
3
|
+
export const COMFORTABLE_DENSITY_FACTOR = 1.3;
|
|
4
|
+
const DENSITY_FACTORS = {
|
|
5
|
+
compact: COMPACT_DENSITY_FACTOR,
|
|
6
|
+
comfortable: COMFORTABLE_DENSITY_FACTOR,
|
|
7
|
+
standard: 1
|
|
8
|
+
};
|
|
2
9
|
export const gridDensitySelector = state => state.density;
|
|
3
|
-
export const
|
|
4
|
-
export const gridDensityFactorSelector = createSelector(gridDensitySelector, density => density.factor);
|
|
10
|
+
export const gridDensityFactorSelector = createSelector(gridDensitySelector, density => DENSITY_FACTORS[density]);
|
|
@@ -2,7 +2,5 @@ import * as React from 'react';
|
|
|
2
2
|
import { GridPrivateApiCommunity } from '../../../models/api/gridApiCommunity';
|
|
3
3
|
import { DataGridProcessedProps } from '../../../models/props/DataGridProps';
|
|
4
4
|
import { GridStateInitializer } from '../../utils/useGridInitializeState';
|
|
5
|
-
export declare const
|
|
6
|
-
export declare const
|
|
7
|
-
export declare const densityStateInitializer: GridStateInitializer<Pick<DataGridProcessedProps, 'density'>>;
|
|
8
|
-
export declare const useGridDensity: (apiRef: React.MutableRefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, 'density'>) => void;
|
|
5
|
+
export declare const densityStateInitializer: GridStateInitializer<Pick<DataGridProcessedProps, 'initialState' | 'density'>>;
|
|
6
|
+
export declare const useGridDensity: (apiRef: React.MutableRefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, 'density' | 'onDensityChange'>) => void;
|