This is an automated email from the ASF dual-hosted git repository.
shenyi pushed a commit to branch enhance-morph
in repository https://gitbox.apache.org/repos/asf/echarts.git
The following commit(s) were added to refs/heads/enhance-morph by this push:
new e7ad096 refact(type): optimize event type
e7ad096 is described below
commit e7ad096771e6bce84e3becf90c82d48eb427ef43
Author: pissang <[email protected]>
AuthorDate: Tue Jun 15 16:18:45 2021 +0800
refact(type): optimize event type
---
src/chart/bar/BarView.ts | 2 +-
src/component/helper/BrushController.ts | 4 +-
src/component/helper/RoamController.ts | 9 ++-
src/core/echarts.ts | 94 ++++++----------------------
test/types/event.ts => src/core/lifecycle.ts | 31 ++++-----
test/types/event.ts | 7 +++
6 files changed, 48 insertions(+), 99 deletions(-)
diff --git a/src/chart/bar/BarView.ts b/src/chart/bar/BarView.ts
index 470c6f6..044b1bf 100644
--- a/src/chart/bar/BarView.ts
+++ b/src/chart/bar/BarView.ts
@@ -117,7 +117,7 @@ class BarView extends ChartView {
private _isLargeDraw: boolean;
private _isFirstFrame: boolean; // First frame after series added
- private _onRendered: EventCallback<unknown, unknown>;
+ private _onRendered: EventCallback;
private _backgroundGroup: Group;
diff --git a/src/component/helper/BrushController.ts
b/src/component/helper/BrushController.ts
index 9320ece..647f17c 100644
--- a/src/component/helper/BrushController.ts
+++ b/src/component/helper/BrushController.ts
@@ -186,7 +186,9 @@ export interface BrushControllerEvents {
* removeOnClick: boolean
* }
*/
-class BrushController extends Eventful<BrushControllerEvents> {
+class BrushController extends Eventful<{
+ [key in keyof BrushControllerEvents]: (params: BrushControllerEvents[key])
=> void | undefined
+}> {
readonly group: graphic.Group;
diff --git a/src/component/helper/RoamController.ts
b/src/component/helper/RoamController.ts
index 4b12a6a..edff610 100644
--- a/src/component/helper/RoamController.ts
+++ b/src/component/helper/RoamController.ts
@@ -43,7 +43,7 @@ type RoamEventType = keyof RoamEventParams;
type RoamBehavior = 'zoomOnMouseWheel' | 'moveOnMouseMove' |
'moveOnMouseWheel';
-export type RoamEventParams = {
+export interface RoamEventParams {
'zoom': {
scale: number
originX: number
@@ -79,7 +79,9 @@ export interface RoamControllerHost {
}
}
-class RoamController extends Eventful<RoamEventParams> {
+class RoamController extends Eventful<{
+ [key in keyof RoamEventParams]: (params: RoamEventParams[key]) => void |
undefined
+}> {
pointerChecker: (e: ZRElementEvent, x: number, y: number) => boolean;
@@ -309,7 +311,8 @@ function trigger<T extends RoamEventType>(
// Also provide behavior checker for event listener, for some case that
// multiple components share one listener.
contollerEvent.isAvailableBehavior = bind(isAvailableBehavior, null,
behaviorToCheck, e);
- controller.trigger(eventName, contollerEvent);
+ // TODO should not have type issue.
+ (controller as any).trigger(eventName, contollerEvent);
}
// settings: {
diff --git a/src/core/echarts.ts b/src/core/echarts.ts
index 51ad67b..55dc9a1 100644
--- a/src/core/echarts.ts
+++ b/src/core/echarts.ts
@@ -40,7 +40,7 @@ import {
import * as colorTool from 'zrender/src/tool/color';
import env from 'zrender/src/core/env';
import timsort from 'zrender/src/core/timsort';
-import Eventful from 'zrender/src/core/Eventful';
+import Eventful, { EventCallbackSingleParam } from 'zrender/src/core/Eventful';
import Element, { ElementEvent } from 'zrender/src/Element';
import GlobalModel, {QueryConditionKindA, GlobalModelSetOptionOpts} from
'../model/Global';
import ExtensionAPI from './ExtensionAPI';
@@ -117,7 +117,7 @@ import IncrementalDisplayable from
'zrender/src/graphic/IncrementalDisplayable';
import { seriesSymbolTask, dataSymbolTask } from '../visual/symbol';
import { getVisualFromData, getItemVisualFromData } from '../visual/helper';
import LabelManager from '../label/LabelManager';
-import { deprecateLog, throwError } from '../util/log';
+import { deprecateLog } from '../util/log';
import { handleLegacySelectEvents } from '../legacy/dataSelectAction';
import { registerExternalTransform } from '../data/helper/transform';
@@ -314,22 +314,19 @@ let renderSeries: (
let performPostUpdateFuncs: (ecModel: GlobalModel, api: ExtensionAPI, params:
PostUpdateParams) => void;
let createExtensionAPI: (ecIns: ECharts) => ExtensionAPI;
let enableConnect: (ecIns: ECharts) => void;
-let setTransitionOpt: (
- chart: ECharts,
- transitionOpt: SetOptionTransitionOpt
-) => void;
let markStatusToUpdate: (ecIns: ECharts) => void;
let applyChangedStates: (ecIns: ECharts) => void;
+type RenderedEventParam = { elapsedTime: number };
type ECEventDefinition = {
- [key in ZRElementEventName]: ECElementEvent
+ [key in ZRElementEventName]: EventCallbackSingleParam<ECElementEvent>
} & {
- rendered: { elapsedTime: number }
- finished: undefined
+ rendered: EventCallbackSingleParam<RenderedEventParam>
+ finished: () => void | boolean
} & {
// TODO: Use ECActionEvent
- [key: string]: any
+ [key: string]: (...args: unknown[]) => void | boolean
};
class ECharts extends Eventful<ECEventDefinition> {
@@ -602,12 +599,10 @@ class ECharts extends Eventful<ECEventDefinition> {
let silent;
let replaceMerge;
- let transitionOpt: SetOptionTransitionOpt;
if (isObject(notMerge)) {
lazyUpdate = notMerge.lazyUpdate;
silent = notMerge.silent;
replaceMerge = notMerge.replaceMerge;
- transitionOpt = notMerge.transition;
notMerge = notMerge.notMerge;
}
@@ -626,16 +621,17 @@ class ECharts extends Eventful<ECEventDefinition> {
oldSeriesModels = this._model.getSeries();
}
+ const oldSeriesData = oldSeriesModels && map(oldSeriesModels, series
=> series.getData());
+
this._model.setOption(option as ECBasicOption, { replaceMerge },
optionPreprocessorFuncs);
const newSeriesModels = this._model.getSeries();
const postUpdateParams = {
oldSeries: oldSeriesModels,
- newSeries: newSeriesModels
+ newSeries: newSeriesModels,
+ oldSeriesData: oldSeriesData
};
- setTransitionOpt(this, transitionOpt);
-
if (lazyUpdate) {
this[PENDING_UPDATE] = {
silent: silent,
@@ -1104,7 +1100,7 @@ class ECharts extends Eventful<ECEventDefinition> {
each(eventActionMap, (actionType, eventType) => {
this._messageCenter.on(eventType, function (event: Payload) {
- this.trigger(eventType, event);
+ (this as any).trigger(eventType, event);
}, this);
});
@@ -1114,7 +1110,7 @@ class ECharts extends Eventful<ECEventDefinition> {
['selectchanged'],
(eventType) => {
this._messageCenter.on(eventType, function (event: Payload) {
- this.trigger(eventType, event);
+ (this as any).trigger(eventType, event);
}, this);
}
);
@@ -1935,7 +1931,7 @@ class ECharts extends Eventful<ECEventDefinition> {
* (5) no delayed setOption needs to be processed.
*/
bindRenderedEvent = function (zr: zrender.ZRenderType, ecIns:
ECharts): void {
- zr.on('rendered', function (params: ECEventDefinition['rendered'])
{
+ zr.on('rendered', function (params: RenderedEventParam) {
ecIns.trigger('rendered', params);
@@ -2066,7 +2062,7 @@ class ECharts extends Eventful<ECEventDefinition> {
unfinished = true;
}
- seriesModel.uniTransitionMap = null;
+ // seriesModel.uniTransitionMap = null;
chartView.group.silent = !!seriesModel.get('silent');
// Should not call markRedraw on group, because it will
disable zrender
@@ -2097,7 +2093,6 @@ class ECharts extends Eventful<ECEventDefinition> {
updateStates(seriesModel, chartView);
});
-
// If use hover layer
updateHoverLayerStatus(ecIns, ecModel);
};
@@ -2431,61 +2426,6 @@ class ECharts extends Eventful<ECEventDefinition> {
});
});
};
-
- setTransitionOpt = function (
- chart: ECharts,
- transitionOpt: SetOptionTransitionOpt
- ): void {
-
- // TODO Give warn if UniversalTransition module is not registered.
-
- const ecModel = chart._model;
-
- each(modelUtil.normalizeToArray(transitionOpt), transOpt => {
- let errMsg;
- const fromOpt = transOpt.from;
- const toOpt = transOpt.to;
-
- if (toOpt == null) {
- if (__DEV__) {
- errMsg = '`transition.to` must be specified.';
- }
- throwError(errMsg);
- }
-
- const finderOpt = {
- includeMainTypes: ['series'],
- enableAll: false,
- enableNone: false
- };
- const fromResult = fromOpt ? modelUtil.parseFinder(ecModel,
fromOpt, finderOpt) : null;
- const toResult = modelUtil.parseFinder(ecModel, toOpt,
finderOpt) as modelUtil.ParsedModelFinderKnown;
- const toSeries = toResult.seriesModel;
-
- if (toSeries == null) {
- errMsg = '';
- if (__DEV__) {
- errMsg = '`transition` is only supported on series.';
- }
- }
- if (fromResult && fromResult.seriesModel !== toSeries) {
- errMsg = '';
- if (__DEV__) {
- errMsg = '`transition.from` and `transition.to` must
be specified to the same series.';
- }
- }
- if (errMsg != null) {
- throwError(errMsg);
- }
-
- // Just a temp solution: mount them on series.
- toSeries.uniTransitionMap = {
- from: fromOpt ? fromOpt.dimension : null,
- to: toOpt.dimension
- };
- });
- };
-
})();
}
@@ -2759,6 +2699,10 @@ export function registerPostUpdate(postUpdateFunc:
PostUpdater): void {
}
}
+export function registerUpdateLifecycle(): void {
+
+}
+
/**
* @usage
* registerAction('someAction', 'someEvent', function () { ... });
diff --git a/test/types/event.ts b/src/core/lifecycle.ts
similarity index 62%
copy from test/types/event.ts
copy to src/core/lifecycle.ts
index af3511f..98a7e6a 100644
--- a/test/types/event.ts
+++ b/src/core/lifecycle.ts
@@ -17,26 +17,19 @@
* under the License.
*/
-import * as echarts from '../../';
+import Eventful, { EventCallback } from 'zrender/src/core/Eventful';
+import GlobalModel from '../model/Global';
+import { EChartsType } from './echarts';
+import ExtensionAPI from './ExtensionAPI';
-const dom = document.createElement('div');
-dom.className = 'chart';
+interface LifecycleEvents {
+ 'inited': [EChartsType],
+ 'series:beforerender': [GlobalModel, ExtensionAPI]
+}
-const chart: echarts.EChartsType = echarts.init(dom);
+const lifecycle = new Eventful<{
+ [key in keyof LifecycleEvents]: EventCallback<LifecycleEvents[key]>
+}>();
-const option: echarts.EChartsOption = {
- series: [{
- type: 'bar'
- }]
-};
-chart.setOption(option);
-
-// Mouse event.
-chart.on('click', function (params) {
- console.log(params.name);
+lifecycle.on('series:beforerender', function (param) {
});
-
-// Rendered event.
-chart.on('rendered', function (params) {
- console.log(params.elapsedTime);
-});
\ No newline at end of file
diff --git a/test/types/event.ts b/test/types/event.ts
index af3511f..6980abe 100644
--- a/test/types/event.ts
+++ b/test/types/event.ts
@@ -34,9 +34,16 @@ chart.setOption(option);
// Mouse event.
chart.on('click', function (params) {
console.log(params.name);
+ this.off('click');
});
// Rendered event.
chart.on('rendered', function (params) {
console.log(params.elapsedTime);
+ this.off('rendered');
+});
+
+chart.getZr().on('click', function (params) {
+ console.log(params.offsetX);
+ this.off('click');
});
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]