diff --git a/superset-frontend/src/cccs-viz/plugins/plugin-chart-cccs-grid/src/plugin/controlPanel.tsx b/superset-frontend/src/cccs-viz/plugins/plugin-chart-cccs-grid/src/plugin/controlPanel.tsx
index d69a73c510610..65530515d9f8b 100644
--- a/superset-frontend/src/cccs-viz/plugins/plugin-chart-cccs-grid/src/plugin/controlPanel.tsx
+++ b/superset-frontend/src/cccs-viz/plugins/plugin-chart-cccs-grid/src/plugin/controlPanel.tsx
@@ -229,7 +229,7 @@ const config: ControlPanelConfig = {
return newState;
},
- rerender: ['metrics', 'percent_metrics', ],
+ rerender: ['metrics', 'percent_metrics', 'default_group_by',],
},
},
],
@@ -329,7 +329,7 @@ const config: ControlPanelConfig = {
: [];
return newState;
},
- rerender: ['principalColumns'],
+ rerender: ['principalColumns', 'default_group_by'],
visibility: isRawMode,
canCopy: true,
}
@@ -595,6 +595,73 @@ config.controlPanelSections.push({
},
},
],
+ [
+ {
+ name: 'default_group_by',
+ config: {
+ type: 'SelectControl',
+ label: t('Default columns for row grouping'),
+ description: t(
+ 'Preselect a set of columns for row grouping in the grid.',
+ ),
+ multi: true,
+ freeForm: true,
+ allowAll: true,
+ default: [],
+ canSelectAll: true,
+ renderTrigger: true,
+ optionRenderer: (c: ColumnMeta) => (
+ // eslint-disable-next-line react/react-in-jsx-scope
+
+ ),
+ // eslint-disable-next-line react/react-in-jsx-scope
+ valueRenderer: (c: ColumnMeta) => (
+ // eslint-disable-next-line react/react-in-jsx-scope
+
+ ),
+ valueKey: 'column_name',
+ mapStateToProps: (
+ state: ControlPanelState,
+ controlState: ControlState,
+ ) => {
+ const { controls } = state;
+ const originalMapStateToProps = isRawMode({ controls }) ?
+ sharedControls?.columns?.mapStateToProps :
+ sharedControls?.groupby?.mapStateToProps;
+ const newState =
+ originalMapStateToProps?.(state, controlState) ?? {};
+ const choices = isRawMode({ controls })
+ ? controls?.columns?.value
+ : controls?.groupby?.value;
+ newState.options = newState.options.filter(
+ (o: { column_name: string }) =>
+ ensureIsArray(choices).includes(o.column_name),
+ );
+ const invalidOptions = ensureIsArray(
+ controlState.value,
+ ).filter(c => !ensureIsArray(choices).includes(c));
+ newState.externalValidationErrors =
+ invalidOptions.length > 0
+ ? invalidOptions.length > 1
+ ? [
+ `'${invalidOptions.join(', ')}'${t(
+ ' are not valid options',
+ )}`,
+ ]
+ : [
+ `'${invalidOptions}'${t(
+ ' is not a valid option',
+ )}`,
+ ]
+ : [];
+ return newState;
+ },
+ visibility: ({ controls }) =>
+ Boolean(controls?.enable_grouping?.value),
+ canCopy: true,
+ },
+ }
+ ],
[
{
name: 'enable_row_numbers',
diff --git a/superset-frontend/src/cccs-viz/plugins/plugin-chart-cccs-grid/src/plugin/transformProps.ts b/superset-frontend/src/cccs-viz/plugins/plugin-chart-cccs-grid/src/plugin/transformProps.ts
index 34899e94699ce..b9123379ff839 100644
--- a/superset-frontend/src/cccs-viz/plugins/plugin-chart-cccs-grid/src/plugin/transformProps.ts
+++ b/superset-frontend/src/cccs-viz/plugins/plugin-chart-cccs-grid/src/plugin/transformProps.ts
@@ -84,6 +84,7 @@ export default function transformProps(chartProps: CccsGridChartProps) {
column_state,
enable_row_numbers,
jump_action_configs,
+ default_group_by,
}: CccsGridQueryFormData = { ...DEFAULT_FORM_DATA, ...formData };
const data = queriesData[0].data as TimeseriesDataRecord[];
const agGridLicenseKey = queriesData[0].agGridLicenseKey as String;
@@ -232,6 +233,11 @@ export default function transformProps(chartProps: CccsGridChartProps) {
const isSortable = true;
const enableRowGroup = true;
const columnDescription = columnDescriptionMap[column];
+ const rowGroupIndex = default_group_by.findIndex((element: any) => {
+ return element === column
+ });
+ const rowGroup = rowGroupIndex >= 0
+ const hide = rowGroup;
return {
field: column,
headerName: columnHeader,
@@ -240,6 +246,9 @@ export default function transformProps(chartProps: CccsGridChartProps) {
sort: sortDirection,
sortIndex,
enableRowGroup,
+ rowGroup,
+ hide,
+ rowGroupIndex,
getQuickFilterText: (params: any) => valueFormatter(params),
headerTooltip: columnDescription,
};
@@ -261,12 +270,22 @@ export default function transformProps(chartProps: CccsGridChartProps) {
const isSortable = true;
const enableRowGroup = true;
const columnDescription = columnDescriptionMap[column];
+ const rowGroupIndex = default_group_by.findIndex((element: any) => {
+ return element === column
+ });
+ const initialRowGroupIndex = rowGroupIndex;
+ const rowGroup = (rowGroupIndex >= 0)
+ const hide = rowGroup;
return {
field: column,
headerName: columnHeader,
cellRenderer,
sortable: isSortable,
enableRowGroup,
+ rowGroup,
+ rowGroupIndex,
+ initialRowGroupIndex,
+ hide,
getQuickFilterText: (params: any) => valueFormatter(params),
headerTooltip: columnDescription,
};