ZoeDuan's picture
Upload 1382 files
4bb817b verified
raw
history blame
4.69 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 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;