fix: Time shifts calculation for ECharts plugins (#28432)

This commit is contained in:
Michael S. Molina
2024-05-15 08:11:52 -03:00
committed by GitHub
parent f0b7b95d05
commit 821c7d7f2c
8 changed files with 348 additions and 164 deletions

View File

@@ -45,9 +45,10 @@ import {
extractExtraMetrics,
getOriginalSeries,
isDerivedSeries,
getTimeOffset,
} from '@superset-ui/chart-controls';
import { EChartsCoreOption, SeriesOption } from 'echarts';
import { ZRLineType } from 'echarts/types/src/util/types';
import { LineStyleOption } from 'echarts/types/src/util/types';
import {
EchartsTimeseriesChartProps,
EchartsTimeseriesFormData,
@@ -273,10 +274,22 @@ export default function transformProps(
const array = ensureIsArray(chartProps.rawFormData?.time_compare);
const inverted = invert(verboseMap);
const offsetLineWidths = {};
rawSeries.forEach(entry => {
const lineStyle = isDerivedSeries(entry, chartProps.rawFormData)
? { type: 'dashed' as ZRLineType }
: {};
const derivedSeries = isDerivedSeries(entry, chartProps.rawFormData);
const lineStyle: LineStyleOption = {};
if (derivedSeries) {
const offset = getTimeOffset(
entry,
ensureIsArray(chartProps.rawFormData?.time_compare),
)!;
if (!offsetLineWidths[offset]) {
offsetLineWidths[offset] = Object.keys(offsetLineWidths).length + 1;
}
lineStyle.type = 'dashed';
lineStyle.width = offsetLineWidths[offset];
}
const entryName = String(entry.name || '');
const seriesName = inverted[entryName] || entryName;
@@ -288,6 +301,7 @@ export default function transformProps(
colorScaleKey,
{
area,
connectNulls: derivedSeries,
filterState,
seriesContexts,
markerEnabled,

View File

@@ -143,6 +143,7 @@ export function transformSeries(
colorScaleKey: string,
opts: {
area?: boolean;
connectNulls?: boolean;
filterState?: FilterState;
seriesContexts?: { [key: string]: ForecastSeriesEnum[] };
markerEnabled?: boolean;
@@ -170,6 +171,7 @@ export function transformSeries(
const { name } = series;
const {
area,
connectNulls,
filterState,
seriesContexts = {},
markerEnabled,
@@ -268,6 +270,7 @@ export function transformSeries(
: { ...opts.lineStyle, opacity };
return {
...series,
connectNulls,
queryIndex,
yAxisIndex,
name: forecastSeries.name,