Skip to content

Commit a762c7b

Browse files
committed
feat(visualMap): add seriesTargets to mapping different series -> dimension
1 parent 2a234b3 commit a762c7b

File tree

10 files changed

+148
-175
lines changed

10 files changed

+148
-175
lines changed

src/component/visualMap/ContinuousModel.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ class ContinuousModel extends VisualMapModel<ContinousVisualMapOption> {
221221
const dataIndices: number[] = [];
222222
const data = seriesModel.getData();
223223

224-
data.each(this.getDataDimensionIndex(data, seriesModel.seriesIndex), function (value: number, dataIndex) {
224+
data.each(this.getDataDimensionIndex(data), function (value: number, dataIndex) {
225225
range[0] <= value && value <= range[1] && dataIndices.push(dataIndex);
226226
}, this);
227227

src/component/visualMap/ContinuousView.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -856,7 +856,7 @@ class ContinuousView extends VisualMapView {
856856

857857
const data = dataModel.getData(ecData.dataType);
858858
const value = data.getStore()
859-
.get(visualMapModel.getDataDimensionIndex(data, dataModel.seriesIndex), ecData.dataIndex) as number;
859+
.get(visualMapModel.getDataDimensionIndex(data), ecData.dataIndex) as number;
860860

861861
if (!isNaN(value)) {
862862
this._showIndicator(value, value);

src/component/visualMap/PiecewiseModel.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ class PiecewiseModel extends VisualMapModel<PiecewiseVisualMapOption> {
314314
const data = seriesModel.getData();
315315

316316
data.each(
317-
this.getDataDimensionIndex(data, seriesModel.seriesIndex),
317+
this.getDataDimensionIndex(data),
318318
function (value: number, dataIndex: number) {
319319
// Should always base on model pieceList, because it is order sensitive.
320320
const pIdx = VisualMapping.findPieceIndex(value, pieceList);

src/component/visualMap/VisualMapModel.ts

Lines changed: 49 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ import {
3333
OptionDataValue,
3434
BuiltinVisualProperty,
3535
DimensionIndex,
36-
OptionId,
3736
ComponentOnCalendarOptionMixin,
38-
ComponentOnMatrixOptionMixin
37+
ComponentOnMatrixOptionMixin,
38+
OptionId,
3939
} from '../../util/types';
4040
import ComponentModel from '../../model/Component';
4141
import Model from '../../model/Model';
@@ -91,7 +91,17 @@ export interface VisualMapOption<T extends VisualOptionBase = VisualOptionBase>
9191
/**
9292
* Dimension to be encoded
9393
*/
94-
dimension?: number | number[]
94+
dimension?: number
95+
96+
/**
97+
* Series targets with specific dimensions
98+
* When provided, seriesIndex, seriesId, and dimension are ignored
99+
*/
100+
seriesTargets?: {
101+
seriesIndex?: number
102+
seriesId?: OptionId
103+
dimension: number
104+
}[]
95105

96106
/**
97107
* Visual configuration for the data in selection
@@ -247,6 +257,30 @@ class VisualMapModel<Opts extends VisualMapOption = VisualMapOption> extends Com
247257
* @return An array of series indices.
248258
*/
249259
protected getTargetSeriesIndices(): number[] {
260+
const seriesTargets = this.option.seriesTargets;
261+
if (seriesTargets) {
262+
// When seriesTargets is provided, collect all target series indices
263+
const indices: number[] = [];
264+
for (const target of seriesTargets) {
265+
if (target.seriesIndex != null) {
266+
indices.push(target.seriesIndex);
267+
}
268+
else if (target.seriesId != null) {
269+
// Find series by ID
270+
let seriesModel: SeriesModel;
271+
this.ecModel.eachSeries(function (series) {
272+
if (series.id === target.seriesId) {
273+
seriesModel = series;
274+
}
275+
});
276+
if (seriesModel) {
277+
indices.push(seriesModel.componentIndex);
278+
}
279+
}
280+
}
281+
return indices;
282+
}
283+
250284
const optionSeriesId = this.option.seriesId;
251285
let optionSeriesIndex = this.option.seriesIndex;
252286
if (optionSeriesIndex == null && optionSeriesId == null) {
@@ -407,15 +441,21 @@ class VisualMapModel<Opts extends VisualMapOption = VisualMapOption> extends Com
407441
// }
408442

409443
getDimension(seriesIndex: number): number {
410-
const optDim = this.option.dimension;
411-
if (isArray(optDim) && seriesIndex != null) {
412-
const idx = this.getTargetSeriesIndices().indexOf(seriesIndex);
413-
return optDim[idx] ?? optDim[optDim.length - 1];
444+
const seriesTargets = this.option.seriesTargets;
445+
if (seriesTargets) {
446+
const target = seriesTargets.find(target =>
447+
(target.seriesIndex != null && target.seriesIndex === seriesIndex)
448+
|| (target.seriesId != null && target.seriesId === this.ecModel.getSeriesByIndex(seriesIndex).id)
449+
);
450+
if (target) {
451+
return target.dimension;
452+
}
414453
}
415-
return [].concat(optDim)[0];
454+
return this.option.dimension;
416455
}
417456

418-
getDataDimensionIndex(data: SeriesData, seriesIndex: number): DimensionIndex {
457+
getDataDimensionIndex(data: SeriesData): DimensionIndex {
458+
const seriesIndex = (data.hostModel as any).seriesIndex;
419459
const optDim = this.getDimension(seriesIndex);
420460

421461
if (optDim != null) {

src/component/visualMap/preprocessor.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,23 @@ export default function visualMapPreprocessor(option) {
5353
}
5454
});
5555
}
56+
57+
// Validate seriesTargets
58+
const seriesTargets = opt.seriesTargets;
59+
if (seriesTargets && zrUtil.isArray(seriesTargets)) {
60+
each(seriesTargets, function (target) {
61+
if (!zrUtil.isObject(target) || target.dimension == null) {
62+
if (__DEV__) {
63+
console.warn('Each seriesTarget should have a dimension property');
64+
}
65+
}
66+
if (target.seriesIndex == null && target.seriesId == null) {
67+
if (__DEV__) {
68+
console.warn('Each seriesTarget should have either seriesIndex or seriesId');
69+
}
70+
}
71+
});
72+
}
5673
});
5774
}
5875

src/component/visualMap/visualEncoding.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export const visualMapEncodingHandlers: StageHandler[] = [
4242
visualMapModel.stateList,
4343
visualMapModel.targetVisuals,
4444
zrUtil.bind(visualMapModel.getValueState, visualMapModel),
45-
visualMapModel.getDataDimensionIndex(seriesModel.getData(), seriesModel.seriesIndex)
45+
visualMapModel.getDataDimensionIndex(seriesModel.getData())
4646
));
4747
});
4848

@@ -65,7 +65,7 @@ export const visualMapEncodingHandlers: StageHandler[] = [
6565
outerColors: []
6666
} as VisualMeta;
6767

68-
const dimIdx = visualMapModel.getDataDimensionIndex(data, seriesModel.seriesIndex);
68+
const dimIdx = visualMapModel.getDataDimensionIndex(data);
6969
if (dimIdx >= 0) {
7070
// visualMeta.dimension should be dimension index, but not concrete dimension.
7171
visualMeta.dimension = dimIdx;

test/runTest/actions/__meta__.json

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/runTest/actions/visualmap-dimension.json

Lines changed: 0 additions & 1 deletion
This file was deleted.

test/visualmap-dimension.html

Lines changed: 0 additions & 159 deletions
This file was deleted.

0 commit comments

Comments
 (0)