You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by su...@apache.org on 2020/10/29 03:58:45 UTC

[incubator-echarts] 01/02: ts: fix incorrect locale params and fix type check of scales.

This is an automated email from the ASF dual-hosted git repository.

sushuang pushed a commit to branch timeline-scale
in repository https://gitbox.apache.org/repos/asf/incubator-echarts.git

commit bba8146981c2b2a2661470eb95e62836da147a9b
Author: 100pah <su...@gmail.com>
AuthorDate: Thu Oct 29 02:53:21 2020 +0800

    ts: fix incorrect locale params and fix type check of scales.
---
 src/component/timeline/SliderTimelineView.ts |  2 +-
 src/scale/Interval.ts                        |  4 ++--
 src/scale/Ordinal.ts                         | 25 +++++++++++++++----------
 src/scale/Scale.ts                           | 10 +++++-----
 src/scale/Time.ts                            | 17 ++++++++++-------
 src/util/types.ts                            |  1 +
 6 files changed, 34 insertions(+), 25 deletions(-)

diff --git a/src/component/timeline/SliderTimelineView.ts b/src/component/timeline/SliderTimelineView.ts
index d934d6f..f8a5bc8 100644
--- a/src/component/timeline/SliderTimelineView.ts
+++ b/src/component/timeline/SliderTimelineView.ts
@@ -738,7 +738,7 @@ function createScaleByModel(model: SliderTimelineModel, axisType?: string): Scal
                 });
             case 'time':
                 return new TimeScale({
-                    lang: model.ecModel.getLocaleModel(),
+                    locale: model.ecModel.getLocaleModel(),
                     useUTC: model.ecModel.get('useUTC')
                 });
             default:
diff --git a/src/scale/Interval.ts b/src/scale/Interval.ts
index a70613e..ffc9799 100644
--- a/src/scale/Interval.ts
+++ b/src/scale/Interval.ts
@@ -22,11 +22,11 @@ import * as numberUtil from '../util/number';
 import * as formatUtil from '../util/format';
 import Scale from './Scale';
 import * as helper from './helper';
-import {ScaleTick} from '../util/types';
+import {ScaleTick, Dictionary} from '../util/types';
 
 const roundNumber = numberUtil.round;
 
