fix(plugin-chart-table): Don't render redundant items in column config when time comparison is enabled (#33126)

This commit is contained in:
Kamil Gabryjelski
2025-04-14 23:08:15 +02:00
committed by GitHub
parent 2233c02720
commit 8cb71b8d3b
3 changed files with 54 additions and 30 deletions

View File

@@ -37,15 +37,17 @@ import {
import {
ensureIsArray,
GenericDataType,
getMetricLabel,
isAdhocColumn,
isPhysicalColumn,
QueryFormColumn,
QueryFormMetric,
QueryMode,
SMART_DATE_ID,
t,
} from '@superset-ui/core';
import { isEmpty } from 'lodash';
import { isEmpty, last } from 'lodash';
import { PAGE_SIZE_OPTIONS } from './consts';
import { ColorSchemeEnum } from './types';
@@ -486,51 +488,69 @@ const config: ControlPanelConfig = {
return true;
},
mapStateToProps(explore, _, chart) {
const timeComparisonStatus = !isEmpty(
explore?.controls?.time_compare?.value,
);
const timeComparisonValue =
explore?.controls?.time_compare?.value;
const { colnames: _colnames, coltypes: _coltypes } =
chart?.queriesResponse?.[0] ?? {};
let colnames: string[] = _colnames || [];
let coltypes: GenericDataType[] = _coltypes || [];
const childColumnMap: Record<string, boolean> = {};
const timeComparisonColumnMap: Record<string, boolean> = {};
if (timeComparisonStatus) {
if (!isEmpty(timeComparisonValue)) {
/**
* Replace numeric columns with sets of comparison columns.
*/
const updatedColnames: string[] = [];
const updatedColtypes: GenericDataType[] = [];
colnames.forEach((colname, index) => {
if (coltypes[index] === GenericDataType.Numeric) {
const comparisonColumns =
generateComparisonColumns(colname);
comparisonColumns.forEach((name, idx) => {
updatedColnames.push(name);
updatedColtypes.push(
...generateComparisonColumnTypes(4),
);
if (idx === 0 && name.startsWith('Main ')) {
childColumnMap[name] = false;
} else {
childColumnMap[name] = true;
}
});
} else {
updatedColnames.push(colname);
updatedColtypes.push(coltypes[index]);
childColumnMap[colname] = false;
}
});
colnames
.filter(
colname =>
last(colname.split('__')) !== timeComparisonValue,
)
.forEach((colname, index) => {
if (
explore.form_data.metrics?.some(
metric => getMetricLabel(metric) === colname,
) ||
explore.form_data.percent_metrics?.some(
(metric: QueryFormMetric) =>
getMetricLabel(metric) === colname,
)
) {
const comparisonColumns =
generateComparisonColumns(colname);
comparisonColumns.forEach((name, idx) => {
updatedColnames.push(name);
updatedColtypes.push(
...generateComparisonColumnTypes(4),
);
timeComparisonColumnMap[name] = true;
if (idx === 0 && name.startsWith('Main ')) {
childColumnMap[name] = false;
} else {
childColumnMap[name] = true;
}
});
} else {
updatedColnames.push(colname);
updatedColtypes.push(coltypes[index]);
childColumnMap[colname] = false;
timeComparisonColumnMap[colname] = false;
}
});
colnames = updatedColnames;
coltypes = updatedColtypes;
}
return {
columnsPropsObject: { colnames, coltypes, childColumnMap },
columnsPropsObject: {
colnames,
coltypes,
childColumnMap,
timeComparisonColumnMap,
},
};
},
},