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;