-class IntervalScale extends Scale {
+class IntervalScale<SETTING extends Dictionary<unknown> = Dictionary<unknown>> extends Scale<SETTING> {
 
     static type = 'interval';
     type = 'interval';
diff --git a/src/scale/Ordinal.ts b/src/scale/Ordinal.ts
index 502bb10..98fbf0f 100644
--- a/src/scale/Ordinal.ts
+++ b/src/scale/Ordinal.ts
@@ -37,10 +37,14 @@ import {
     ScaleTick
 } from '../util/types';
 import { AxisBaseOption } from '../coord/axisCommonTypes';
-import { isArray } from 'zrender/src/core/util';
+import { isArray, map, isObject } from 'zrender/src/core/util';
 
+type OrdinalScaleSetting = {
+    ordinalMeta?: OrdinalMeta | AxisBaseOption['data'];
+    extent?: [number, number];
+};
 
-class OrdinalScale extends Scale {
+class OrdinalScale extends Scale<OrdinalScaleSetting> {
 
     static type = 'ordinal';
     readonly type = 'ordinal';
@@ -48,20 +52,21 @@ class OrdinalScale extends Scale {
     private _ordinalMeta: OrdinalMeta;
     private _categorySortInfo: OrdinalSortInfo[];
 
-
-    constructor(setting?: {
-        ordinalMeta?: OrdinalMeta | AxisBaseOption['data'],
-        extent?: [number, number]
-    }) {
+    constructor(setting?: OrdinalScaleSetting) {
         super(setting);
 
         let ordinalMeta = this.getSetting('ordinalMeta');
         // Caution: Should not use instanceof, consider ec-extensions using
         // import approach to get OrdinalMeta class.
-        if (!ordinalMeta || isArray(ordinalMeta)) {
-            ordinalMeta = new OrdinalMeta({categories: ordinalMeta});
+        if (!ordinalMeta) {
+            ordinalMeta = new OrdinalMeta({});
+        }
+        if (isArray(ordinalMeta)) {
+            ordinalMeta = new OrdinalMeta({
+                categories: map(ordinalMeta, item => (isObject(item) ? item.value : item))
+            });
         }
-        this._ordinalMeta = ordinalMeta;
+        this._ordinalMeta = ordinalMeta as OrdinalMeta;
         this._categorySortInfo = [];
         this._extent = this.getSetting('extent') || [0, ordinalMeta.categories.length - 1];
     }
diff --git a/src/scale/Scale.ts b/src/scale/Scale.ts
index 458fd4a..815ae54 100644
--- a/src/scale/Scale.ts
+++ b/src/scale/Scale.ts
@@ -31,11 +31,11 @@ import {
 import { ScaleRawExtentInfo } from '../coord/scaleRawExtentInfo';
 
 
-abstract class Scale {
+abstract class Scale<SETTING extends Dictionary<unknown> = Dictionary<unknown>> {
 
     type: string;
 
-    private _setting: Dictionary<any>;
+    private _setting: SETTING;
 
     protected _extent: [number, number];
 
@@ -44,12 +44,12 @@ abstract class Scale {
     // Inject
     readonly rawExtentInfo: ScaleRawExtentInfo;
 
-    constructor(setting?: Dictionary<any>) {
-        this._setting = setting || {};
+    constructor(setting?: SETTING) {
+        this._setting = setting || {} as SETTING;
         this._extent = [Infinity, -Infinity];
     }
 
-    getSetting(name: string): any {
+    getSetting<KEY extends keyof SETTING>(name: KEY): SETTING[KEY] {
         return this._setting[name];
     }
 
diff --git a/src/scale/Time.ts b/src/scale/Time.ts
index 70eb9a9..a5157b4 100644
--- a/src/scale/Time.ts
+++ b/src/scale/Time.ts
@@ -99,14 +99,12 @@ const bisect = function (
     return lo;
 };
 
-interface TimeScale {
-    constructor(settings?: {
-        locale: Model<LocaleOption>,
-        useUTC: boolean
-    }): void
-}
+type TimeScaleSetting = {
+    locale: Model<LocaleOption>;
+    useUTC: boolean;
+};
 
-class TimeScale extends IntervalScale {
+class TimeScale extends IntervalScale<TimeScaleSetting> {
 
     static type = 'time';
     readonly type = 'time';
@@ -115,6 +113,10 @@ class TimeScale extends IntervalScale {
 
     _minLevelUnit: TimeUnit;
 
+    constructor(settings?: TimeScaleSetting) {
+        super(settings);
+    }
+
     /**
      * Get label is mainly for other components like dataZoom, tooltip.
      */
@@ -125,6 +127,7 @@ class TimeScale extends IntervalScale {
             fullLeveledFormatter[
                 getDefaultFormatPrecisionOfInterval(getPrimaryTimeUnit(this._minLevelUnit))
             ] || fullLeveledFormatter.second,
+            this.getSetting('locale'),
             useUTC
         );
     }
diff --git a/src/util/types.ts b/src/util/types.ts
index c2411d8..2d7f6aa 100644
--- a/src/util/types.ts
+++ b/src/util/types.ts
@@ -477,6 +477,7 @@ export type ECUnitOption = {
     backgroundColor?: ZRColor
     darkMode?: boolean | 'auto'
     textStyle?: Pick<LabelOption, 'color' | 'fontStyle' | 'fontWeight' | 'fontSize' | 'fontFamily'>
+    useUTC?: boolean
 
     [key: string]: ComponentOption | ComponentOption[] | Dictionary<unknown> | unknown
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org