UNPKG

@antv/f2

Version:

Charts for mobile visualization.

241 lines (240 loc) 6.88 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _scale = require("@antv/scale"); var _util = require("@antv/util"); var _catTick = _interopRequireDefault(require("./scale/cat-tick")); var _linearTick = _interopRequireDefault(require("./scale/linear-tick")); // 覆盖0.3.x的 cat 方法 (0, _scale.registerTickMethod)('cat', _catTick.default); (0, _scale.registerTickMethod)('time-cat', _catTick.default); // 覆盖linear 度量的tick算法 (0, _scale.registerTickMethod)('wilkinson-extended', _linearTick.default); var ScaleController = /*#__PURE__*/function () { function ScaleController(data) { (0, _classCallCheck2.default)(this, ScaleController); this.data = data; this.options = {}; this.scales = {}; } (0, _createClass2.default)(ScaleController, [{ key: "_getType", value: function _getType(option) { var type = option.type, values = option.values, field = option.field; if (type) { return type; } if ((0, _util.isNumber)(field) || (0, _util.isNil)(values[0]) && field) { return 'identity'; } if (typeof values[0] === 'number') { return 'linear'; } return 'cat'; } }, { key: "_getOption", value: function _getOption(option) { var values = option.values, field = option.field, justifyContent = option.justifyContent; var type = this._getType(option); option.type = type; // identity if (type === 'identity') { option.field = field.toString(); option.values = [field]; return option; } // linear 类型 if (type === 'linear') { // 设置默认nice if (typeof option.nice !== 'boolean') { option.nice = true; } // 重置最大最小 var _getRange = (0, _util.getRange)(values), min = _getRange.min, max = _getRange.max; if ((0, _util.isNil)(option.min)) { option.min = min; } if ((0, _util.isNil)(option.max)) { option.max = max; } option.values = values.sort(function (a, b) { return a - b; }); return option; } // 分类类型和 timeCat 类型,调整 range if (type === 'cat' || type === 'timeCat') { if (option.range) { return option; } var count = values.length; var range = [0, 1]; // 如果只有一项,显示在中间 if (count === 1) { range = [0.5, 1]; } else if (justifyContent) { // 居中 var offset = 1 / count * 0.5; range = [offset, 1 - offset]; } else { // 最后留 1 / count var _offset = 1 / count; range = [0, 1 - _offset]; } option.range = range; } return option; } }, { key: "createScale", value: function createScale(option) { var type = option.type; if ((0, _util.isFunction)(type)) { return new type(option); } var ScaleClass = (0, _scale.getScale)(type); return new ScaleClass(option); } // 更新或创建scale }, { key: "setScale", value: function setScale(field, option) { var options = this.options, scales = this.scales; options[field] = (0, _util.mix)({}, options[field], option); // 如果scale有更新,scale 也需要重新创建 if (scales[field]) { delete scales[field]; } } }, { key: "create", value: function create(options) { this.update(options); } }, { key: "update", value: function update(options) { var _this = this; if (!options) return; (0, _util.each)(options, function (option, field) { _this.setScale(field, option); }); // 为了让外部感知到scale有变化 this.scales = (0, _objectSpread2.default)({}, this.scales); } }, { key: "changeData", value: function changeData(data) { this.data = data; this.scales = {}; } }, { key: "getData", value: function getData() { return this.data; } }, { key: "getScale", value: function getScale(field) { var scales = this.scales, options = this.options, data = this.data; var scale = scales[field]; if (scale) { return scale; } var option = options[field]; if (!option) { return null; } var values = option.values ? option.values : data ? (0, _util.valuesOfKey)(data, field) : []; var scaleOption = this._getOption((0, _objectSpread2.default)((0, _objectSpread2.default)({}, option), {}, { field: field, values: values })); var newScale = this.createScale(scaleOption); scales[field] = newScale; return newScale; } }, { key: "getScales", value: function getScales() { var _this2 = this; var options = this.options, scales = this.scales; (0, _util.each)(options, function (option, field) { _this2.getScale(field); }); return scales; } }, { key: "adjustStartZero", value: function adjustStartZero(scale) { var options = this.options; var field = scale.field, min = scale.min, max = scale.max; var option = options[field]; // 如果有定义,则不处理 if (option && option.min) { return; } if (min > 0) { scale.change({ min: 0 }); } else if (max < 0) { scale.change({ max: 0 }); } } // 饼图下的scale调整 }, { key: "adjustPieScale", value: function adjustPieScale(scale) { var options = this.options; var field = scale.field; var option = options[field]; if (option && !(0, _util.isNil)(option.nice)) { return null; } scale.change({ nice: false }); } // 获取scale 在 0点对位置的值 }, { key: "getZeroValue", value: function getZeroValue(scale) { var min = scale.min, max = scale.max; var value; if (min >= 0) { value = min; } else if (max <= 0) { value = max; } else { value = 0; } return scale.scale(value); } }]); return ScaleController; }(); var _default = ScaleController; exports.default = _default;