| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- var Util = require('../../util/common');
- var Global = require('../../global');
- var Scale = require('../../scale/');
- var SCALE_TYPES_MAP = {
- linear: 'Linear',
- cat: 'Cat',
- timeCat: 'TimeCat',
- identity: 'Identity'
- };
- var ScaleController =
- /*#__PURE__*/
- function () {
- function ScaleController(cfg) {
- // defs 列定义
- this.defs = {};
- Util.mix(this, cfg);
- }
- var _proto = ScaleController.prototype;
- _proto._getDef = function _getDef(field) {
- var defs = this.defs;
- var def = null;
- if (Global.scales[field] || defs[field]) {
- def = Util.mix({}, Global.scales[field]);
- Util.each(defs[field], function (v, k) {
- if (Util.isNil(v)) {
- delete def[k];
- } else {
- def[k] = v;
- }
- });
- }
- return def;
- };
- _proto._getDefaultType = function _getDefaultType(field, data, def) {
- if (def && def.type) {
- return def.type;
- }
- var type = 'linear';
- var value = Util.Array.firstValue(data, field);
- if (Util.isArray(value)) {
- value = value[0];
- }
- if (Util.isString(value)) {
- type = 'cat';
- }
- return type;
- };
- _proto._getScaleCfg = function _getScaleCfg(type, field, data, def) {
- var values;
- if (def && def.values) {
- values = def.values;
- } else {
- values = Util.Array.values(data, field);
- }
- var cfg = {
- field: field,
- values: values
- };
- if (type !== 'cat' && type !== 'timeCat') {
- if (!def || !(def.min && def.max)) {
- var _Util$Array$getRange = Util.Array.getRange(values),
- min = _Util$Array$getRange.min,
- max = _Util$Array$getRange.max;
- cfg.min = min;
- cfg.max = max;
- cfg.nice = true;
- }
- }
- if (type === 'cat' || type === 'timeCat') {
- cfg.isRounding = false; // used for tickCount calculation
- }
- return cfg;
- };
- _proto.createScale = function createScale(field, data) {
- var self = this;
- var def = self._getDef(field);
- var scale;
- if (!data || !data.length) {
- if (def && def.type) {
- def.field = field;
- scale = new Scale[SCALE_TYPES_MAP[def.type]](def);
- } else {
- scale = new Scale.Identity({
- value: field,
- field: field.toString(),
- values: [field]
- });
- }
- return scale;
- }
- var firstObj = data[0];
- var firstValue = firstObj[field];
- if (firstValue === null) {
- firstValue = Util.Array.firstValue(data, field);
- }
- if (Util.isNumber(field) || Util.isNil(firstValue) && !def) {
- scale = new Scale.Identity({
- value: field,
- field: field.toString(),
- values: [field]
- });
- } else {
- var type = self._getDefaultType(field, data, def);
- var cfg = self._getScaleCfg(type, field, data, def);
- def && Util.mix(cfg, def);
- scale = new Scale[SCALE_TYPES_MAP[type]](cfg);
- }
- return scale;
- };
- return ScaleController;
- }();
- module.exports = ScaleController;
|