@mui/x-data-grid-premium 7.20.0 → 7.22.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.
Files changed (37) hide show
  1. package/CHANGELOG.md +200 -31
  2. package/DataGridPremium/DataGridPremium.js +16 -0
  3. package/DataGridPremium/useDataGridPremiumComponent.js +5 -1
  4. package/components/GridDataSourceGroupingCriteriaCell.d.ts +7 -0
  5. package/components/GridDataSourceGroupingCriteriaCell.js +134 -0
  6. package/esm/DataGridPremium/DataGridPremium.js +16 -0
  7. package/esm/DataGridPremium/useDataGridPremiumComponent.js +6 -2
  8. package/esm/components/GridDataSourceGroupingCriteriaCell.js +126 -0
  9. package/esm/hooks/features/rowGrouping/createGroupingColDef.js +18 -8
  10. package/esm/hooks/features/rowGrouping/gridRowGroupingUtils.js +10 -5
  11. package/esm/hooks/features/rowGrouping/useGridDataSourceRowGroupingPreProcessors.js +73 -0
  12. package/esm/hooks/features/rowGrouping/useGridRowGrouping.js +16 -6
  13. package/esm/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.js +17 -22
  14. package/esm/utils/releaseInfo.js +1 -1
  15. package/hooks/features/rowGrouping/createGroupingColDef.d.ts +5 -2
  16. package/hooks/features/rowGrouping/createGroupingColDef.js +17 -7
  17. package/hooks/features/rowGrouping/gridRowGroupingUtils.d.ts +7 -4
  18. package/hooks/features/rowGrouping/gridRowGroupingUtils.js +11 -6
  19. package/hooks/features/rowGrouping/useGridDataSourceRowGroupingPreProcessors.d.ts +4 -0
  20. package/hooks/features/rowGrouping/useGridDataSourceRowGroupingPreProcessors.js +81 -0
  21. package/hooks/features/rowGrouping/useGridRowGrouping.d.ts +1 -1
  22. package/hooks/features/rowGrouping/useGridRowGrouping.js +15 -5
  23. package/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.d.ts +1 -1
  24. package/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.js +16 -21
  25. package/index.js +1 -1
  26. package/modern/DataGridPremium/DataGridPremium.js +16 -0
  27. package/modern/DataGridPremium/useDataGridPremiumComponent.js +6 -2
  28. package/modern/components/GridDataSourceGroupingCriteriaCell.js +126 -0
  29. package/modern/hooks/features/rowGrouping/createGroupingColDef.js +18 -8
  30. package/modern/hooks/features/rowGrouping/gridRowGroupingUtils.js +10 -5
  31. package/modern/hooks/features/rowGrouping/useGridDataSourceRowGroupingPreProcessors.js +73 -0
  32. package/modern/hooks/features/rowGrouping/useGridRowGrouping.js +16 -6
  33. package/modern/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.js +17 -22
  34. package/modern/index.js +1 -1
  35. package/modern/utils/releaseInfo.js +1 -1
  36. package/package.json +5 -5
  37. package/utils/releaseInfo.js +1 -1
@@ -13,6 +13,7 @@ var _xDataGridPro = require("@mui/x-data-grid-pro");
13
13
  var _internals = require("@mui/x-data-grid-pro/internals");
14
14
  var _GridGroupingColumnFooterCell = require("../../../components/GridGroupingColumnFooterCell");
15
15
  var _GridGroupingCriteriaCell = require("../../../components/GridGroupingCriteriaCell");
16
+ var _GridDataSourceGroupingCriteriaCell = require("../../../components/GridDataSourceGroupingCriteriaCell");
16
17
  var _GridGroupingColumnLeafCell = require("../../../components/GridGroupingColumnLeafCell");
17
18
  var _gridRowGroupingUtils = require("./gridRowGroupingUtils");
18
19
  var _gridRowGroupingSelector = require("./gridRowGroupingSelector");
@@ -23,10 +24,15 @@ const GROUPING_COL_DEF_DEFAULT_PROPERTIES = (0, _extends2.default)({}, _xDataGri
23
24
  type: 'custom',
24
25
  disableReorder: true
25
26
  });
