in src/util/states.ts [428:516]
export function blurSeries(
targetSeriesIndex: number,
focus: InnerFocus,
blurScope: BlurScope,
api: ExtensionAPI
) {
const ecModel = api.getModel();
blurScope = blurScope || 'coordinateSystem';
function leaveBlurOfIndices(data: SeriesData, dataIndices: ArrayLike<number>) {
for (let i = 0; i < dataIndices.length; i++) {
const itemEl = data.getItemGraphicEl(dataIndices[i]);
itemEl && leaveBlur(itemEl);
}
}
if (targetSeriesIndex == null) {
return;
}
if (!focus || focus === 'none') {
return;
}
const targetSeriesModel = ecModel.getSeriesByIndex(targetSeriesIndex);
let targetCoordSys: CoordinateSystemMaster | CoordinateSystem = targetSeriesModel.coordinateSystem;
if (targetCoordSys && (targetCoordSys as CoordinateSystem).master) {
targetCoordSys = (targetCoordSys as CoordinateSystem).master;
}
const blurredSeries: SeriesModel[] = [];
ecModel.eachSeries(function (seriesModel) {
const sameSeries = targetSeriesModel === seriesModel;
let coordSys: CoordinateSystemMaster | CoordinateSystem = seriesModel.coordinateSystem;
if (coordSys && (coordSys as CoordinateSystem).master) {
coordSys = (coordSys as CoordinateSystem).master;
}
const sameCoordSys = coordSys && targetCoordSys
? coordSys === targetCoordSys
: sameSeries; // If there is no coordinate system. use sameSeries instead.
if (!(
// Not blur other series if blurScope series
blurScope === 'series' && !sameSeries
// Not blur other coordinate system if blurScope is coordinateSystem
|| blurScope === 'coordinateSystem' && !sameCoordSys
// Not blur self series if focus is series.
|| focus === 'series' && sameSeries
// TODO blurScope: coordinate system
)) {
const view = api.getViewOfSeriesModel(seriesModel);
view.group.traverse(function (child) {
// For the elements that have been triggered by other components,
// and are still required to be highlighted,
// because the current is directly forced to blur the element,
// it will cause the focus self to be unable to highlight, so skip the blur of this element.
if ((child as ExtendedElement).__highByOuter && sameSeries && focus === 'self') {
return;
}
singleEnterBlur(child);
});
if (isArrayLike(focus)) {
leaveBlurOfIndices(seriesModel.getData(), focus as ArrayLike<number>);
}
else if (isObject(focus)) {
const dataTypes = keys(focus);
for (let d = 0; d < dataTypes.length; d++) {
leaveBlurOfIndices(seriesModel.getData(dataTypes[d] as SeriesDataType), focus[dataTypes[d]]);
}
}
blurredSeries.push(seriesModel);
getComponentStates(seriesModel).isBlured = true;
}
});
ecModel.eachComponent(function (componentType, componentModel) {
if (componentType === 'series') {
return;
}
const view = api.getViewOfComponentModel(componentModel);
if (view && view.toggleBlurSeries) {
view.toggleBlurSeries(blurredSeries, true, ecModel);
}
});
}