diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/transformProps.ts b/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/transformProps.ts index 4e07a8410df..9fd53941d92 100644 --- a/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/transformProps.ts +++ b/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/transformProps.ts @@ -47,7 +47,10 @@ import { isDerivedSeries, } from '@superset-ui/chart-controls'; import type { EChartsCoreOption } from 'echarts/core'; -import type { LineStyleOption } from 'echarts/types/src/util/types'; +import type { + LineStyleOption, + CallbackDataParams, +} from 'echarts/types/src/util/types'; import type { SeriesOption } from 'echarts'; import { EchartsTimeseriesChartProps, @@ -575,16 +578,31 @@ export default function transformProps( const xValue: number = richTooltip ? params[0].value[xIndex] : params.value[xIndex]; - const forecastValue: any[] = richTooltip ? params : [params]; + const forecastValue: CallbackDataParams[] = richTooltip + ? params + : [params]; const sortedKeys = extractTooltipKeys( forecastValue, yIndex, richTooltip, tooltipSortByMetric, ); + const filteredForecastValue = forecastValue.filter( + (item: CallbackDataParams) => + !annotationLayers.some( + (annotation: AnnotationLayer) => + item.seriesName === annotation.name, + ), + ); const forecastValues: Record = extractForecastValuesFromTooltipParams(forecastValue, isHorizontal); + const filteredForecastValues: Record = + extractForecastValuesFromTooltipParams( + filteredForecastValue, + isHorizontal, + ); + const isForecast = Object.values(forecastValues).some( value => value.forecastTrend || value.forecastLower || value.forecastUpper, @@ -595,7 +613,7 @@ export default function transformProps( : (getCustomFormatter(customFormatters, metrics) ?? defaultFormatter); const rows: string[][] = []; - const total = Object.values(forecastValues).reduce( + const total = Object.values(filteredForecastValues).reduce( (acc, value) => value.observation !== undefined ? acc + value.observation : acc, 0, @@ -617,7 +635,16 @@ export default function transformProps( seriesName: key, formatter, }); - if (showPercentage && value.observation !== undefined) { + + const annotationRow = annotationLayers.some( + item => item.name === key, + ); + + if ( + showPercentage && + value.observation !== undefined && + !annotationRow + ) { row.push( percentFormatter.format(value.observation / (total || 1)), );