/* * 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 Group from 'zrender/src/graphic/Group'; import * as componentUtil from '../util/component'; import * as clazzUtil from '../util/clazz'; import ComponentModel from '../model/Component'; import GlobalModel from '../model/Global'; import ExtensionAPI from '../core/ExtensionAPI'; import {Payload, ViewRootGroup, ECActionEvent, EventQueryItem, ECElementEvent} from '../util/types'; import Element from 'zrender/src/Element'; import SeriesModel from '../model/Series'; interface ComponentView { /** * Implement it if needed. */ updateTransform?( model: ComponentModel, ecModel: GlobalModel, api: ExtensionAPI, payload: Payload ): void | {update: true}; /** * Pass only when return `true`. * Implement it if needed. */ filterForExposedEvent( eventType: string, query: EventQueryItem, targetEl: Element, packedEvent: ECActionEvent | ECElementEvent ): boolean; /** * Find dispatchers for highlight/downplay by name. * If this methods provided, hover link (within the same name) is enabled in component. * That is, in component, a name can correspond to multiple dispatchers. * Those dispatchers can have no common ancestor. * The highlight/downplay state change will be applied on the * dispatchers and their descendents. * * @return Must return an array but not null/undefined. */ findHighDownDispatchers?( name: string ): Element[]; focusBlurEnabled?: boolean; } class ComponentView { // [Caution]: Because this class or desecendants can be used as `XXX.extend(subProto)`, // the class members must not be initialized in constructor or declaration place. // Otherwise there is bad case: // class A {xxx = 1;} // enableClassExtend(A); // class B extends A {} // var C = B.extend({xxx: 5}); // var c = new C(); // console.log(c.xxx); // expect 5 but always 1. readonly group: ViewRootGroup; readonly uid: string; // ---------------------- // Injectable properties // ---------------------- __model: ComponentModel; __alive: boolean; __id: string; constructor() { this.group = new Group(); this.uid = componentUtil.getUID('viewComponent'); } init(ecModel: GlobalModel, api: ExtensionAPI): void {} render(model: ComponentModel, ecModel: GlobalModel, api: ExtensionAPI, payload: Payload): void {} dispose(ecModel: GlobalModel, api: ExtensionAPI): void {} updateView(model: ComponentModel, ecModel: GlobalModel, api: ExtensionAPI, payload: Payload): void { // Do nothing; } updateLayout(model: ComponentModel, ecModel: GlobalModel, api: ExtensionAPI, payload: Payload): void { // Do nothing; } updateVisual(model: ComponentModel, ecModel: GlobalModel, api: ExtensionAPI, payload: Payload): void { // Do nothing; } /** * Hook for toggle blur target series. * Can be used in marker for blur or leave blur the markers */ toggleBlurSeries(seriesModels: SeriesModel[], isBlur: boolean, ecModel: GlobalModel): void { // Do nothing; } /** * Traverse the new rendered elements. * * It will traverse the new added element in progressive rendering. * And traverse all in normal rendering. */ eachRendered(cb: (el: Element) => boolean | void) { const group = this.group; if (group) { group.traverse(cb); } } static registerClass: clazzUtil.ClassManager['registerClass']; }; export type ComponentViewConstructor = typeof ComponentView & clazzUtil.ExtendableConstructor & clazzUtil.ClassManager; clazzUtil.enableClassExtend(ComponentView as ComponentViewConstructor); clazzUtil.enableClassManagement(ComponentView as ComponentViewConstructor); export default ComponentView;