You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by sh...@apache.org on 2020/02/19 12:11:50 UTC
[incubator-echarts] 02/02: ts: add more types, pie,
part of processor, visual
This is an automated email from the ASF dual-hosted git repository.
shenyi pushed a commit to branch typescript
in repository https://gitbox.apache.org/repos/asf/incubator-echarts.git
commit ca899c9eb831874681f26c879f12041fbae912bc
Author: pissang <bm...@gmail.com>
AuthorDate: Wed Feb 19 20:11:10 2020 +0800
ts: add more types, pie, part of processor, visual
---
src/.eslintrc.yaml | 2 +-
src/chart/pie.ts | 4 +--
src/chart/pie/PieSeries.ts | 2 +-
src/chart/pie/labelLayout.ts | 78 ++++++++++++++++++++++++++++++++++++--------
src/chart/pie/pieLayout.ts | 23 ++++++++-----
src/echarts.ts | 2 +-
src/model/Component.ts | 17 ++++++++--
src/model/Global.ts | 4 +--
src/model/Model.ts | 45 +++++++++++++------------
src/model/Series.ts | 4 +--
src/model/mixin/boxLayout.ts | 33 -------------------
src/model/mixin/itemStyle.ts | 8 ++---
src/model/mixin/textStyle.ts | 28 ++++++++--------
src/processor/dataFilter.ts | 7 ++--
src/processor/dataSample.ts | 10 ++++--
src/stream/Scheduler.ts | 34 +++++++++----------
src/util/layout.ts | 2 +-
src/util/model.ts | 2 +-
src/util/types.ts | 15 +++++----
src/visual/dataColor.ts | 20 +++++++-----
src/visual/seriesColor.ts | 4 ++-
21 files changed, 199 insertions(+), 145 deletions(-)
diff --git a/src/.eslintrc.yaml b/src/.eslintrc.yaml
index bf1fd2c..39534cb 100644
--- a/src/.eslintrc.yaml
+++ b/src/.eslintrc.yaml
@@ -189,7 +189,7 @@ rules:
"@typescript-eslint/no-unused-vars":
- - 2
+ - 1
-
vars: "local"
args: "none"
\ No newline at end of file
diff --git a/src/chart/pie.ts b/src/chart/pie.ts
index 33b0d2f..4f8630b 100644
--- a/src/chart/pie.ts
+++ b/src/chart/pie.ts
@@ -17,8 +17,6 @@
* under the License.
*/
-// @ts-nocheck
-
import * as echarts from '../echarts';
import * as zrUtil from 'zrender/src/core/util';
@@ -44,6 +42,8 @@ createDataSelectAction('pie', [{
method: 'unSelect'
}]);
+// type PieLayoutParameters = Parameters<typeof pieLayout>;
+
echarts.registerVisual(dataColor('pie'));
echarts.registerLayout(zrUtil.curry(pieLayout, 'pie'));
echarts.registerProcessor(dataFilter('pie'));
\ No newline at end of file
diff --git a/src/chart/pie/PieSeries.ts b/src/chart/pie/PieSeries.ts
index f8205b2..ab7992a 100644
--- a/src/chart/pie/PieSeries.ts
+++ b/src/chart/pie/PieSeries.ts
@@ -280,7 +280,7 @@ class PieSeries extends SeriesModel<PieSeriesOption> {
}
interface PieSeries extends DataSelectableMixin<PieSeriesOption> {}
-zrUtil.tsMixin(PieSeries, DataSelectableMixin);
+zrUtil.mixin(PieSeries, DataSelectableMixin);
SeriesModel.registerClass(PieSeries);
diff --git a/src/chart/pie/labelLayout.ts b/src/chart/pie/labelLayout.ts
index 5a82abf..8c8c073 100644
--- a/src/chart/pie/labelLayout.ts
+++ b/src/chart/pie/labelLayout.ts
@@ -17,21 +17,55 @@
* under the License.
*/
-// @ts-nocheck
-
// FIXME emphasis label position is not same with normal label position
import * as textContain from 'zrender/src/contain/text';
import {parsePercent} from '../../util/number';
+import PieSeries, { PieSeriesOption } from './PieSeries';
+import { VectorArray } from 'zrender/src/core/vector';
+import { ZRAlign, ZRVerticalAlign } from '../../util/types';
+import { RectLike } from 'zrender/src/core/BoundingRect';
var RADIAN = Math.PI / 180;
-function adjustSingleSide(list, cx, cy, r, dir, viewWidth, viewHeight, viewLeft, viewTop, farthestX) {
+interface LabelLayout {
+ x: number
+ y: number
+ position: PieSeriesOption['label']['position'],
+ height: number
+ len: number
+ len2: number
+ linePoints: VectorArray[]
+ textAlign: ZRAlign
+ verticalAlign: ZRVerticalAlign,
+ rotation: number,
+ inside: boolean,
+ labelDistance: number,
+ labelAlignTo: PieSeriesOption['label']['alignTo'],
+ labelMargin: number,
+ bleedMargin: PieSeriesOption['label']['bleedMargin'],
+ textRect: RectLike,
+ text: string,
+ font: string
+}
+
+function adjustSingleSide(
+ list: LabelLayout[],
+ cx: number,
+ cy: number,
+ r: number,
+ dir: -1 | 1,
+ viewWidth: number,
+ viewHeight: number,
+ viewLeft: number,
+ viewTop: number,
+ farthestX: number
+) {
list.sort(function (a, b) {
return a.y - b.y;
});
- function shiftDown(start, end, delta, dir) {
+ function shiftDown(start: number, end: number, delta: number, dir: number) {
for (var j = start; j < end; j++) {
if (list[j].y + delta > viewTop + viewHeight) {
break;
@@ -50,7 +84,7 @@ function adjustSingleSide(list, cx, cy, r, dir, viewWidth, viewHeight, viewLeft,
shiftUp(end - 1, delta / 2);
}
- function shiftUp(end, delta) {
+ function shiftUp(end: number, delta: number) {
for (var j = end; j >= 0; j--) {
if (list[j].y - delta < viewTop) {
break;
@@ -65,7 +99,11 @@ function adjustSingleSide(list, cx, cy, r, dir, viewWidth, viewHeight, viewLeft,
}
}
- function changeX(list, isDownList, cx, cy, r, dir) {
+ function changeX(
+ list: LabelLayout[], isDownList: boolean,
+ cx: number, cy: number, r: number,
+ dir: 1 | -1
+ ) {
var lastDeltaX = dir > 0
? isDownList // right-side
? Number.MAX_VALUE // down
@@ -135,7 +173,16 @@ function adjustSingleSide(list, cx, cy, r, dir, viewWidth, viewHeight, viewLeft,
changeX(downList, true, cx, cy, r, dir);
}
-function avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight, viewLeft, viewTop) {
+function avoidOverlap(
+ labelLayoutList: LabelLayout[],
+ cx: number,
+ cy: number,
+ r: number,
+ viewWidth: number,
+ viewHeight: number,
+ viewLeft: number,
+ viewTop: number
+) {
var leftList = [];
var rightList = [];
var leftmostX = Number.MAX_VALUE;
@@ -218,14 +265,21 @@ function avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight, viewLef
}
}
-function isPositionCenter(layout) {
+function isPositionCenter(layout: LabelLayout) {
// Not change x for center label
return layout.position === 'center';
}
-export default function (seriesModel, r, viewWidth, viewHeight, viewLeft, viewTop) {
+export default function (
+ seriesModel: PieSeries,
+ r: number,
+ viewWidth: number,
+ viewHeight: number,
+ viewLeft: number,
+ viewTop: number
+) {
var data = seriesModel.getData();
- var labelLayoutList = [];
+ var labelLayoutList: LabelLayout[] = [];
var cx;
var cy;
var hasLabelRotate = false;
@@ -268,9 +322,7 @@ export default function (seriesModel, r, viewWidth, viewHeight, viewLeft, viewTo
var text = seriesModel.getFormattedLabel(idx, 'normal')
|| data.getName(idx);
- var textRect = textContain.getBoundingRect(
- text, font, textAlign, 'top'
- );
+ var textRect = textContain.getBoundingRect(text, font, textAlign, 'top');
var isLabelInside = labelPosition === 'inside' || labelPosition === 'inner';
if (labelPosition === 'center') {
diff --git a/src/chart/pie/pieLayout.ts b/src/chart/pie/pieLayout.ts
index 1d42b85..a96306e 100644
--- a/src/chart/pie/pieLayout.ts
+++ b/src/chart/pie/pieLayout.ts
@@ -17,17 +17,18 @@
* under the License.
*/
-// @ts-nocheck
-
import {parsePercent, linearMap} from '../../util/number';
import * as layout from '../../util/layout';
import labelLayout from './labelLayout';
import * as zrUtil from 'zrender/src/core/util';
+import GlobalModel from '../../model/Global';
+import ExtensionAPI from '../../ExtensionAPI';
+import PieSeries from './PieSeries';
var PI2 = Math.PI * 2;
var RADIAN = Math.PI / 180;
-function getViewRect(seriesModel, api) {
+function getViewRect(seriesModel: PieSeries, api: ExtensionAPI) {
return layout.getLayoutRect(
seriesModel.getBoxLayoutParams(), {
width: api.getWidth(),
@@ -36,8 +37,12 @@ function getViewRect(seriesModel, api) {
);
}
-export default function (seriesType, ecModel, api, payload) {
- ecModel.eachSeriesByType(seriesType, function (seriesModel) {
+export default function (
+ seriesType: 'pie',
+ ecModel: GlobalModel,
+ api: ExtensionAPI
+) {
+ ecModel.eachSeriesByType(seriesType, function (seriesModel: PieSeries) {
var data = seriesModel.getData();
var valueDim = data.mapDimension('value');
var viewRect = getViewRect(seriesModel, api);
@@ -65,7 +70,7 @@ export default function (seriesType, ecModel, api, payload) {
var minAngle = seriesModel.get('minAngle') * RADIAN;
var validDataCount = 0;
- data.each(valueDim, function (value) {
+ data.each(valueDim, function (value: number) {
!isNaN(value) && validDataCount++;
});
@@ -89,7 +94,7 @@ export default function (seriesType, ecModel, api, payload) {
var currentAngle = startAngle;
var dir = clockwise ? 1 : -1;
- data.each(valueDim, function (value, idx) {
+ data.each(valueDim, function (value: number, idx: number) {
var angle;
if (isNaN(value)) {
data.setItemLayout(idx, {
@@ -150,7 +155,7 @@ export default function (seriesType, ecModel, api, payload) {
// Constrained by minAngle
if (restAngle <= 1e-3) {
var angle = PI2 / validDataCount;
- data.each(valueDim, function (value, idx) {
+ data.each(valueDim, function (value: number, idx: number) {
if (!isNaN(value)) {
var layout = data.getItemLayout(idx);
layout.angle = angle;
@@ -162,7 +167,7 @@ export default function (seriesType, ecModel, api, payload) {
else {
unitRadian = restAngle / valueSumLargerThanMinAngle;
currentAngle = startAngle;
- data.each(valueDim, function (value, idx) {
+ data.each(valueDim, function (value: number, idx: number) {
if (!isNaN(value)) {
var layout = data.getItemLayout(idx);
var angle = layout.angle === minAngle
diff --git a/src/echarts.ts b/src/echarts.ts
index 4850a97..9996dea 100644
--- a/src/echarts.ts
+++ b/src/echarts.ts
@@ -1818,7 +1818,7 @@ var enableConnect: (chart: ECharts) => void;
interface ECharts extends Eventful {}
-zrUtil.tsMixin(ECharts, Eventful);
+zrUtil.mixin(ECharts, Eventful);
var echartsProto = ECharts.prototype;
echartsProto.on = createRegisterEventWithLowercaseECharts('on');
diff --git a/src/model/Component.ts b/src/model/Component.ts
index afd1e98..339f5d7 100644
--- a/src/model/Component.ts
+++ b/src/model/Component.ts
@@ -31,7 +31,6 @@ import {
} from '../util/clazz';
import {makeInner} from '../util/model';
import * as layout from '../util/layout';
-import boxLayoutMixin from './mixin/boxLayout';
import { CoordinateSystem } from '../coord/CoordinateSystem';
import GlobalModel from './Global';
import {
@@ -272,6 +271,20 @@ class ComponentModel<Opt extends ComponentOption = ComponentOption> extends Mode
});
}
+
+ getBoxLayoutParams() {
+ // Consider itself having box layout configs.
+ const boxLayoutModel = this as Model<ComponentOption & BoxLayoutOptionMixin>;
+ return {
+ left: boxLayoutModel.get('left'),
+ top: boxLayoutModel.get('top'),
+ right: boxLayoutModel.get('right'),
+ bottom: boxLayoutModel.get('bottom'),
+ width: boxLayoutModel.get('width'),
+ height: boxLayoutModel.get('height')
+ };
+ }
+
static registerClass: ClassManager['registerClass'];
}
@@ -322,6 +335,4 @@ function getDependencies(componentType: string): string[] {
return deps;
}
-zrUtil.mixin(ComponentModel, boxLayoutMixin);
-
export default ComponentModel;
diff --git a/src/model/Global.ts b/src/model/Global.ts
index 0ae4292..39edddc 100644
--- a/src/model/Global.ts
+++ b/src/model/Global.ts
@@ -34,7 +34,7 @@
import {__DEV__} from '../config';
import {
each, filter, map, isArray, indexOf, isObject, isString,
- createHashMap, assert, clone, merge, extend, tsMixin, HashMap
+ createHashMap, assert, clone, merge, extend, mixin, HashMap
} from 'zrender/src/core/util';
import * as modelUtil from '../util/model';
import Model from './Model';
@@ -795,6 +795,6 @@ function filterBySubType(
// @ts-ignore FIXME:GlobalOption
interface GlobalModel extends ColorPaletteMixin {}
-tsMixin(GlobalModel, ColorPaletteMixin);
+mixin(GlobalModel, ColorPaletteMixin);
export default GlobalModel;
diff --git a/src/model/Model.ts b/src/model/Model.ts
index 1925620..6f8480e 100644
--- a/src/model/Model.ts
+++ b/src/model/Model.ts
@@ -112,18 +112,18 @@ class Model<Opt extends ModelOption = ModelOption> {
path: R, ignoreParent?: boolean
): Opt[R];
get<R extends keyof Opt>(
- path: [R], ignoreParent?: boolean
+ path: readonly [R], ignoreParent?: boolean
): Opt[R];
get<R extends keyof Opt, S extends keyof Opt[R]>(
- path: [R, S], ignoreParent?: boolean
+ path: readonly [R, S], ignoreParent?: boolean
): Opt[R][S];
get<R extends keyof Opt, S extends keyof Opt[R], T extends keyof Opt[R][S]>(
- path: [R, S, T], ignoreParent?: boolean
+ path: readonly [R, S, T], ignoreParent?: boolean
): Opt[R][S][T];
// `path` can be 'xxx.yyy.zzz', so the return value type have to be `ModelOption`
// TODO: TYPE strict key check?
// get(path: string | string[], ignoreParent?: boolean): ModelOption;
- get(path: string | string[], ignoreParent?: boolean): ModelOption {
+ get(path: string | readonly string[], ignoreParent?: boolean): ModelOption {
if (path == null) {
return this.option;
}
@@ -151,29 +151,33 @@ class Model<Opt extends ModelOption = ModelOption> {
return val;
}
+ // TODO At most 3 depth?
getModel<R extends keyof Opt>(
path: R, parentModel?: Model
): Model<Opt[R]>;
getModel<R extends keyof Opt>(
- path: [R], parentModel?: Model
+ path: readonly [R], parentModel?: Model
): Model<Opt[R]>;
getModel<R extends keyof Opt, S extends keyof Opt[R]>(
- path: [R, S], parentModel?: Model
+ path: readonly [R, S], parentModel?: Model
): Model<Opt[R][S]>;
getModel<R extends keyof Opt, S extends keyof Opt[R], T extends keyof Opt[R][S]>(
- path: [R, S, T], parentModel?: Model
+ path: readonly [R, S, T], parentModel?: Model
): Model<Opt[R][S][T]>;
// `path` can be 'xxx.yyy.zzz', so the return value type have to be `Model<ModelOption>`
// getModel(path: string | string[], parentModel?: Model): Model;
- getModel(path: string | string[], parentModel?: Model): Model<any> {
- var obj = path == null
- ? this.option
- : doGet(this.option, path = this.parsePath(path));
+ // TODO 'xxx.yyy.zzz' is deprecated
+ getModel(path: string | readonly string[], parentModel?: Model): Model<any> {
+ var hasPath = path != null;
+ var pathFinal = hasPath ? this.parsePath(path) : null;
+ var obj = hasPath
+ ? doGet(this.option, pathFinal)
+ : this.option;
var thisParentModel;
parentModel = parentModel || (
- (thisParentModel = getParent(this, path))
- && thisParentModel.getModel(path as string)
+ (thisParentModel = getParent(this, pathFinal))
+ && thisParentModel.getModel(pathFinal as readonly [string])
);
return new Model(obj, parentModel, this.ecModel);
@@ -199,9 +203,9 @@ class Model<Opt extends ModelOption = ModelOption> {
// }
// If path is null/undefined, return null/undefined.
- parsePath(path: string | string[]): string[] {
+ parsePath(path: string | readonly string[]): readonly string[] {
if (typeof path === 'string') {
- path = path.split('.');
+ return path.split('.');
}
return path;
}
@@ -231,7 +235,7 @@ class Model<Opt extends ModelOption = ModelOption> {
};
-function doGet(obj: ModelOption, pathArr: string[], parentModel?: Model<Dictionary<any>>) {
+function doGet(obj: ModelOption, pathArr: readonly string[], parentModel?: Model<Dictionary<any>>) {
for (var i = 0; i < pathArr.length; i++) {
// Ignore empty
if (!pathArr[i]) {
@@ -251,7 +255,7 @@ function doGet(obj: ModelOption, pathArr: string[], parentModel?: Model<Dictiona
}
// `path` can be null/undefined
-function getParent(model: Model, path: string | string[]): Model {
+function getParent(model: Model, path: string | readonly string[]): Model {
var getParentMethod = inner(model).getParent;
return getParentMethod ? getParentMethod.call(model, path) : model.parentModel;
}
@@ -264,11 +268,10 @@ type ModelConstructor = typeof Model
enableClassExtend(Model as ModelConstructor);
enableClassCheck(Model as ModelConstructor);
-interface Model extends LineStyleMixin, ItemStyleMixin {}
-
-zrUtil.tsMixin(Model, LineStyleMixin);
+interface Model extends LineStyleMixin, ItemStyleMixin, textStyleMixin {}
+mixin(Model, LineStyleMixin);
+mixin(Model, ItemStyleMixin);
mixin(Model, areaStyleMixin);
mixin(Model, textStyleMixin);
-zrUtil.tsMixin(Model, ItemStyleMixin);
export default Model;
diff --git a/src/model/Series.ts b/src/model/Series.ts
index 608aa14..eeaaf21 100644
--- a/src/model/Series.ts
+++ b/src/model/Series.ts
@@ -553,8 +553,8 @@ class SeriesModel<Opt extends SeriesOption = SeriesOption> extends ComponentMode
interface SeriesModel<Opt extends SeriesOption = SeriesOption>
extends DataFormatMixin, ColorPaletteMixin<Opt>, DataHost {}
-zrUtil.tsMixin(SeriesModel, DataFormatMixin);
-zrUtil.tsMixin(SeriesModel, ColorPaletteMixin);
+zrUtil.mixin(SeriesModel, DataFormatMixin);
+zrUtil.mixin(SeriesModel, ColorPaletteMixin);
export type SeriesModelConstructor = typeof SeriesModel & ExtendableConstructor;
mountExtend(SeriesModel, ComponentModel as SeriesModelConstructor);
diff --git a/src/model/mixin/boxLayout.ts b/src/model/mixin/boxLayout.ts
deleted file mode 100644
index f012468..0000000
--- a/src/model/mixin/boxLayout.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-* 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.
-*/
-
-// @ts-nocheck
-
-export default {
- getBoxLayoutParams: function () {
- return {
- left: this.get('left'),
- top: this.get('top'),
- right: this.get('right'),
- bottom: this.get('bottom'),
- width: this.get('width'),
- height: this.get('height')
- };
- }
-};
\ No newline at end of file
diff --git a/src/model/mixin/itemStyle.ts b/src/model/mixin/itemStyle.ts
index 3c84c26..ee31de2 100644
--- a/src/model/mixin/itemStyle.ts
+++ b/src/model/mixin/itemStyle.ts
@@ -19,7 +19,7 @@
import makeStyleMapper from './makeStyleMapper';
import Model from '../Model';
-import { StyleOption } from 'zrender/src/graphic/Style';
+import { StyleProps } from 'zrender/src/graphic/Style';
const STYLE_LIST = [
['fill', 'color'],
@@ -37,13 +37,13 @@ var getItemStyle = makeStyleMapper(STYLE_LIST);
interface ItemStyleMixin extends Pick<Model, 'get'> {}
-type ItemStyleOption = Pick<
- StyleOption, typeof STYLE_LIST[number][0]
+type ItemStyleProps = Pick<
+ StyleProps, typeof STYLE_LIST[number][0]
>
class ItemStyleMixin {
- getItemStyle(excludes?: string[], includes?: string[]): ItemStyleOption {
+ getItemStyle(excludes?: string[], includes?: string[]): ItemStyleProps {
var style = getItemStyle(this, excludes, includes);
var lineDash = this.getBorderLineDash();
lineDash && ((style as any).lineDash = lineDash);
diff --git a/src/model/mixin/textStyle.ts b/src/model/mixin/textStyle.ts
index f0e021e..6235923 100644
--- a/src/model/mixin/textStyle.ts
+++ b/src/model/mixin/textStyle.ts
@@ -17,50 +17,52 @@
* under the License.
*/
-// @ts-nocheck
-
import * as textContain from 'zrender/src/contain/text';
import * as graphicUtil from '../../util/graphic';
+import Model from '../Model';
+import { LabelOption } from '../../util/types';
-var PATH_COLOR = ['textStyle', 'color'];
+var PATH_COLOR = ['textStyle', 'color'] as const;
-export default {
+class TextStyleMixin {
/**
* Get color property or get color from option.textStyle.color
* @param {boolean} [isEmphasis]
* @return {string}
*/
- getTextColor: function (isEmphasis) {
+ getTextColor(this: Model, isEmphasis?: boolean) {
var ecModel = this.ecModel;
return this.getShallow('color')
|| (
(!isEmphasis && ecModel) ? ecModel.get(PATH_COLOR) : null
);
- },
+ }
/**
* Create font string from fontStyle, fontWeight, fontSize, fontFamily
* @return {string}
*/
- getFont: function () {
+ getFont(this: Model<LabelOption>) {
return graphicUtil.getFont({
fontStyle: this.getShallow('fontStyle'),
fontWeight: this.getShallow('fontWeight'),
fontSize: this.getShallow('fontSize'),
fontFamily: this.getShallow('fontFamily')
}, this.ecModel);
- },
+ }
- getTextRect: function (text) {
+ getTextRect(this: Model<LabelOption> & TextStyleMixin, text: string) {
return textContain.getBoundingRect(
text,
this.getFont(),
this.getShallow('align'),
this.getShallow('verticalAlign') || this.getShallow('baseline'),
- this.getShallow('padding'),
+ this.getShallow('padding') as number[],
this.getShallow('lineHeight'),
- this.getShallow('rich'),
- this.getShallow('truncateText')
+ this.getShallow('rich')
+ // this.getShallow('truncateText')
);
}
-};
\ No newline at end of file
+};
+
+export default TextStyleMixin;
\ No newline at end of file
diff --git a/src/processor/dataFilter.ts b/src/processor/dataFilter.ts
index 7ef78bf..fe09ea6 100644
--- a/src/processor/dataFilter.ts
+++ b/src/processor/dataFilter.ts
@@ -1,3 +1,5 @@
+import { StageHandler } from '../util/types';
+
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -17,9 +19,7 @@
* under the License.
*/
-// @ts-nocheck
-
-export default function (seriesType) {
+export default function (seriesType: string): StageHandler {
return {
seriesType: seriesType,
reset: function (seriesModel, ecModel) {
@@ -34,6 +34,7 @@ export default function (seriesType) {
var name = data.getName(idx);
// If in any legend component the status is not selected.
for (var i = 0; i < legendModels.length; i++) {
+ // @ts-ignore FIXME: LegendModel
if (!legendModels[i].isSelected(name)) {
return false;
}
diff --git a/src/processor/dataSample.ts b/src/processor/dataSample.ts
index 06c617f..9a28b80 100644
--- a/src/processor/dataSample.ts
+++ b/src/processor/dataSample.ts
@@ -19,8 +19,12 @@
// @ts-nocheck
+import { StageHandler } from '../util/types';
+import { Dictionary } from 'zrender/src/core/types';
-var samplers = {
+
+type Sampler = (frame: ArrayLike<number>) => number;
+var samplers: Dictionary<Sampler> = {
average: function (frame) {
var sum = 0;
var count = 0;
@@ -64,11 +68,11 @@ var samplers = {
}
};
-var indexSampler = function (frame, value) {
+var indexSampler = function (frame: ArrayLike<number>) {
return Math.round(frame.length / 2);
};
-export default function (seriesType) {
+export default function (seriesType: string): StageHandler {
return {
seriesType: seriesType,
diff --git a/src/stream/Scheduler.ts b/src/stream/Scheduler.ts
index 49b44fd..287447c 100644
--- a/src/stream/Scheduler.ts
+++ b/src/stream/Scheduler.ts
@@ -27,7 +27,7 @@ import GlobalModel from '../model/Global';
import ExtensionAPI from '../ExtensionAPI';
import {normalizeToArray} from '../util/model';
import {
- StageHandler, StageHandlerOverallReset, VisualType, StageHandlerInput,
+ StageHandlerInternal, StageHandlerOverallReset, VisualType, StageHandler,
Payload, StageHandlerReset, StageHandlerPlan, StageHandlerProgressExecutor, LarginOptionMixin, SeriesOption
} from '../util/types';
import { EChartsType } from '../echarts';
@@ -108,9 +108,9 @@ class Scheduler {
// this file and echarts.js
unfinished: number;
- private _dataProcessorHandlers: StageHandler[];
- private _visualHandlers: StageHandler[];
- private _allHandlers: StageHandler[];
+ private _dataProcessorHandlers: StageHandlerInternal[];
+ private _visualHandlers: StageHandlerInternal[];
+ private _allHandlers: StageHandlerInternal[];
// key: handlerUID
private _stageTaskMap: HashMap<TaskRecord> = createHashMap<TaskRecord>();
@@ -121,8 +121,8 @@ class Scheduler {
constructor(
ecInstance: EChartsType,
api: ExtensionAPI,
- dataProcessorHandlers: StageHandler[],
- visualHandlers: StageHandler[]
+ dataProcessorHandlers: StageHandlerInternal[],
+ visualHandlers: StageHandlerInternal[]
) {
this.ecInstance = ecInstance;
this.api = api;
@@ -295,7 +295,7 @@ class Scheduler {
}
private _performStageTasks(
- stageHandlers: StageHandler[],
+ stageHandlers: StageHandlerInternal[],
ecModel: GlobalModel,
payload: Payload,
opt?: PerformStageTaskOpt
@@ -397,7 +397,7 @@ class Scheduler {
}
private _createSeriesStageTask(
- stageHandler: StageHandler,
+ stageHandler: StageHandlerInternal,
stageHandlerRecord: TaskRecord,
ecModel: GlobalModel,
api: ExtensionAPI
@@ -456,7 +456,7 @@ class Scheduler {
}
private _createOverallStageTask(
- stageHandler: StageHandler,
+ stageHandler: StageHandlerInternal,
stageHandlerRecord: TaskRecord,
ecModel: GlobalModel,
api: ExtensionAPI
@@ -549,20 +549,20 @@ class Scheduler {
}
static wrapStageHandler(
- stageHandler: StageHandlerInput | StageHandlerOverallReset,
+ stageHandler: StageHandler | StageHandlerOverallReset,
visualType: VisualType
- ): StageHandler {
+ ): StageHandlerInternal {
if (isFunction(stageHandler)) {
stageHandler = {
overallReset: stageHandler,
seriesType: detectSeriseType(stageHandler)
- } as StageHandler;
+ } as StageHandlerInternal;
}
- (stageHandler as StageHandler).uid = getUID('stageHandler');
- visualType && ((stageHandler as StageHandler).visualType = visualType);
+ (stageHandler as StageHandlerInternal).uid = getUID('stageHandler');
+ visualType && ((stageHandler as StageHandlerInternal).visualType = visualType);
- return stageHandler as StageHandler;
+ return stageHandler as StageHandlerInternal;
};
}
@@ -599,9 +599,9 @@ function seriesTaskReset(
if (context.useClearVisual) {
context.data.clearAllVisual();
}
- var resetDefines = context.resetDefines = normalizeToArray<StageHandlerProgressExecutor>(
+ var resetDefines = context.resetDefines = normalizeToArray(
context.reset(context.model, context.ecModel, context.api, context.payload)
- );
+ ) as StageHandlerProgressExecutor[];
return resetDefines.length > 1
? map(resetDefines, function (v, idx) {
return makeSeriesTaskProgress(idx);
diff --git a/src/util/layout.ts b/src/util/layout.ts
index 1faa010..870846d 100644
--- a/src/util/layout.ts
+++ b/src/util/layout.ts
@@ -196,7 +196,7 @@ export function getLayoutRect(
positionInfo: BoxLayoutOptionMixin & {
aspect?: number // aspect is width / height
},
- containerRect: RectLike,
+ containerRect: {width: number, height: number},
margin?: number | number[]
): LayoutRect {
margin = formatUtil.normalizeCssArray(margin || 0);
diff --git a/src/util/model.ts b/src/util/model.ts
index b0f45f3..3b45535 100644
--- a/src/util/model.ts
+++ b/src/util/model.ts
@@ -50,7 +50,7 @@ var DUMMY_COMPONENT_NAME_PREFIX = 'series\0';
* @param {*} value
* @return {Array} [value] or value
*/
-export function normalizeToArray<T>(value: T | T[]): T[] {
+export function normalizeToArray<T>(value?: T | T[]): T[] {
return value instanceof Array
? value
: value == null
diff --git a/src/util/types.ts b/src/util/types.ts
index dc2fcc6..53509a3 100644
--- a/src/util/types.ts
+++ b/src/util/types.ts
@@ -161,6 +161,11 @@ export interface PostUpdater {
export type VisualType = 'layout' | 'visual';
+
+export interface StageHandlerReset {
+ (seriesModel: SeriesModel, ecModel: GlobalModel, api: ExtensionAPI, payload?: Payload):
+ StageHandlerProgressExecutor | StageHandlerProgressExecutor[] | void
+}
export interface StageHandlerOverallReset {
(ecModel: GlobalModel, api: ExtensionAPI, payload?: Payload): void
}
@@ -183,15 +188,13 @@ export interface StageHandlerInternal extends StageHandler {
isVisual?: boolean; // PENDING: not used
isLayout?: boolean; // PENDING: not used
}
+
+
export type StageHandlerProgressParams = TaskProgressParams;
export interface StageHandlerProgressExecutor {
dataEach?: (data: List, idx: number) => void;
progress?: (params: StageHandlerProgressParams, data: List) => void;
}
-export interface StageHandlerReset {
- (seriesModel: SeriesModel, ecModel: GlobalModel, api: ExtensionAPI, payload?: Payload):
- StageHandlerProgressExecutor | StageHandlerProgressExecutor[]
-}
export type StageHandlerPlanReturn = TaskPlanCallbackReturn;
export interface StageHandlerPlan {
(seriesModel: SeriesModel, ecModel: GlobalModel, api: ExtensionAPI, payload?: Payload):
@@ -380,7 +383,7 @@ export type OptionDataItem =
export type OptionDataPrimitive = string | number | Date;
// export type ModelOption = Dictionary<any> | any[] | string | number | boolean | ((...args: any) => any);
-export type ModelOption = Dictionary<any>;
+export type ModelOption = any;
export type ThemeOption = Dictionary<any>;
export type DisplayState = 'normal' | 'emphasis';
@@ -553,7 +556,7 @@ interface TextCommonOption extends ShadowOptionMixin {
borderColor?: string
borderWidth?: number
borderRadius?: number | [number, number, number, number]
- padding?: number | [number, number] | [number, number, number, number]
+ padding?: number | number[]
width?: number | string// Percent
height?: number
diff --git a/src/visual/dataColor.ts b/src/visual/dataColor.ts
index 1aa9a77..a1f3809 100644
--- a/src/visual/dataColor.ts
+++ b/src/visual/dataColor.ts
@@ -17,30 +17,34 @@
* under the License.
*/
-// @ts-nocheck
-
// Pick color from palette for each data item.
// Applicable for charts that require applying color palette
// in data level (like pie, funnel, chord).
import {createHashMap} from 'zrender/src/core/util';
+import { StageHandler } from '../util/types';
+import SeriesModel from '../model/Series';
+
+interface SeriesModelWithPaletteScope extends SeriesModel {
+ __paletteScope: any
+}
-export default function (seriesType) {
+export default function (seriesType: string): StageHandler {
return {
getTargetSeries: function (ecModel) {
// Pie and funnel may use diferrent scope
var paletteScope = {};
- var seiresModelMap = createHashMap();
+ var seiresModelMap = createHashMap<SeriesModel>();
ecModel.eachSeriesByType(seriesType, function (seriesModel) {
- seriesModel.__paletteScope = paletteScope;
+ (seriesModel as SeriesModelWithPaletteScope).__paletteScope = paletteScope;
seiresModelMap.set(seriesModel.uid, seriesModel);
});
return seiresModelMap;
},
- reset: function (seriesModel, ecModel) {
+ reset: function (seriesModel) {
var dataAll = seriesModel.getRawData();
- var idxMap = {};
+ var idxMap: {[key: number]: number} = {};
var data = seriesModel.getData();
data.each(function (idx) {
@@ -68,7 +72,7 @@ export default function (seriesType) {
var color = itemModel.get('itemStyle.color')
|| seriesModel.getColorFromPalette(
dataAll.getName(rawIdx) || (rawIdx + ''),
- seriesModel.__paletteScope,
+ (seriesModel as SeriesModelWithPaletteScope).__paletteScope,
dataAll.count()
);
// Data is not filtered
diff --git a/src/visual/seriesColor.ts b/src/visual/seriesColor.ts
index d95ad67..f5bd265 100644
--- a/src/visual/seriesColor.ts
+++ b/src/visual/seriesColor.ts
@@ -21,8 +21,9 @@
import Gradient from 'zrender/src/graphic/Gradient';
import {isFunction} from 'zrender/src/core/util';
+import { StageHandler } from '../util/types';
-export default {
+const seriesColorTask: StageHandler = {
createOnAllSeries: true,
performRawSeries: true,
reset: function (seriesModel, ecModel) {
@@ -73,3 +74,4 @@ export default {
}
}
};
+export default seriesColorTask;
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org