26
- const GROUPING_COL_DEF_FORCED_PROPERTIES = {
27
+ const GROUPING_COL_DEF_FORCED_PROPERTIES_DEFAULT = {
27
28
  editable: false,
28
29
  groupable: false
29
30
  };
31
+ const GROUPING_COL_DEF_FORCED_PROPERTIES_DATA_SOURCE = (0, _extends2.default)({}, GROUPING_COL_DEF_FORCED_PROPERTIES_DEFAULT, {
32
+ // TODO: Support these features on the grouping column(s)
33
+ filterable: false,
34
+ sortable: false
35
+ });
30
36
 
31
37
  /**
32
38
  * When sorting two cells with different grouping criteria, we consider that the cell with the grouping criteria coming first in the model should be displayed below.
@@ -92,7 +98,8 @@ const createGroupingColDefForOneGroupingCriteria = ({
92
98
  columnsLookup,
93
99
  groupedByColDef,
94
100
  groupingCriteria,
95
- colDefOverride
101
+ colDefOverride,
102
+ strategy = _gridRowGroupingUtils.RowGroupingStrategy.Default
96
103
  }) => {
97
104
  const _ref = colDefOverride ?? {},
98
105
  {
@@ -102,6 +109,7 @@ const createGroupingColDefForOneGroupingCriteria = ({
102
109
  } = _ref,
103
110
  colDefOverrideProperties = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
104
111
  const leafColDef = leafField ? columnsLookup[leafField] : null;
112
+ const CriteriaCell = strategy === _gridRowGroupingUtils.RowGroupingStrategy.Default ? _GridGroupingCriteriaCell.GridGroupingCriteriaCell : _GridDataSourceGroupingCriteriaCell.GridDataSourceGroupingCriteriaCell;
105
113
 
106
114
  // The properties that do not depend on the presence of a `leafColDef` and that can be overridden by `colDefOverride`
107
115
  const commonProperties = {
@@ -129,7 +137,7 @@ const createGroupingColDefForOneGroupingCriteria = ({
129
137
 
130
138
  // Render current grouping criteria groups
131
139
  if (params.rowNode.groupingField === groupingCriteria) {
132
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridGroupingCriteriaCell.GridGroupingCriteriaCell, (0, _extends2.default)({}, params, {
140
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(CriteriaCell, (0, _extends2.default)({}, params, {
133
141
  hideDescendantCount: hideDescendantCount
134
142
  }));
135
143
  }
@@ -174,7 +182,7 @@ const createGroupingColDefForOneGroupingCriteria = ({
174
182
  // The properties that can't be overridden with `colDefOverride`
175
183
  const forcedProperties = (0, _extends2.default)({
176
184
  field: (0, _gridRowGroupingUtils.getRowGroupingFieldFromGroupingCriteria)(groupingCriteria)
177
- }, GROUPING_COL_DEF_FORCED_PROPERTIES);
185
+ }, GROUPING_COL_DEF_FORCED_PROPERTIES_DEFAULT);
178
186
  return (0, _extends2.default)({}, GROUPING_COL_DEF_DEFAULT_PROPERTIES, commonProperties, sourceProperties, colDefOverrideProperties, forcedProperties);
179
187
  };
180
188
  exports.createGroupingColDefForOneGroupingCriteria = createGroupingColDefForOneGroupingCriteria;
@@ -185,7 +193,8 @@ const createGroupingColDefForAllGroupingCriteria = ({
185
193
  apiRef,
186
194
  columnsLookup,
187
195
  rowGroupingModel,
188
- colDefOverride
196
+ colDefOverride,
197
+ strategy = _gridRowGroupingUtils.RowGroupingStrategy.Default
189
198
  }) => {
190
199
  const _ref2 = colDefOverride ?? {},
191
200
  {
@@ -195,6 +204,7 @@ const createGroupingColDefForAllGroupingCriteria = ({
195
204
  } = _ref2,
196
205
  colDefOverrideProperties = (0, _objectWithoutPropertiesLoose2.default)(_ref2, _excluded2);
197
206
  const leafColDef = leafField ? columnsLookup[leafField] : null;
207
+ const CriteriaCell = strategy === _gridRowGroupingUtils.RowGroupingStrategy.Default ? _GridGroupingCriteriaCell.GridGroupingCriteriaCell : _GridDataSourceGroupingCriteriaCell.GridDataSourceGroupingCriteriaCell;
198
208
 
199
209
  // The properties that do not depend on the presence of a `leafColDef` and that can be overridden by `colDefOverride`
200
210
  const commonProperties = {
@@ -222,7 +232,7 @@ const createGroupingColDefForAllGroupingCriteria = ({
222
232
  }
223
233
 
224
234
  // Render the groups
225
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridGroupingCriteriaCell.GridGroupingCriteriaCell, (0, _extends2.default)({}, params, {
235
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(CriteriaCell, (0, _extends2.default)({}, params, {
226
236
  hideDescendantCount: hideDescendantCount
227
237
  }));
228
238
  },
@@ -262,7 +272,7 @@ const createGroupingColDefForAllGroupingCriteria = ({
262
272
  // The properties that can't be overridden with `colDefOverride`
263
273
  const forcedProperties = (0, _extends2.default)({
264
274
  field: _gridRowGroupingUtils.GRID_ROW_GROUPING_SINGLE_GROUPING_FIELD
265
- }, GROUPING_COL_DEF_FORCED_PROPERTIES);
275
+ }, strategy === _gridRowGroupingUtils.RowGroupingStrategy.Default ? GROUPING_COL_DEF_FORCED_PROPERTIES_DEFAULT : GROUPING_COL_DEF_FORCED_PROPERTIES_DATA_SOURCE);
266
276
  return (0, _extends2.default)({}, GROUPING_COL_DEF_DEFAULT_PROPERTIES, commonProperties, sourceProperties, colDefOverrideProperties, forcedProperties);
267
277
  };
268
278
  exports.createGroupingColDefForAllGroupingCriteria = createGroupingColDefForAllGroupingCriteria;
@@ -1,12 +1,15 @@
1
1
  import * as React from 'react';
2
- import { GridRowTreeConfig, GridFilterState, GridFilterModel, GridRowModel, GridColDef, GridKeyValue } from '@mui/x-data-grid-pro';
2
+ import { GridRowTreeConfig, GridFilterState, GridFilterModel, GridRowModel, GridColDef, GridKeyValue, GridDataSource } from '@mui/x-data-grid-pro';
3
3
  import { GridAggregatedFilterItemApplier, GridColumnRawLookup } from '@mui/x-data-grid-pro/internals';
4
4
  import { DataGridPremiumProcessedProps } from '../../../models/dataGridPremiumProps';
5
5
  import { GridGroupingRule, GridGroupingRules, GridRowGroupingModel } from './gridRowGroupingInterfaces';
6
6
  import { GridStatePremium } from '../../../models/gridStatePremium';
7
7
  import { GridPrivateApiPremium } from '../../../models/gridApiPremium';
8
8
  export declare const GRID_ROW_GROUPING_SINGLE_GROUPING_FIELD = "__row_group_by_columns_group__";
9
- export declare const ROW_GROUPING_STRATEGY = "grouping-columns";
9
+ export declare enum RowGroupingStrategy {
10
+ Default = "grouping-columns",
11
+ DataSource = "grouping-columns-data-source"
12
+ }
10
13
  export declare const getRowGroupingFieldFromGroupingCriteria: (groupingCriteria: string | null) => string;
11
14
  export declare const getRowGroupingCriteriaFromGroupingField: (groupingColDefField: string) => string | null;
12
15
  export declare const isGroupingColumn: (field: string) => boolean;
@@ -23,9 +26,9 @@ interface FilterRowTreeFromTreeDataParams {
23
26
  * - It is passing the filter
24
27
  */
25
28
  export declare const filterRowTreeFromGroupingColumns: (params: FilterRowTreeFromTreeDataParams) => Omit<GridFilterState, "filterModel">;
26
- export declare const getColDefOverrides: (groupingColDefProp: DataGridPremiumProcessedProps["groupingColDef"], fields: string[]) => import("@mui/x-data-grid-pro").GridGroupingColDefOverride<any> | null | undefined;
29
+ export declare const getColDefOverrides: (groupingColDefProp: DataGridPremiumProcessedProps["groupingColDef"], fields: string[], strategy?: RowGroupingStrategy) => import("@mui/x-data-grid-pro").GridGroupingColDefOverride<any> | null | undefined;
27
30
  export declare const mergeStateWithRowGroupingModel: (rowGroupingModel: GridRowGroupingModel) => (state: GridStatePremium) => GridStatePremium;
28
- export declare const setStrategyAvailability: (privateApiRef: React.MutableRefObject<GridPrivateApiPremium>, disableRowGrouping: boolean) => void;
31
+ export declare const setStrategyAvailability: (privateApiRef: React.MutableRefObject<GridPrivateApiPremium>, disableRowGrouping: boolean, dataSource?: GridDataSource) => void;
29
32
  export declare const getCellGroupingCriteria: ({ row, colDef, groupingRule, apiRef, }: {
30
33
  row: GridRowModel;
31
34
  colDef: GridColDef;
@@ -4,12 +4,16 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.setStrategyAvailability = exports.mergeStateWithRowGroupingModel = exports.isGroupingColumn = exports.getRowGroupingFieldFromGroupingCriteria = exports.getRowGroupingCriteriaFromGroupingField = exports.getGroupingRules = exports.getColDefOverrides = exports.getCellGroupingCriteria = exports.filterRowTreeFromGroupingColumns = exports.areGroupingRulesEqual = exports.ROW_GROUPING_STRATEGY = exports.GRID_ROW_GROUPING_SINGLE_GROUPING_FIELD = void 0;
7
+ exports.setStrategyAvailability = exports.mergeStateWithRowGroupingModel = exports.isGroupingColumn = exports.getRowGroupingFieldFromGroupingCriteria = exports.getRowGroupingCriteriaFromGroupingField = exports.getGroupingRules = exports.getColDefOverrides = exports.getCellGroupingCriteria = exports.filterRowTreeFromGroupingColumns = exports.areGroupingRulesEqual = exports.RowGroupingStrategy = exports.GRID_ROW_GROUPING_SINGLE_GROUPING_FIELD = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var _internals = require("@mui/x-data-grid-pro/internals");
10
10
  var _gridRowGroupingSelector = require("./gridRowGroupingSelector");
11
11
  const GRID_ROW_GROUPING_SINGLE_GROUPING_FIELD = exports.GRID_ROW_GROUPING_SINGLE_GROUPING_FIELD = '__row_group_by_columns_group__';
12
- const ROW_GROUPING_STRATEGY = exports.ROW_GROUPING_STRATEGY = 'grouping-columns';
12
+ let RowGroupingStrategy = exports.RowGroupingStrategy = /*#__PURE__*/function (RowGroupingStrategy) {
13
+ RowGroupingStrategy["Default"] = "grouping-columns";
14
+ RowGroupingStrategy["DataSource"] = "grouping-columns-data-source";
15
+ return RowGroupingStrategy;
16
+ }({});
13
17
  const getRowGroupingFieldFromGroupingCriteria = groupingCriteria => {
14
18
  if (groupingCriteria === null) {
15
19
  return GRID_ROW_GROUPING_SINGLE_GROUPING_FIELD;
@@ -114,10 +118,10 @@ const filterRowTreeFromGroupingColumns = params => {
114
118
  };
115
119
  };
116
120
  exports.filterRowTreeFromGroupingColumns = filterRowTreeFromGroupingColumns;
117
- const getColDefOverrides = (groupingColDefProp, fields) => {
121
+ const getColDefOverrides = (groupingColDefProp, fields, strategy) => {
118
122
  if (typeof groupingColDefProp === 'function') {
119
123
  return groupingColDefProp({
120
- groupingName: ROW_GROUPING_STRATEGY,
124
+ groupingName: strategy ?? RowGroupingStrategy.Default,
121
125
  fields
122
126
  });
123
127
  }
@@ -130,7 +134,7 @@ const mergeStateWithRowGroupingModel = rowGroupingModel => state => (0, _extends
130
134
  })
131
135
  });
132
136
  exports.mergeStateWithRowGroupingModel = mergeStateWithRowGroupingModel;
133
- const setStrategyAvailability = (privateApiRef, disableRowGrouping) => {
137
+ const setStrategyAvailability = (privateApiRef, disableRowGrouping, dataSource) => {
134
138
  let isAvailable;
135
139
  if (disableRowGrouping) {
136
140
  isAvailable = () => false;
@@ -140,7 +144,8 @@ const setStrategyAvailability = (privateApiRef, disableRowGrouping) => {
140
144
  return rowGroupingSanitizedModel.length > 0;
141
145
  };
142
146
  }
143
- privateApiRef.current.setStrategyAvailability('rowTree', ROW_GROUPING_STRATEGY, isAvailable);
147
+ const strategy = dataSource ? RowGroupingStrategy.DataSource : RowGroupingStrategy.Default;
148
+ privateApiRef.current.setStrategyAvailability('rowTree', strategy, isAvailable);
144
149
  };
145
150
  exports.setStrategyAvailability = setStrategyAvailability;
146
151
  const getCellGroupingCriteria = ({
@@ -0,0 +1,4 @@
1
+ import * as React from 'react';
2
+ import { DataGridPremiumProcessedProps } from '../../../models/dataGridPremiumProps';
3
+ import { GridPrivateApiPremium } from '../../../models/gridApiPremium';
4
+ export declare const useGridDataSourceRowGroupingPreProcessors: (apiRef: React.MutableRefObject<GridPrivateApiPremium>, props: Pick<DataGridPremiumProcessedProps, "disableRowGrouping" | "groupingColDef" | "rowGroupingColumnMode" | "defaultGroupingExpansionDepth" | "isGroupExpandedByDefault" | "unstable_dataSource">) => void;
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useGridDataSourceRowGroupingPreProcessors = void 0;
8
+ var React = _interopRequireWildcard(require("react"));
9
+ var _xDataGridPro = require("@mui/x-data-grid-pro");
10
+ var _internals = require("@mui/x-data-grid-pro/internals");
11
+ var _gridRowGroupingUtils = require("./gridRowGroupingUtils");
12
+ var _gridRowGroupingSelector = require("./gridRowGroupingSelector");
13
+ const useGridDataSourceRowGroupingPreProcessors = (apiRef, props) => {
14
+ const createRowTreeForRowGrouping = React.useCallback(params => {
15
+ const getGroupKey = props.unstable_dataSource?.getGroupKey;
16
+ if (!getGroupKey) {
17
+ throw new Error('MUI X: No `getGroupKey` method provided with the dataSource.');
18
+ }
19
+ const getChildrenCount = props.unstable_dataSource?.getChildrenCount;
20
+ if (!getChildrenCount) {
21
+ throw new Error('MUI X: No `getChildrenCount` method provided with the dataSource.');
22
+ }
23
+ const sanitizedRowGroupingModel = (0, _gridRowGroupingSelector.gridRowGroupingSanitizedModelSelector)(apiRef);
24
+ const columnsLookup = (0, _xDataGridPro.gridColumnLookupSelector)(apiRef);
25
+ const groupingRules = (0, _gridRowGroupingUtils.getGroupingRules)({
26
+ sanitizedRowGroupingModel,
27
+ columnsLookup
28
+ });
29
+ apiRef.current.caches.rowGrouping.rulesOnLastRowTreeCreation = groupingRules;
30
+ const getRowTreeBuilderNode = rowId => {
31
+ const parentPath = params.updates.groupKeys ?? [];
32
+ const row = params.dataRowIdToModelLookup[rowId];
33
+ const groupingRule = groupingRules[parentPath.length];
34
+ const groupingValueGetter = groupingRule?.groupingValueGetter;
35
+ const leafKey = groupingValueGetter?.(row[groupingRule.field], row, columnsLookup[groupingRule.field], apiRef) ?? getGroupKey(params.dataRowIdToModelLookup[rowId]);
36
+ return {
37
+ id: rowId,
38
+ path: [...parentPath, leafKey ?? rowId.toString()].map((key, i) => ({
39
+ key,
40
+ field: groupingRules[i]?.field ?? null
41
+ })),
42
+ serverChildrenCount: getChildrenCount(params.dataRowIdToModelLookup[rowId]) ?? 0
43
+ };
44
+ };
45
+ if (params.updates.type === 'full') {
46
+ return (0, _internals.createRowTree)({
47
+ previousTree: params.previousTree,
48
+ nodes: params.updates.rows.map(getRowTreeBuilderNode),
49
+ defaultGroupingExpansionDepth: props.defaultGroupingExpansionDepth,
50
+ isGroupExpandedByDefault: props.isGroupExpandedByDefault,
51
+ groupingName: _gridRowGroupingUtils.RowGroupingStrategy.DataSource
52
+ });
53
+ }
54
+ return (0, _internals.updateRowTree)({
55
+ nodes: {
56
+ inserted: params.updates.actions.insert.map(getRowTreeBuilderNode),
57
+ modified: params.updates.actions.modify.map(getRowTreeBuilderNode),
58
+ removed: params.updates.actions.remove
59
+ },
60
+ previousTree: params.previousTree,
61
+ previousGroupsToFetch: params.previousGroupsToFetch,
62
+ previousTreeDepth: params.previousTreeDepths,
63
+ defaultGroupingExpansionDepth: props.defaultGroupingExpansionDepth,
64
+ isGroupExpandedByDefault: props.isGroupExpandedByDefault,
65
+ groupingName: _gridRowGroupingUtils.RowGroupingStrategy.DataSource
66
+ });
67
+ }, [apiRef, props.unstable_dataSource, props.defaultGroupingExpansionDepth, props.isGroupExpandedByDefault]);
68
+ const filterRows = React.useCallback(() => {
69
+ const rowTree = (0, _xDataGridPro.gridRowTreeSelector)(apiRef);
70
+ return (0, _internals.skipFiltering)(rowTree);
71
+ }, [apiRef]);
72
+ const sortRows = React.useCallback(() => {
73
+ const rowTree = (0, _xDataGridPro.gridRowTreeSelector)(apiRef);
74
+ return (0, _internals.skipSorting)(rowTree);
75
+ }, [apiRef]);
76
+ (0, _internals.useGridRegisterStrategyProcessor)(apiRef, _gridRowGroupingUtils.RowGroupingStrategy.DataSource, 'rowTreeCreation', createRowTreeForRowGrouping);
77
+ (0, _internals.useGridRegisterStrategyProcessor)(apiRef, _gridRowGroupingUtils.RowGroupingStrategy.DataSource, 'filtering', filterRows);
78
+ (0, _internals.useGridRegisterStrategyProcessor)(apiRef, _gridRowGroupingUtils.RowGroupingStrategy.DataSource, 'sorting', sortRows);
79
+ (0, _internals.useGridRegisterStrategyProcessor)(apiRef, _gridRowGroupingUtils.RowGroupingStrategy.DataSource, 'visibleRowsLookupCreation', _internals.getVisibleRowsLookup);
80
+ };
81
+ exports.useGridDataSourceRowGroupingPreProcessors = useGridDataSourceRowGroupingPreProcessors;
@@ -8,4 +8,4 @@ export declare const rowGroupingStateInitializer: GridStateInitializer<Pick<Data
8
8
  * @requires useGridRows (state, method) - can be after, async only
9
9
  * @requires useGridParamsApi (method) - can be after, async only
10
10
  */
11
- export declare const useGridRowGrouping: (apiRef: React.MutableRefObject<GridPrivateApiPremium>, props: Pick<DataGridPremiumProcessedProps, "initialState" | "rowGroupingModel" | "onRowGroupingModelChange" | "defaultGroupingExpansionDepth" | "isGroupExpandedByDefault" | "groupingColDef" | "rowGroupingColumnMode" | "disableRowGrouping" | "slotProps" | "slots">) => void;
11
+ export declare const useGridRowGrouping: (apiRef: React.MutableRefObject<GridPrivateApiPremium>, props: Pick<DataGridPremiumProcessedProps, "initialState" | "rowGroupingModel" | "onRowGroupingModelChange" | "defaultGroupingExpansionDepth" | "isGroupExpandedByDefault" | "groupingColDef" | "rowGroupingColumnMode" | "disableRowGrouping" | "slotProps" | "slots" | "unstable_dataSource">) => void;
@@ -38,7 +38,7 @@ const useGridRowGrouping = (apiRef, props) => {
38
38
  changeEvent: 'rowGroupingModelChange'
39
39
  });
40
40
 
41
- /**
41
+ /*
42
42
  * API METHODS
43
43
  */
44
44
  const setRowGroupingModel = React.useCallback(model => {
@@ -95,6 +95,11 @@ const useGridRowGrouping = (apiRef, props) => {
95
95
  }
96
96
  return columnMenuItems;
97
97
  }, [props.disableRowGrouping]);
98
+ const addGetRowsParams = React.useCallback(params => {
99
+ return (0, _extends2.default)({}, params, {
100
+ groupFields: (0, _gridRowGroupingSelector.gridRowGroupingModelSelector)(apiRef)
101
+ });
102
+ }, [apiRef]);
98
103
  const stateExportPreProcessing = React.useCallback((prevState, context) => {
99
104
  const rowGroupingModelToExport = (0, _gridRowGroupingSelector.gridRowGroupingModelSelector)(apiRef);
100
105
  const shouldExportRowGroupingModel =
@@ -126,10 +131,11 @@ const useGridRowGrouping = (apiRef, props) => {
126
131
  return params;
127
132
  }, [apiRef, props.disableRowGrouping]);
128
133
  (0, _internals.useGridRegisterPipeProcessor)(apiRef, 'columnMenu', addColumnMenuButtons);
134
+ (0, _internals.useGridRegisterPipeProcessor)(apiRef, 'getRowsParams', addGetRowsParams);
129
135
  (0, _internals.useGridRegisterPipeProcessor)(apiRef, 'exportState', stateExportPreProcessing);
130
136
  (0, _internals.useGridRegisterPipeProcessor)(apiRef, 'restoreState', stateRestorePreProcessing);
131
137
 
132
- /**
138
+ /*
133
139
  * EVENTS
134
140
  */
135
141
  const handleCellKeyDown = React.useCallback((params, event) => {
@@ -144,9 +150,13 @@ const useGridRowGrouping = (apiRef, props) => {
144
150
  if (!isOnGroupingCell) {
145
151
  return;
146
152
  }
153
+ if (props.unstable_dataSource && !params.rowNode.childrenExpanded) {
154
+ apiRef.current.unstable_dataSource.fetchRows(params.id);
155
+ return;
156
+ }
147
157
  apiRef.current.setRowChildrenExpansion(params.id, !params.rowNode.childrenExpanded);
148
158
  }
149
- }, [apiRef, props.rowGroupingColumnMode]);
159
+ }, [apiRef, props.rowGroupingColumnMode, props.unstable_dataSource]);
150
160
  const checkGroupingColumnsModelDiff = React.useCallback(() => {
151
161
  const sanitizedRowGroupingModel = (0, _gridRowGroupingSelector.gridRowGroupingSanitizedModelSelector)(apiRef);
152
162
  const rulesOnLastRowTreeCreation = apiRef.current.caches.rowGrouping.rulesOnLastRowTreeCreation || [];
@@ -161,7 +171,7 @@ const useGridRowGrouping = (apiRef, props) => {
161
171
 
162
172
  // Refresh the row tree creation strategy processing
163
173
  // TODO: Add a clean way to re-run a strategy processing without publishing a private event
164
- if (apiRef.current.getActiveStrategy('rowTree') === _gridRowGroupingUtils.ROW_GROUPING_STRATEGY) {
174
+ if (apiRef.current.getActiveStrategy('rowTree') === _gridRowGroupingUtils.RowGroupingStrategy.Default) {
165
175
  apiRef.current.publishEvent('activeStrategyProcessorChange', 'rowTreeCreation');
166
176
  }
167
177
  }
@@ -170,7 +180,7 @@ const useGridRowGrouping = (apiRef, props) => {
170
180
  (0, _xDataGridPro.useGridApiEventHandler)(apiRef, 'columnsChange', checkGroupingColumnsModelDiff);
171
181
  (0, _xDataGridPro.useGridApiEventHandler)(apiRef, 'rowGroupingModelChange', checkGroupingColumnsModelDiff);
172
182
 
173
- /**
183
+ /*
174
184
  * EFFECTS
175
185
  */
176
186
  React.useEffect(() => {
@@ -1,4 +1,4 @@
1
1
  import * as React from 'react';
2
2
  import { DataGridPremiumProcessedProps } from '../../../models/dataGridPremiumProps';
3
3
  import { GridPrivateApiPremium } from '../../../models/gridApiPremium';
4
- export declare const useGridRowGroupingPreProcessors: (apiRef: React.MutableRefObject<GridPrivateApiPremium>, props: Pick<DataGridPremiumProcessedProps, "disableRowGrouping" | "groupingColDef" | "rowGroupingColumnMode" | "defaultGroupingExpansionDepth" | "isGroupExpandedByDefault">) => void;
4
+ export declare const useGridRowGroupingPreProcessors: (apiRef: React.MutableRefObject<GridPrivateApiPremium>, props: Pick<DataGridPremiumProcessedProps, "disableRowGrouping" | "groupingColDef" | "rowGroupingColumnMode" | "defaultGroupingExpansionDepth" | "isGroupExpandedByDefault" | "unstable_dataSource">) => void;
@@ -16,6 +16,7 @@ const useGridRowGroupingPreProcessors = (apiRef, props) => {
16
16
  if (props.disableRowGrouping) {
17
17
  return [];
18
18
  }
19
+ const strategy = props.unstable_dataSource ? _gridRowGroupingUtils.RowGroupingStrategy.DataSource : _gridRowGroupingUtils.RowGroupingStrategy.Default;
19
20
  const groupingColDefProp = props.groupingColDef;
20
21
 
21
22
  // We can't use `gridGroupingRowsSanitizedModelSelector` here because the new columns are not in the state yet
@@ -29,8 +30,9 @@ const useGridRowGroupingPreProcessors = (apiRef, props) => {
29
30
  return [(0, _createGroupingColDef.createGroupingColDefForAllGroupingCriteria)({
30
31
  apiRef,
31
32
  rowGroupingModel,
32
- colDefOverride: (0, _gridRowGroupingUtils.getColDefOverrides)(groupingColDefProp, rowGroupingModel),
33
- columnsLookup: columnsState.lookup
33
+ colDefOverride: (0, _gridRowGroupingUtils.getColDefOverrides)(groupingColDefProp, rowGroupingModel, strategy),
34
+ columnsLookup: columnsState.lookup,
35
+ strategy
34
36
  })];
35
37
  }
36
38
  case 'multiple':
@@ -39,7 +41,8 @@ const useGridRowGroupingPreProcessors = (apiRef, props) => {
39
41
  groupingCriteria,
40
42
  colDefOverride: (0, _gridRowGroupingUtils.getColDefOverrides)(groupingColDefProp, [groupingCriteria]),
41
43
  groupedByColDef: columnsState.lookup[groupingCriteria],
42
- columnsLookup: columnsState.lookup
44
+ columnsLookup: columnsState.lookup,
45
+ strategy
43
46
  }));
44
47
  }
45
48
  default:
@@ -47,7 +50,7 @@ const useGridRowGroupingPreProcessors = (apiRef, props) => {
47
50
  return [];
48
51
  }
49
52
  }
50
- }, [apiRef, props.groupingColDef, props.rowGroupingColumnMode, props.disableRowGrouping]);
53
+ }, [apiRef, props.groupingColDef, props.rowGroupingColumnMode, props.disableRowGrouping, props.unstable_dataSource]);
51
54
  const updateGroupingColumn = React.useCallback(columnsState => {
52
55
  const groupingColDefs = getGroupingColDefs(columnsState);
53
56
  let newColumnFields = [];
@@ -107,7 +110,7 @@ const useGridRowGroupingPreProcessors = (apiRef, props) => {
107
110
  nodes: params.updates.rows.map(getRowTreeBuilderNode),
108
111
  defaultGroupingExpansionDepth: props.defaultGroupingExpansionDepth,
109
112
  isGroupExpandedByDefault: props.isGroupExpandedByDefault,
110
- groupingName: _gridRowGroupingUtils.ROW_GROUPING_STRATEGY
113
+ groupingName: _gridRowGroupingUtils.RowGroupingStrategy.Default
111
114
  });
112
115
  }
113
116
  return (0, _internals.updateRowTree)({
@@ -120,7 +123,7 @@ const useGridRowGroupingPreProcessors = (apiRef, props) => {
120
123
  previousTreeDepth: params.previousTreeDepths,
121
124
  defaultGroupingExpansionDepth: props.defaultGroupingExpansionDepth,
122
125
  isGroupExpandedByDefault: props.isGroupExpandedByDefault,
123
- groupingName: _gridRowGroupingUtils.ROW_GROUPING_STRATEGY
126
+ groupingName: _gridRowGroupingUtils.RowGroupingStrategy.Default
124
127
  });
125
128
  }, [apiRef, props.defaultGroupingExpansionDepth, props.isGroupExpandedByDefault]);
126
129
  const filterRows = React.useCallback(params => {
@@ -142,28 +145,20 @@ const useGridRowGroupingPreProcessors = (apiRef, props) => {
142
145
  });
143
146
  }, [apiRef]);
144
147
  (0, _internals.useGridRegisterPipeProcessor)(apiRef, 'hydrateColumns', updateGroupingColumn);
145
- (0, _internals.useGridRegisterStrategyProcessor)(apiRef, _gridRowGroupingUtils.ROW_GROUPING_STRATEGY, 'rowTreeCreation', createRowTreeForRowGrouping);
146
- (0, _internals.useGridRegisterStrategyProcessor)(apiRef, _gridRowGroupingUtils.ROW_GROUPING_STRATEGY, 'filtering', filterRows);
147
- (0, _internals.useGridRegisterStrategyProcessor)(apiRef, _gridRowGroupingUtils.ROW_GROUPING_STRATEGY, 'sorting', sortRows);
148
- (0, _internals.useGridRegisterStrategyProcessor)(apiRef, _gridRowGroupingUtils.ROW_GROUPING_STRATEGY, 'visibleRowsLookupCreation', _internals.getVisibleRowsLookup);
149
-
150
- /**
151
- * 1ST RENDER
152
- */
148
+ (0, _internals.useGridRegisterStrategyProcessor)(apiRef, _gridRowGroupingUtils.RowGroupingStrategy.Default, 'rowTreeCreation', createRowTreeForRowGrouping);
149
+ (0, _internals.useGridRegisterStrategyProcessor)(apiRef, _gridRowGroupingUtils.RowGroupingStrategy.Default, 'filtering', filterRows);
150
+ (0, _internals.useGridRegisterStrategyProcessor)(apiRef, _gridRowGroupingUtils.RowGroupingStrategy.Default, 'sorting', sortRows);
151
+ (0, _internals.useGridRegisterStrategyProcessor)(apiRef, _gridRowGroupingUtils.RowGroupingStrategy.Default, 'visibleRowsLookupCreation', _internals.getVisibleRowsLookup);
153
152
  (0, _xDataGridPro.useFirstRender)(() => {
154
- (0, _gridRowGroupingUtils.setStrategyAvailability)(apiRef, props.disableRowGrouping);
153
+ (0, _gridRowGroupingUtils.setStrategyAvailability)(apiRef, props.disableRowGrouping, props.unstable_dataSource);
155
154
  });
156
-
157
- /**
158
- * EFFECTS
159
- */
160
155
  const isFirstRender = React.useRef(true);
161
156
  React.useEffect(() => {
162
157
  if (!isFirstRender.current) {
163
- (0, _gridRowGroupingUtils.setStrategyAvailability)(apiRef, props.disableRowGrouping);
158
+ (0, _gridRowGroupingUtils.setStrategyAvailability)(apiRef, props.disableRowGrouping, props.unstable_dataSource);
164
159
  } else {
165
160
  isFirstRender.current = false;
166
161
  }
167
- }, [apiRef, props.disableRowGrouping]);
162
+ }, [apiRef, props.disableRowGrouping, props.unstable_dataSource]);
168
163
  };
