| /* |
| * 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 Element from 'zrender/src/Element'; |
| import { |
| DataModel, ECEventData, BlurScope, InnerFocus, SeriesDataType, |
| ComponentMainType, ComponentItemTooltipOption |
| } from './types'; |
| import { makeInner } from './model'; |
| /** |
| * ECData stored on graphic element |
| */ |
| export interface ECData { |
| dataIndex?: number; |
| dataModel?: DataModel; |
| eventData?: ECEventData; |
| seriesIndex?: number; |
| dataType?: SeriesDataType; |
| focus?: InnerFocus; |
| blurScope?: BlurScope; |
| |
| // Required by `tooltipConfig` and `focus`. |
| componentMainType?: ComponentMainType; |
| componentIndex?: number; |
| componentHighDownName?: string; |
| |
| // To make a tooltipConfig, seach `setTooltipConfig`. |
| // Used to find component tooltip option, which is used as |
| // the parent of tooltipConfig.option for cascading. |
| // If not provided, do not use component as its parent. |
| // (Set manatary to make developers not to forget them). |
| tooltipConfig?: { |
| // Target item name to locate tooltip. |
| name: string; |
| option: ComponentItemTooltipOption<unknown>; |
| }; |
| } |
| |
| export const getECData = makeInner<ECData, Element>(); |
| |
| export const setCommonECData = (seriesIndex: number, dataType: SeriesDataType, dataIdx: number, el: Element) => { |
| if (el) { |
| const ecData = getECData(el); |
| // Add data index and series index for indexing the data by element |
| // Useful in tooltip |
| ecData.dataIndex = dataIdx; |
| ecData.dataType = dataType; |
| ecData.seriesIndex = seriesIndex; |
| |
| // TODO: not store dataIndex on children. |
| if (el.type === 'group') { |
| el.traverse(function (child: Element): void { |
| const childECData = getECData(child); |
| childECData.seriesIndex = seriesIndex; |
| childECData.dataIndex = dataIdx; |
| childECData.dataType = dataType; |
| }); |
| } |
| } |
| }; |