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 07:15:47 UTC
[incubator-echarts] branch typescript updated: refact: Model#option
can only be object. rename StageHandler
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
The following commit(s) were added to refs/heads/typescript by this push:
new 69ad6bf refact: Model#option can only be object. rename StageHandler
69ad6bf is described below
commit 69ad6bfe6750c087922236a1ec9c758a8c1347fa
Author: pissang <bm...@gmail.com>
AuthorDate: Wed Feb 19 15:15:16 2020 +0800
refact: Model#option can only be object. rename StageHandler
---
src/chart/pie/PieSeries.ts | 17 +++++++++++++++--
src/data/List.ts | 9 ++++++---
src/echarts.ts | 42 ++++++++++++++++++++++++------------------
src/model/Global.ts | 3 +--
src/model/Model.ts | 25 +++++++++----------------
src/util/graphic.ts | 13 +++++--------
src/util/types.ts | 17 +++++++++--------
7 files changed, 69 insertions(+), 57 deletions(-)
diff --git a/src/chart/pie/PieSeries.ts b/src/chart/pie/PieSeries.ts
index cd300c8..f8205b2 100644
--- a/src/chart/pie/PieSeries.ts
+++ b/src/chart/pie/PieSeries.ts
@@ -44,6 +44,18 @@ interface PieLabelOption extends LabelOption {
bleedMargin?: number
distanceToLabelLine?: number
}
+
+interface PieDataItem {
+ itemStyle?: ItemStyleOption
+ label?: PieLabelOption
+ labelLine?: LabelLineOption
+
+ emphasis?: {
+ itemStyle?: ItemStyleOption
+ label?: PieLabelOption
+ labelLine?: LabelLineOption
+ }
+}
export interface PieSeriesOption extends
SeriesOption,
DataSelectableOptionMixin,
@@ -54,6 +66,7 @@ export interface PieSeriesOption extends
roseType?: 'radius' | 'area'
+ // TODO: TYPE Color Callback
itemStyle?: ItemStyleOption
label?: PieLabelOption
labelLine?: LabelLineOption
@@ -73,14 +86,14 @@ export interface PieSeriesOption extends
emphasis?: {
itemStyle?: ItemStyleOption
-
label?: PieLabelOption
-
labelLine?: LabelLineOption
}
animationType?: 'expansion' | 'scale'
animationTypeUpdate?: 'transition' | 'expansion'
+
+ data?: number[] | PieDataItem[]
}
class PieSeries extends SeriesModel<PieSeriesOption> {
diff --git a/src/data/List.ts b/src/data/List.ts
index 7344dbe..5f8dd2e 100644
--- a/src/data/List.ts
+++ b/src/data/List.ts
@@ -36,7 +36,7 @@ import {ArrayLike, Dictionary, FunctionPropertyNames} from 'zrender/src/core/typ
import Element from 'zrender/src/Element';
import {
DimensionIndex, DimensionName, ECElement, DimensionLoose, OptionDataItem,
- ParsedDataValue, ParsedDataNumeric, OrdinalRawValueIndex, DimensionUserOuput
+ ParsedDataValue, ParsedDataNumeric, OrdinalRawValueIndex, DimensionUserOuput, ModelOption
} from '../util/types';
import {parseDate} from '../util/number';
import {isDataItemOption} from '../util/model';
@@ -504,7 +504,6 @@ class List {
}
private _initDataFromProvider(start: number, end: number): void {
- // Optimize.
if (start >= end) {
return;
}
@@ -1559,7 +1558,11 @@ class List {
// FIXME Model proxy ?
getItemModel(idx: number): Model {
var hostModel = this.hostModel;
- return new Model(this.getRawDataItem(idx), hostModel, hostModel && hostModel.ecModel);
+ var dataItem = this.getRawDataItem(idx) as ModelOption;
+ if (this._rawData.pure || !isDataItemOption(dataItem)) {
+ dataItem = { value: dataItem };
+ }
+ return new Model(dataItem, hostModel, hostModel && hostModel.ecModel);
}
/**
diff --git a/src/echarts.ts b/src/echarts.ts
index 57dbdc2..4850a97 100644
--- a/src/echarts.ts
+++ b/src/echarts.ts
@@ -54,8 +54,8 @@ import {ECEventProcessor} from './util/ECEventProcessor';
import {
Payload, PayloadItem, ECElement, RendererType, ECEvent,
ActionHandler, ActionInfo, OptionPreprocessor, PostUpdater,
- LoadingEffect, LoadingEffectCreator, StageHandler,
- StageHandlerOverallReset, VisualType, StageHandlerInput,
+ LoadingEffect, LoadingEffectCreator, StageHandlerInternal,
+ StageHandlerOverallReset, VisualType, StageHandler,
ViewRootGroup, DimensionDefinitionLoose, ECEventData, ThemeOption,
ECOption,
ECUnitOption,
@@ -268,7 +268,7 @@ class ECharts {
var api = this._api = createExtensionAPI(this);
// Sort on demand
- function prioritySortFunc(a: StageHandler, b: StageHandler): number {
+ function prioritySortFunc(a: StageHandlerInternal, b: StageHandlerInternal): number {
return a.__prio - b.__prio;
}
timsort(visualFuncs, prioritySortFunc);
@@ -1873,13 +1873,13 @@ var actions: {
*/
var eventActionMap: {[eventType: string]: string} = {};
-var dataProcessorFuncs: StageHandler[] = [];
+var dataProcessorFuncs: StageHandlerInternal[] = [];
var optionPreprocessorFuncs: OptionPreprocessor[] = [];
var postUpdateFuncs: PostUpdater[] = [];
-var visualFuncs: StageHandler[] = [];
+var visualFuncs: StageHandlerInternal[] = [];
var themeStorage: {[themeName: string]: ThemeOption} = {};
@@ -2049,8 +2049,8 @@ export function registerPreprocessor(preprocessorFunc: OptionPreprocessor): void
}
export function registerProcessor(
- priority: number | StageHandlerInput | StageHandlerOverallReset,
- processor?: StageHandlerInput | StageHandlerOverallReset
+ priority: number | StageHandler | StageHandlerOverallReset,
+ processor?: StageHandler | StageHandlerOverallReset
): void {
normalizeRegister(dataProcessorFuncs, priority, processor, PRIORITY_PROCESSOR_FILTER);
}
@@ -2138,29 +2138,35 @@ export function getCoordinateSystemDimensions(type: string): DimensionDefinition
* Most visual encoding like color are common for different chart
* But each chart has it's own layout algorithm
*/
-export function registerLayout(
- priority: number | StageHandlerInput | StageHandlerOverallReset,
- layoutTask?: StageHandlerInput | StageHandlerOverallReset
+function registerLayout(priority: number, layoutTask: StageHandler | StageHandlerOverallReset): void
+function registerLayout(layoutTask: StageHandler | StageHandlerOverallReset): void
+function registerLayout(
+ priority: number | StageHandler | StageHandlerOverallReset,
+ layoutTask?: StageHandler | StageHandlerOverallReset
): void {
normalizeRegister(visualFuncs, priority, layoutTask, PRIORITY_VISUAL_LAYOUT, 'layout');
}
-export function registerVisual(
- priority: number | StageHandlerInput | StageHandlerOverallReset,
- visualTask?: StageHandlerInput | StageHandlerOverallReset
+function registerVisual(priority: number, layoutTask: StageHandler | StageHandlerOverallReset): void
+function registerVisual(layoutTask: StageHandler | StageHandlerOverallReset): void
+function registerVisual(
+ priority: number | StageHandler | StageHandlerOverallReset,
+ visualTask?: StageHandler | StageHandlerOverallReset
): void {
normalizeRegister(visualFuncs, priority, visualTask, PRIORITY_VISUAL_CHART, 'visual');
}
+export {registerLayout, registerVisual};
+
function normalizeRegister(
- targetList: StageHandlerInput[],
- priority: number | StageHandlerInput | StageHandlerOverallReset,
- fn: StageHandlerInput | StageHandlerOverallReset,
+ targetList: StageHandler[],
+ priority: number | StageHandler | StageHandlerOverallReset,
+ fn: StageHandler | StageHandlerOverallReset,
defaultPriority: number,
visualType?: VisualType
): void {
if (isFunction(priority) || isObject(priority)) {
- fn = priority as (StageHandlerInput | StageHandlerOverallReset);
+ fn = priority as (StageHandler | StageHandlerOverallReset);
priority = defaultPriority;
}
@@ -2170,7 +2176,7 @@ function normalizeRegister(
}
// Check duplicate
each(targetList, function (wrap) {
- assert((wrap as StageHandler).__raw !== fn);
+ assert((wrap as StageHandlerInternal).__raw !== fn);
});
}
diff --git a/src/model/Global.ts b/src/model/Global.ts
index c127fa9..0ae4292 100644
--- a/src/model/Global.ts
+++ b/src/model/Global.ts
@@ -51,8 +51,7 @@ import {
ThemeOption,
ComponentOption,
ComponentMainType,
- ComponentSubType,
- ColorPaletteOptionMixin
+ ComponentSubType
} from '../util/types';
import OptionManager from './OptionManager';
import Scheduler from '../stream/Scheduler';
diff --git a/src/model/Model.ts b/src/model/Model.ts
index b3f73af..e9f3351 100644
--- a/src/model/Model.ts
+++ b/src/model/Model.ts
@@ -36,20 +36,12 @@ import textStyleMixin from './mixin/textStyle';
import {LineStyleMixin} from './mixin/lineStyle';
import {ItemStyleMixin} from './mixin/itemStyle';
import GlobalModel from './Global';
-import { ModelOption, ECUnitOption } from '../util/types';
+import { ModelOption } from '../util/types';
import { Dictionary } from 'zrender/src/core/types';
var mixin = zrUtil.mixin;
var inner = makeInner();
-// Since model.option can be not only `Dictionary` but also primary types,
-// we do this conditional type to avoid getting type 'never';
-type Key<Opt> = Opt extends ECUnitOption
- ? keyof Opt : string;
-type Value<Opt, R> = Opt extends ECUnitOption
- ? (R extends keyof Opt ? Opt[R] : ModelOption)
- : ModelOption;
-
/**
* @alias module:echarts/model/Model
* @constructor
@@ -121,7 +113,7 @@ class Model<Opt extends ModelOption = ModelOption> {
path: [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?
+ // TODO: TYPE strict key check?
// get(path: string | string[], ignoreParent?: boolean): ModelOption;
get(path: string | string[], ignoreParent?: boolean): ModelOption {
if (path == null) {
@@ -140,11 +132,12 @@ class Model<Opt extends ModelOption = ModelOption> {
): Opt[R] {
var option = this.option;
- var val = option == null ? option : option[key];
- var parentModel = !ignoreParent && getParent(this, key as string);
- if (val == null && parentModel) {
- // FIXME:TS do not know how to make it works
- val = parentModel.getShallow(key);
+ var val: Opt[R] = option == null ? null : option[key];
+ if (val == null) {
+ var parentModel = !ignoreParent && getParent(this, key as string);
+ if (parentModel) {
+ val = (parentModel as Model<Opt>).getShallow(key);
+ }
}
return val;
}
@@ -236,7 +229,7 @@ function doGet(obj: ModelOption, pathArr: string[], parentModel?: Model<Dictiona
continue;
}
// obj could be number/string/... (like 0)
- obj = (obj && typeof obj === 'object') ? obj[pathArr[i] as keyof ModelOption] : null;
+ obj = obj[pathArr[i]];
if (obj == null) {
break;
}
diff --git a/src/util/graphic.ts b/src/util/graphic.ts
index 63174dc..7e18431 100644
--- a/src/util/graphic.ts
+++ b/src/util/graphic.ts
@@ -50,7 +50,7 @@ import { PatternObject } from 'zrender/src/graphic/Pattern';
import { GradientObject } from 'zrender/src/graphic/Gradient';
import Element, { ElementEvent } from 'zrender/src/Element';
import Model from '../model/Model';
-import { AnimationOptionMixin, LabelOption, AnimationDelayCallbackParam } from './types';
+import { AnimationOptionMixin, LabelOption, AnimationDelayCallbackParam, DisplayState } from './types';
import GlobalModel from '../model/Global';
@@ -77,9 +77,6 @@ const _highlightKeyMap: Dictionary<number> = {};
const _customShapeMap: Dictionary<{ new(): Path }> = {};
-
-type AvailableStates = typeof EMPHASIS | typeof NORMAL;
-
type ExtendShapeOpt = Parameters<typeof Path.extend>[0];
type ExtendShapeReturn = ReturnType<typeof Path.extend>;
@@ -94,7 +91,7 @@ type ExtendedProps = {
__highByOuter: number
__highDownSilentOnTouch: boolean
- __highDownOnUpdate: (fromState: AvailableStates, toState: AvailableStates) => void
+ __highDownOnUpdate: (fromState: DisplayState, toState: DisplayState) => void
__highDownDispatcher: boolean
@@ -514,8 +511,8 @@ function traverseUpdate<T>(
commonParam?: T
) {
// If root is group, also enter updater for `highDownOnUpdate`.
- var fromState: AvailableStates = NORMAL;
- var toState: AvailableStates = NORMAL;
+ var fromState: DisplayState = NORMAL;
+ var toState: DisplayState = NORMAL;
var trigger;
// See the rule of `highDownOnUpdate` on `graphic.setAsHighDownDispatcher`.
el.__highlighted && (fromState = EMPHASIS, trigger = true);
@@ -731,7 +728,7 @@ export function setLabelStyle(
getFormattedLabel?: (
labelDataIndex: number,
state:
- AvailableStates,
+ DisplayState,
dataType: string,
labelDimIndex: number
) => string
diff --git a/src/util/types.ts b/src/util/types.ts
index 26e983b..dc2fcc6 100644
--- a/src/util/types.ts
+++ b/src/util/types.ts
@@ -161,27 +161,28 @@ export interface PostUpdater {
export type VisualType = 'layout' | 'visual';
-export interface StageHandlerInput {
+export interface StageHandlerOverallReset {
+ (ecModel: GlobalModel, api: ExtensionAPI, payload?: Payload): void
+}
+export interface StageHandler {
seriesType?: string;
createOnAllSeries?: boolean;
performRawSeries?: boolean;
plan?: StageHandlerPlan;
overallReset?: StageHandlerOverallReset;
reset?: StageHandlerReset;
+ getTargetSeries?: (ecModel: GlobalModel, api: ExtensionAPI) => HashMap<SeriesModel>;
}
-export interface StageHandler extends StageHandlerInput {
+
+export interface StageHandlerInternal extends StageHandler {
uid: string;
visualType?: VisualType;
// modifyOutputEnd?: boolean;
- getTargetSeries: (ecModel: GlobalModel, api: ExtensionAPI) => HashMap<SeriesModel>;
__prio: number;
- __raw: StageHandlerInput | StageHandlerOverallReset;
+ __raw: StageHandler | StageHandlerOverallReset;
isVisual?: boolean; // PENDING: not used
isLayout?: boolean; // PENDING: not used
}
-export interface StageHandlerOverallReset {
- (ecModel: GlobalModel, api: ExtensionAPI, payload?: Payload): void
-}
export type StageHandlerProgressParams = TaskProgressParams;
export interface StageHandlerProgressExecutor {
dataEach?: (data: List, idx: number) => void;
@@ -379,7 +380,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 = any;
+export type ModelOption = Dictionary<any>;
export type ThemeOption = Dictionary<any>;
export type DisplayState = 'normal' | 'emphasis';
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org