From 82e172dd3e82dd3dcbb7ece6445b21629d4a8885 Mon Sep 17 00:00:00 2001 From: Yousuf Ansari <141269047+YousufFFFF@users.noreply.github.com> Date: Sun, 18 Jan 2026 03:03:33 +0530 Subject: [PATCH] fix(mixed-timeseries): prevent duplicate legend entries (#37217) (cherry picked from commit a77c2d550c659e3020211e353296ccb891d927d3) --- .../src/MixedTimeseries/transformProps.ts | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/MixedTimeseries/transformProps.ts b/superset-frontend/plugins/plugin-chart-echarts/src/MixedTimeseries/transformProps.ts index 28c50d99616..3b250597d61 100644 --- a/superset-frontend/plugins/plugin-chart-echarts/src/MixedTimeseries/transformProps.ts +++ b/superset-frontend/plugins/plugin-chart-echarts/src/MixedTimeseries/transformProps.ts @@ -242,8 +242,10 @@ export default function transformProps( }, ); - const MetricDisplayNameA = getMetricDisplayName(metrics[0], verboseMap); - const MetricDisplayNameB = getMetricDisplayName(metricsB[0], verboseMap); + const MetricDisplayNameA: string = + getMetricDisplayName(metrics[0], verboseMap) || ''; + const MetricDisplayNameB: string = + getMetricDisplayName(metricsB[0], verboseMap) || ''; const dataTypes = getColtypesMapping(queriesData[0]); const xAxisDataType = dataTypes?.[xAxisLabel] ?? dataTypes?.[xAxisOrig]; @@ -398,10 +400,12 @@ export default function transformProps( if (groupby.length > 0) { // When we have groupby, format as "metric, dimension" - const metricPart = showQueryIdentifiers + const metricPart: string = showQueryIdentifiers ? `${MetricDisplayNameA} (Query A)` : MetricDisplayNameA; - displayName = `${metricPart}, ${entryName}`; + displayName = entryName.includes(metricPart) + ? entryName + : `${metricPart}, ${entryName}`; } else { // When no groupby, format as just the entry name with optional query identifier displayName = showQueryIdentifiers ? `${entryName} (Query A)` : entryName; @@ -469,10 +473,12 @@ export default function transformProps( if (groupbyB.length > 0) { // When we have groupby, format as "metric, dimension" - const metricPart = showQueryIdentifiers + const metricPart: string = showQueryIdentifiers ? `${MetricDisplayNameB} (Query B)` : MetricDisplayNameB; - displayName = `${metricPart}, ${entryName}`; + displayName = entryName.includes(metricPart) + ? entryName + : `${metricPart}, ${entryName}`; } else { // When no groupby, format as just the entry name with optional query identifier displayName = showQueryIdentifiers ? `${entryName} (Query B)` : entryName;