From 78ee60e22788395d5b1989e0cd92136725dd5cf0 Mon Sep 17 00:00:00 2001 From: Kamil Gabryjelski Date: Mon, 13 Mar 2023 14:32:49 +0100 Subject: [PATCH] fix(dashboard): Cross filters with time shifted series (#23347) --- .../src/Timeseries/transformProps.ts | 15 ++++++++- .../src/Timeseries/types.ts | 1 + .../test/Timeseries/transformProps.test.ts | 31 +++++++++++++++++++ 3 files changed, 46 insertions(+), 1 deletion(-) 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 a13031b01b..a853c4b869 100644 --- a/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/transformProps.ts +++ b/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/transformProps.ts @@ -107,8 +107,9 @@ export default function transformProps( } = chartProps; const { verboseMap = {} } = datasource; const [queryData] = queriesData; - const { data = [], label_map: labelMap } = + const { data = [], label_map = {} } = queryData as TimeseriesChartDataResponseResult; + const dataTypes = getColtypesMapping(queryData); const annotationData = getAnnotationData(chartProps); @@ -136,6 +137,7 @@ export default function transformProps( showValue, sliceId, timeGrainSqla, + timeCompare, stack, tooltipTimeFormat, tooltipSortByMetric, @@ -154,6 +156,17 @@ export default function transformProps( }: EchartsTimeseriesFormData = { ...DEFAULT_FORM_DATA, ...formData }; const refs: Refs = {}; + const labelMap = Object.entries(label_map).reduce((acc, entry) => { + if ( + entry[1].length > groupby.length && + Array.isArray(timeCompare) && + timeCompare.includes(entry[1][0]) + ) { + entry[1].shift(); + } + return { ...acc, [entry[0]]: entry[1] }; + }, {}); + const colorScale = CategoricalColorNamespace.getScale(colorScheme as string); const rebasedData = rebaseForecastDatum(data, verboseMap); let xAxisLabel = getXAxisLabel(chartProps.rawFormData) as string; diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/types.ts b/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/types.ts index 56527ebd63..bca13a0584 100644 --- a/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/types.ts +++ b/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/types.ts @@ -71,6 +71,7 @@ export type EchartsTimeseriesFormData = QueryFormData & { rowLimit: number; seriesType: EchartsTimeseriesSeriesType; stack: StackType; + timeCompare?: string[]; tooltipTimeFormat?: string; truncateYAxis: boolean; yAxisFormat?: string; diff --git a/superset-frontend/plugins/plugin-chart-echarts/test/Timeseries/transformProps.test.ts b/superset-frontend/plugins/plugin-chart-echarts/test/Timeseries/transformProps.test.ts index b185c3a767..63ca50449e 100644 --- a/superset-frontend/plugins/plugin-chart-echarts/test/Timeseries/transformProps.test.ts +++ b/superset-frontend/plugins/plugin-chart-echarts/test/Timeseries/transformProps.test.ts @@ -497,4 +497,35 @@ describe('Does transformProps transform series correctly', () => { }); }); }); + + it('should remove time shift labels from label_map', () => { + const updatedChartPropsConfig = { + ...chartPropsConfig, + formData: { + ...formData, + timeCompare: ['1 year ago'], + }, + queriesData: [ + { + ...queriesData[0], + label_map: { + '1 year ago, foo1, bar1': ['1 year ago', 'foo1', 'bar1'], + '1 year ago, foo2, bar2': ['1 year ago', 'foo2', 'bar2'], + 'foo1, bar1': ['foo1', 'bar1'], + 'foo2, bar2': ['foo2', 'bar2'], + }, + }, + ], + }; + const chartProps = new ChartProps(updatedChartPropsConfig); + const transformedProps = transformProps( + chartProps as EchartsTimeseriesChartProps, + ); + expect(transformedProps.labelMap).toEqual({ + '1 year ago, foo1, bar1': ['foo1', 'bar1'], + '1 year ago, foo2, bar2': ['foo2', 'bar2'], + 'foo1, bar1': ['foo1', 'bar1'], + 'foo2, bar2': ['foo2', 'bar2'], + }); + }); });