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]

Reply via email to