@antv/f2
Version:
Charts for mobile visualization.
241 lines (240 loc) • 6.88 kB
JavaScript
"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;