From 21c9e3bbd943ebf1e9b75237c7e089b7a28c43f2 Mon Sep 17 00:00:00 2001 From: umutt Date: Fri, 14 Mar 2025 12:15:11 +0300 Subject: [PATCH] fix 20813 for custom charts added an option to use legend by category names instead by series. --- src/chart/custom/CustomSeries.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/chart/custom/CustomSeries.ts b/src/chart/custom/CustomSeries.ts index 29014e1a6a..15805e5951 100644 --- a/src/chart/custom/CustomSeries.ts +++ b/src/chart/custom/CustomSeries.ts @@ -74,6 +74,9 @@ import { import { TransformProp } from 'zrender/src/core/Transformable'; import { ElementKeyframeAnimationOption } from '../../animation/customGraphicKeyframeAnimation'; +import * as zrUtil from 'zrender/src/core/util'; +import LegendVisualProvider from '../../visual/LegendVisualProvider'; + export type CustomExtraElementInfo = Dictionary; // Also compat with ec4, where @@ -329,6 +332,7 @@ export interface CustomSeriesOption extends SeriesOnCalendarOptionMixin { type?: 'custom' + useLegendByCategory?: boolean; // If set as 'none', do not depends on coord sys. coordinateSystem?: string | 'none'; @@ -375,6 +379,21 @@ export const customInnerStore = makeInner<{ export default class CustomSeriesModel extends SeriesModel { static type = 'series.custom'; + /** + * @overwrite + */ + init(option: CustomSeriesOption): void { + super.init.apply(this, arguments as any); + + if (option.useLegendByCategory) { + // Enable legend selection for each data item + // Use a function instead of direct access because data reference may changed + this.legendVisualProvider = new LegendVisualProvider( + zrUtil.bind(this.getData, this), zrUtil.bind(this.getRawData, this) + ); + } + } + readonly type = CustomSeriesModel.type; static dependencies = ['grid', 'polar', 'geo', 'singleAxis', 'calendar'];