This is an automated email from the ASF dual-hosted git repository.

michaelsmolina pushed a commit to branch 4.0
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 60f28e11bc69e0b39e05537eba3715207e005b1e
Author: Kamil Gabryjelski <[email protected]>
AuthorDate: Mon Jun 10 12:22:35 2024 +0200

    fix(mixed-timeseries-plugin): Second query stacks stacked on top of first 
query series (#29119)
    
    (cherry picked from commit 68fd1895865a7c7fefe368db05f6fb22c8f1c048)
---
 .../src/MixedTimeseries/transformProps.ts          |   2 +
 .../src/Timeseries/transformers.ts                 |   5 +
 .../test/MixedTimeseries/transformProps.test.ts    | 161 +++++++++++++++++++++
 3 files changed, 168 insertions(+)

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 7488d49dba..a0aa94f361 100644
--- 
a/superset-frontend/plugins/plugin-chart-echarts/src/MixedTimeseries/transformProps.ts
+++ 
b/superset-frontend/plugins/plugin-chart-echarts/src/MixedTimeseries/transformProps.ts
@@ -388,6 +388,7 @@ export default function transformProps(
         seriesType,
         showValue,
         stack: Boolean(stack),
+        stackIdSuffix: '\na',
         yAxisIndex,
         filterState,
         seriesKey: entry.name,
@@ -434,6 +435,7 @@ export default function transformProps(
         seriesType: seriesTypeB,
         showValue: showValueB,
         stack: Boolean(stackB),
+        stackIdSuffix: '\nb',
         yAxisIndex: yAxisIndexB,
         filterState,
         seriesKey: primarySeries.has(entry.name as string)
diff --git 
a/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/transformers.ts 
b/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/transformers.ts
index 8944dc66fa..b4aded89bf 100644
--- 
a/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/transformers.ts
+++ 
b/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/transformers.ts
@@ -151,6 +151,7 @@ export function transformSeries(
     areaOpacity?: number;
     seriesType?: EchartsTimeseriesSeriesType;
     stack?: StackType;
+    stackIdSuffix?: string;
     yAxisIndex?: number;
     showValue?: boolean;
     onlyTotal?: boolean;
@@ -178,6 +179,7 @@ export function transformSeries(
     areaOpacity = 1,
     seriesType,
     stack,
+    stackIdSuffix,
     yAxisIndex = 0,
     showValue,
     onlyTotal,
@@ -223,6 +225,9 @@ export function transformSeries(
   } else if (stack && isTrend) {
     stackId = forecastSeries.type;
   }
+  if (stackId && stackIdSuffix) {
+    stackId += stackIdSuffix;
+  }
   let plotType;
   if (
     !isConfidenceBand &&
diff --git 
a/superset-frontend/plugins/plugin-chart-echarts/test/MixedTimeseries/transformProps.test.ts
 
b/superset-frontend/plugins/plugin-chart-echarts/test/MixedTimeseries/transformProps.test.ts
new file mode 100644
index 0000000000..422eb6a480
--- /dev/null
+++ 
b/superset-frontend/plugins/plugin-chart-echarts/test/MixedTimeseries/transformProps.test.ts
@@ -0,0 +1,161 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { ChartProps, supersetTheme } from '@superset-ui/core';
+import {
+  LegendOrientation,
+  LegendType,
+  EchartsTimeseriesSeriesType,
+} from '@superset-ui/plugin-chart-echarts';
+import transformProps from '../../src/MixedTimeseries/transformProps';
+import {
+  EchartsMixedTimeseriesFormData,
+  EchartsMixedTimeseriesProps,
+} from '../../src/MixedTimeseries/types';
+
+const formData: EchartsMixedTimeseriesFormData = {
+  annotationLayers: [],
+  area: false,
+  areaB: false,
+  legendMargin: null,
+  logAxis: false,
+  logAxisSecondary: false,
+  markerEnabled: false,
+  markerEnabledB: false,
+  markerSize: 0,
+  markerSizeB: 0,
+  minorSplitLine: false,
+  minorTicks: false,
+  opacity: 0,
+  opacityB: 0,
+  orderDesc: false,
+  orderDescB: false,
+  richTooltip: false,
+  rowLimit: 0,
+  rowLimitB: 0,
+  legendOrientation: LegendOrientation.Top,
+  legendType: LegendType.Scroll,
+  showLegend: false,
+  showValue: false,
+  showValueB: false,
+  stack: true,
+  stackB: true,
+  truncateYAxis: false,
+  truncateYAxisSecondary: false,
+  xAxisLabelRotation: 0,
+  xAxisTitle: '',
+  xAxisTitleMargin: 0,
+  yAxisBounds: [undefined, undefined],
+  yAxisBoundsSecondary: [undefined, undefined],
+  yAxisTitle: '',
+  yAxisTitleMargin: 0,
+  yAxisTitlePosition: '',
+  yAxisTitleSecondary: '',
+  zoomable: false,
+  colorScheme: 'bnbColors',
+  datasource: '3__table',
+  x_axis: 'ds',
+  metrics: ['sum__num'],
+  metricsB: ['sum__num'],
+  groupby: ['gender'],
+  groupbyB: ['gender'],
+  seriesType: EchartsTimeseriesSeriesType.Line,
+  seriesTypeB: EchartsTimeseriesSeriesType.Bar,
+  viz_type: 'mixed_timeseries',
+  forecastEnabled: false,
+  forecastPeriods: [],
+  forecastInterval: 0,
+  forecastSeasonalityDaily: 0,
+};
+
+const queriesData = [
+  {
+    data: [
+      { boy: 1, girl: 2, ds: 599616000000 },
+      { boy: 3, girl: 4, ds: 599916000000 },
+    ],
+    label_map: {
+      ds: ['ds'],
+      boy: ['boy'],
+      girl: ['girl'],
+    },
+  },
+  {
+    data: [
+      { boy: 1, girl: 2, ds: 599616000000 },
+      { boy: 3, girl: 4, ds: 599916000000 },
+    ],
+    label_map: {
+      ds: ['ds'],
+      boy: ['boy'],
+      girl: ['girl'],
+    },
+  },
+];
+
+const chartPropsConfig = {
+  formData,
+  width: 800,
+  height: 600,
+  queriesData,
+  theme: supersetTheme,
+};
+
+it('should transform chart props for viz', () => {
+  const chartProps = new ChartProps(chartPropsConfig);
+  expect(transformProps(chartProps as EchartsMixedTimeseriesProps)).toEqual(
+    expect.objectContaining({
+      echartOptions: expect.objectContaining({
+        series: expect.arrayContaining([
+          expect.objectContaining({
+            data: [
+              [599616000000, 1],
+              [599916000000, 3],
+            ],
+            id: 'boy',
+            stack: 'obs\na',
+          }),
+          expect.objectContaining({
+            data: [
+              [599616000000, 2],
+              [599916000000, 4],
+            ],
+            id: 'girl',
+            stack: 'obs\na',
+          }),
+          expect.objectContaining({
+            data: [
+              [599616000000, 1],
+              [599916000000, 3],
+            ],
+            id: 'boy (1)',
+            stack: 'obs\nb',
+          }),
+          expect.objectContaining({
+            data: [
+              [599616000000, 2],
+              [599916000000, 4],
+            ],
+            id: 'girl (1)',
+            stack: 'obs\nb',
+          }),
+        ]),
+      }),
+    }),
+  );
+});

Reply via email to