You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by mi...@apache.org on 2024/06/13 12:10:41 UTC
(superset) 02/03: fix(mixed-timeseries-plugin): Second query stacks stacked on top of first query series (#29119)
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 <ka...@gmail.com>
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',
+ }),
+ ]),
+ }),
+ }),
+ );
+});