Spaces:
Running
Running
/* | |
* 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; | |