UNPKG

2.63 kBJavaScriptView Raw
1function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
2
3function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
4
5function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
6
7var isArray = require('@antv/util/lib/type/isArray');
8var isNil = require('@antv/util/lib/type/isNil');
9var Adjust = require('./base');
10
11var Stack = function (_Adjust) {
12 _inherits(Stack, _Adjust);
13
14 function Stack() {
15 _classCallCheck(this, Stack);
16
17 return _possibleConstructorReturn(this, _Adjust.apply(this, arguments));
18 }
19
20 Stack.prototype._initDefaultCfg = function _initDefaultCfg() {
21 this.xField = null; // 调整对应的 x 方向对应的字段名称
22 this.yField = null; // 调整对应的 y 方向对应的字段名称
23 };
24
25 Stack.prototype.processAdjust = function processAdjust(dataArray) {
26 this.processStack(dataArray);
27 };
28
29 Stack.prototype.processStack = function processStack(dataArray) {
30 var self = this;
31 var xField = self.xField;
32 var yField = self.yField;
33 var count = dataArray.length;
34 var stackCache = {
35 positive: {},
36 negative: {}
37 };
38 // 层叠顺序翻转
39 if (self.reverseOrder) {
40 dataArray = dataArray.slice(0).reverse();
41 }
42 for (var i = 0; i < count; i++) {
43 var data = dataArray[i];
44 for (var j = 0, len = data.length; j < len; j++) {
45 var item = data[j];
46 var x = item[xField] || 0;
47 var y = item[yField];
48 var xkey = x.toString();
49 y = isArray(y) ? y[1] : y;
50 if (!isNil(y)) {
51 var direction = y >= 0 ? 'positive' : 'negative';
52 if (!stackCache[direction][xkey]) {
53 stackCache[direction][xkey] = 0;
54 }
55 item[yField] = [stackCache[direction][xkey], y + stackCache[direction][xkey]];
56 stackCache[direction][xkey] += y;
57 }
58 }
59 }
60 };
61
62 return Stack;
63}(Adjust);
64
65Adjust.Stack = Stack;
66module.exports = Stack;
\No newline at end of file