From 12cfeaa1d182fe70015f7babd0d95417eced8907 Mon Sep 17 00:00:00 2001 From: Aiello Chan Date: Sat, 11 Jan 2025 20:46:43 +0800 Subject: [PATCH 1/2] feat(radar): Radar series tooltip support dimensionIndex --- src/component/tooltip/TooltipView.ts | 1 + src/core/echarts.ts | 6 ++++-- src/util/types.ts | 5 +++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/component/tooltip/TooltipView.ts b/src/component/tooltip/TooltipView.ts index d5bf5d8f21..63d879b9e8 100644 --- a/src/component/tooltip/TooltipView.ts +++ b/src/component/tooltip/TooltipView.ts @@ -681,6 +681,7 @@ class TooltipView extends ComponentView { params.marker = markupStyleCreator.makeTooltipMarker( 'item', convertToColorString(params.color), renderMode ); + params.dimensionIndex = dispatcher.__dimIdx; const seriesTooltipResult = normalizeTooltipFormatResult( dataModel.formatTooltip(dataIndex, false, dataType) diff --git a/src/core/echarts.ts b/src/core/echarts.ts index 190e385634..44a8ea2cfb 100644 --- a/src/core/echarts.ts +++ b/src/core/echarts.ts @@ -1067,14 +1067,15 @@ class ECharts extends Eventful { const handler = (e: ElementEvent) => { const ecModel = this.getModel(); const el = e.target; + let dispatcher: ECElement | undefined; let params: ECElementEvent; const isGlobalOut = eveName === 'globalout'; // no e.target when 'globalout'. if (isGlobalOut) { params = {} as ECElementEvent; } - else { - el && findEventDispatcher(el, (parent) => { + else if (el) { + dispatcher = findEventDispatcher(el, (parent) => { const ecData = getECData(parent); if (ecData && ecData.dataIndex != null) { const dataModel = ecData.dataModel || ecModel.getSeriesByIndex(ecData.seriesIndex); @@ -1131,6 +1132,7 @@ class ECharts extends Eventful { params.event = e; params.type = eveName; + params.dimensionIndex = dispatcher ? dispatcher.__dimIdx : undefined; (this._$eventProcessor as ECEventProcessor).eventInfo = { targetEl: el, diff --git a/src/util/types.ts b/src/util/types.ts index 1d085c198f..a1ae9d582b 100644 --- a/src/util/types.ts +++ b/src/util/types.ts @@ -137,6 +137,11 @@ export interface ECElement extends Element { * Force disable morphing */ disableMorphing?: boolean + + /** + * From RadarSymbol + */ + __dimIdx?: number; } export interface DataHost { From 460fe5e5fd3acdb337844533b0e1624afe5a0482 Mon Sep 17 00:00:00 2001 From: Aiello Chan Date: Mon, 13 Jan 2025 19:46:20 +0800 Subject: [PATCH 2/2] feat(radar): Move additional data to eventData --- src/chart/radar/RadarView.ts | 9 ++++++++- src/component/tooltip/TooltipView.ts | 3 +-- src/core/echarts.ts | 4 +--- src/model/mixin/dataFormat.ts | 7 +++++-- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/chart/radar/RadarView.ts b/src/chart/radar/RadarView.ts index e51130d4bb..2d402a17ae 100644 --- a/src/chart/radar/RadarView.ts +++ b/src/chart/radar/RadarView.ts @@ -31,6 +31,7 @@ import { VectorArray } from 'zrender/src/core/vector'; import { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle'; import ZRImage from 'zrender/src/graphic/Image'; import { saveOldStyle } from '../../animation/basicTransition'; +import { getECData } from '../../util/innerStore'; type RadarSymbol = ReturnType & { __dimIdx: number @@ -241,9 +242,10 @@ class RadarView extends ChartView { symbolPath.style.strokeNoScale = true; } + const dimensionIndex = data.getDimensionIndex(symbolPath.__dimIdx); const pathEmphasisState = symbolPath.ensureState('emphasis'); pathEmphasisState.style = zrUtil.clone(itemHoverStyle); - let defaultText = data.getStore().get(data.getDimensionIndex(symbolPath.__dimIdx), idx); + let defaultText = data.getStore().get(dimensionIndex, idx); (defaultText == null || isNaN(defaultText as number)) && (defaultText = ''); setLabelStyle( @@ -257,6 +259,11 @@ class RadarView extends ChartView { defaultOpacity: itemStyle.opacity } ); + + // bind additional data to eventData + getECData(symbolPath).eventData = { + dimensionIndex, + }; }); toggleHoverEmphasis( diff --git a/src/component/tooltip/TooltipView.ts b/src/component/tooltip/TooltipView.ts index 63d879b9e8..b7fc92aade 100644 --- a/src/component/tooltip/TooltipView.ts +++ b/src/component/tooltip/TooltipView.ts @@ -674,14 +674,13 @@ class TooltipView extends ComponentView { return; } - const params = dataModel.getDataParams(dataIndex, dataType); + const params = dataModel.getDataParams(dataIndex, dataType, dispatcher); const markupStyleCreator = new TooltipMarkupStyleCreator(); // Pre-create marker style for makers. Users can assemble richText // text in `formatter` callback and use those markers style. params.marker = markupStyleCreator.makeTooltipMarker( 'item', convertToColorString(params.color), renderMode ); - params.dimensionIndex = dispatcher.__dimIdx; const seriesTooltipResult = normalizeTooltipFormatResult( dataModel.formatTooltip(dataIndex, false, dataType) diff --git a/src/core/echarts.ts b/src/core/echarts.ts index 44a8ea2cfb..6499935b7c 100644 --- a/src/core/echarts.ts +++ b/src/core/echarts.ts @@ -1067,7 +1067,6 @@ class ECharts extends Eventful { const handler = (e: ElementEvent) => { const ecModel = this.getModel(); const el = e.target; - let dispatcher: ECElement | undefined; let params: ECElementEvent; const isGlobalOut = eveName === 'globalout'; // no e.target when 'globalout'. @@ -1075,7 +1074,7 @@ class ECharts extends Eventful { params = {} as ECElementEvent; } else if (el) { - dispatcher = findEventDispatcher(el, (parent) => { + findEventDispatcher(el, (parent) => { const ecData = getECData(parent); if (ecData && ecData.dataIndex != null) { const dataModel = ecData.dataModel || ecModel.getSeriesByIndex(ecData.seriesIndex); @@ -1132,7 +1131,6 @@ class ECharts extends Eventful { params.event = e; params.type = eveName; - params.dimensionIndex = dispatcher ? dispatcher.__dimIdx : undefined; (this._$eventProcessor as ECEventProcessor).eventInfo = { targetEl: el, diff --git a/src/model/mixin/dataFormat.ts b/src/model/mixin/dataFormat.ts index 2c39816235..38860cf9de 100644 --- a/src/model/mixin/dataFormat.ts +++ b/src/model/mixin/dataFormat.ts @@ -31,7 +31,8 @@ import { ComponentMainType, ComponentSubType, DimensionLoose, - InterpolatableValue + InterpolatableValue, + ECElement } from '../../util/types'; import GlobalModel from '../Global'; import { TooltipMarkupBlockFragment } from '../../component/tooltip/tooltipMarkup'; @@ -57,7 +58,8 @@ export class DataFormatMixin { */ getDataParams( dataIndex: number, - dataType?: SeriesDataType + dataType?: SeriesDataType, + el?: ECElement ): CallbackDataParams { const data = this.getData(dataType); @@ -88,6 +90,7 @@ export class DataFormatMixin { color: color, borderColor: borderColor, dimensionNames: userOutput ? userOutput.fullDimensions : null, + dimensionIndex: el ? el.__dimIdx : null, encode: userOutput ? userOutput.encode : null, // Param name list for mapping `a`, `b`, `c`, `d`, `e`