UNPKG

di-echarts

Version:

Apache ECharts is a powerful, interactive charting and data visualization library for browser

100 lines (86 loc) 3.18 kB
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import ComponentView from '../../view/Component'; import { HashMap, createHashMap, each } from 'zrender/src/core/util'; import MarkerModel from './MarkerModel'; import GlobalModel from '../../model/Global'; import ExtensionAPI from '../../core/ExtensionAPI'; import { makeInner } from '../../util/model'; import SeriesModel from '../../model/Series'; import Group from 'zrender/src/graphic/Group'; import { enterBlur, leaveBlur } from '../../util/states'; const inner = makeInner<{ keep: boolean }, MarkerDraw>(); interface MarkerDraw { group: Group } abstract class MarkerView extends ComponentView { static type = 'marker'; type = MarkerView.type; /** * Markline grouped by series */ markerGroupMap: HashMap<MarkerDraw>; init() { this.markerGroupMap = createHashMap(); } render(markerModel: MarkerModel, ecModel: GlobalModel, api: ExtensionAPI) { const markerGroupMap = this.markerGroupMap; markerGroupMap.each(function (item) { inner(item).keep = false; }); ecModel.eachSeries(seriesModel => { const markerModel = MarkerModel.getMarkerModelFromSeries( seriesModel, this.type as 'markPoint' | 'markLine' | 'markArea' ); markerModel && this.renderSeries(seriesModel, markerModel, ecModel, api); }); markerGroupMap.each(item => { !inner(item).keep && this.group.remove(item.group); }); } markKeep(drawGroup: MarkerDraw) { inner(drawGroup).keep = true; } toggleBlurSeries(seriesModelList: SeriesModel[], isBlur: boolean) { each(seriesModelList, seriesModel => { const markerModel = MarkerModel.getMarkerModelFromSeries( seriesModel, this.type as 'markPoint' | 'markLine' | 'markArea' ); if (markerModel) { const data = markerModel.getData(); data.eachItemGraphicEl(function (el) { if (el) { isBlur ? enterBlur(el) : leaveBlur(el); } }); } }); } abstract renderSeries( seriesModel: SeriesModel, markerModel: MarkerModel, ecModel: GlobalModel, api: ExtensionAPI ): void; } export default MarkerView;