169
164
  exports.useGridRowGroupingPreProcessors = useGridRowGroupingPreProcessors;
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid-premium v7.20.0
2
+ * @mui/x-data-grid-premium v7.22.0
3
3
  *
4
4
  * @license MUI X Commercial
5
5
  * This source code is licensed under the commercial license found in the
@@ -932,6 +932,7 @@ process.env.NODE_ENV !== "production" ? DataGridPremiumRaw.propTypes = {
932
932
  * Setting it to a lower value could be useful when using dynamic row height,
933
933
  * but might reduce performance when displaying a large number of rows.
934
934
  * @default 166
935
+ * @deprecated
935
936
  */
936
937
  rowPositionsDebounceMs: PropTypes.number,
937
938
  /**
@@ -1060,6 +1061,21 @@ process.env.NODE_ENV !== "production" ? DataGridPremiumRaw.propTypes = {
1060
1061
  get: PropTypes.func.isRequired,
1061
1062
  set: PropTypes.func.isRequired
1062
1063
  }),
1064
+ /**
1065
+ * Definition of the column rendered when the `unstable_listView` prop is enabled.
1066
+ */
1067
+ unstable_listColumn: PropTypes.shape({
1068
+ align: PropTypes.oneOf(['center', 'left', 'right']),
1069
+ cellClassName: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
1070
+ display: PropTypes.oneOf(['flex', 'text']),
1071
+ field: PropTypes.string.isRequired,
1072
+ renderCell: PropTypes.func
1073
+ }),
1074
+ /**
1075
+ * If `true`, displays the data in a list view.
1076
+ * Use in combination with `unstable_listColumn`.
1077
+ */
1078
+ unstable_listView: PropTypes.bool,
1063
1079
  unstable_onDataSourceError: PropTypes.func,
1064
1080
  /**
1065
1081
  * If `true`, the Data Grid will auto span the cells over the rows having the same value.
@@ -1,9 +1,10 @@
1
- import { useGridInitialization, useGridInitializeState, useGridClipboard, useGridColumnMenu, useGridColumns, columnsStateInitializer, useGridDensity, useGridCsvExport, useGridPrintExport, useGridFilter, filterStateInitializer, useGridFocus, useGridKeyboardNavigation, useGridPagination, paginationStateInitializer, useGridPreferencesPanel, useGridEditing, editingStateInitializer, useGridRows, useGridRowsPreProcessors, rowsStateInitializer, useGridRowsMeta, useGridParamsApi, useGridRowSelection, useGridSorting, sortingStateInitializer, useGridScroll, useGridEvents, dimensionsStateInitializer, useGridDimensions, useGridStatePersistence, useGridRowSelectionPreProcessors, columnMenuStateInitializer, densityStateInitializer, focusStateInitializer, preferencePanelStateInitializer, rowsMetaStateInitializer, rowSelectionStateInitializer, useGridColumnReorder, columnReorderStateInitializer, useGridColumnResize, columnResizeStateInitializer, useGridTreeData, useGridTreeDataPreProcessors, useGridColumnPinning, columnPinningStateInitializer, useGridColumnPinningPreProcessors, useGridDetailPanel, detailPanelStateInitializer, useGridDetailPanelPreProcessors, useGridInfiniteLoader, useGridColumnSpanning, useGridRowReorder, useGridRowReorderPreProcessors, useGridRowPinning, useGridRowPinningPreProcessors, rowPinningStateInitializer, useGridColumnGrouping, columnGroupsStateInitializer, useGridLazyLoader, useGridLazyLoaderPreProcessors, headerFilteringStateInitializer, useGridHeaderFiltering, virtualizationStateInitializer, useGridVirtualization, useGridDataSourceTreeDataPreProcessors, useGridDataSource, dataSourceStateInitializer, useGridRowSpanning, rowSpanningStateInitializer } from '@mui/x-data-grid-pro/internals';
1
+ import { useGridInitialization, useGridInitializeState, useGridClipboard, useGridColumnMenu, useGridColumns, columnsStateInitializer, useGridDensity, useGridCsvExport, useGridPrintExport, useGridFilter, filterStateInitializer, useGridFocus, useGridKeyboardNavigation, useGridPagination, paginationStateInitializer, useGridPreferencesPanel, useGridEditing, editingStateInitializer, useGridRows, useGridRowsPreProcessors, rowsStateInitializer, useGridRowsMeta, useGridParamsApi, useGridRowSelection, useGridSorting, sortingStateInitializer, useGridScroll, useGridEvents, dimensionsStateInitializer, useGridDimensions, useGridStatePersistence, useGridRowSelectionPreProcessors, columnMenuStateInitializer, densityStateInitializer, focusStateInitializer, preferencePanelStateInitializer, rowsMetaStateInitializer, rowSelectionStateInitializer, useGridColumnReorder, columnReorderStateInitializer, useGridColumnResize, columnResizeStateInitializer, useGridTreeData, useGridTreeDataPreProcessors, useGridColumnPinning, columnPinningStateInitializer, useGridColumnPinningPreProcessors, useGridDetailPanel, detailPanelStateInitializer, useGridDetailPanelPreProcessors, useGridInfiniteLoader, useGridColumnSpanning, useGridRowReorder, useGridRowReorderPreProcessors, useGridRowPinning, useGridRowPinningPreProcessors, rowPinningStateInitializer, useGridColumnGrouping, columnGroupsStateInitializer, useGridLazyLoader, useGridLazyLoaderPreProcessors, headerFilteringStateInitializer, useGridHeaderFiltering, virtualizationStateInitializer, useGridVirtualization, useGridDataSourceTreeDataPreProcessors, useGridDataSource, dataSourceStateInitializer, useGridRowSpanning, rowSpanningStateInitializer, useGridListView, listViewStateInitializer } from '@mui/x-data-grid-pro/internals';
2
2
  // Premium-only features
3
3
  import { useGridAggregation, aggregationStateInitializer } from "../hooks/features/aggregation/useGridAggregation.js";
4
4
  import { useGridAggregationPreProcessors } from "../hooks/features/aggregation/useGridAggregationPreProcessors.js";
5
5
  import { useGridRowGrouping, rowGroupingStateInitializer } from "../hooks/features/rowGrouping/useGridRowGrouping.js";
6
6
  import { useGridRowGroupingPreProcessors } from "../hooks/features/rowGrouping/useGridRowGroupingPreProcessors.js";
7
+ import { useGridDataSourceRowGroupingPreProcessors } from "../hooks/features/rowGrouping/useGridDataSourceRowGroupingPreProcessors.js";
7
8
  import { useGridExcelExport } from "../hooks/features/export/useGridExcelExport.js";
8
9
  import { cellSelectionStateInitializer, useGridCellSelection } from "../hooks/features/cellSelection/useGridCellSelection.js";
9
10
  import { useGridClipboardImport } from "../hooks/features/clipboard/useGridClipboardImport.js";
@@ -16,6 +17,7 @@ export const useDataGridPremiumComponent = (inputApiRef, props) => {
16
17
  useGridRowSelectionPreProcessors(apiRef, props);
17
18
  useGridRowReorderPreProcessors(apiRef, props);
18
19
  useGridRowGroupingPreProcessors(apiRef, props);
20
+ useGridDataSourceRowGroupingPreProcessors(apiRef, props);
19
21
  useGridTreeDataPreProcessors(apiRef, props);
20
22
  useGridDataSourceTreeDataPreProcessors(apiRef, props);
21
23
  useGridLazyLoaderPreProcessors(apiRef, props);
@@ -56,6 +58,7 @@ export const useDataGridPremiumComponent = (inputApiRef, props) => {
56
58
  useGridInitializeState(columnGroupsStateInitializer, apiRef, props);
57
59
  useGridInitializeState(virtualizationStateInitializer, apiRef, props);
58
60
  useGridInitializeState(dataSourceStateInitializer, apiRef, props);
61
+ useGridInitializeState(listViewStateInitializer, apiRef, props);
59
62
  useGridRowGrouping(apiRef, props);
60
63
  useGridHeaderFiltering(apiRef, props);
61
64
  useGridTreeData(apiRef, props);
@@ -68,7 +71,7 @@ export const useDataGridPremiumComponent = (inputApiRef, props) => {
68
71
  useGridColumns(apiRef, props);
69
72
  useGridRows(apiRef, props);
70
73
  useGridRowSpanning(apiRef, props);
71
- useGridParamsApi(apiRef);
74
+ useGridParamsApi(apiRef, props);
72
75
  useGridDetailPanel(apiRef, props);
73
76
  useGridColumnSpanning(apiRef);
74
77
  useGridColumnGrouping(apiRef, props);
@@ -97,5 +100,6 @@ export const useDataGridPremiumComponent = (inputApiRef, props) => {
97
100
  useGridStatePersistence(apiRef);
98
101
  useGridDataSource(apiRef, props);
99
102
  useGridVirtualization(apiRef, props);
103
+ useGridListView(apiRef, props);
100
104
  return apiRef;
101
105
  };