NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/@antv/g2/lib/facet/tree.js

299 lines
7.3 KiB
Java
Raw Normal View History

2023-09-14 14:47:11 +08:00
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
/**
* @fileOverview tree facets
* @author dxq613@gmail.com
*/
var Base = require('./base');
var Util = require('../util');
var assign = Util.assign;
var Tree = /*#__PURE__*/function (_Base) {
_inheritsLoose(Tree, _Base);
function Tree() {
return _Base.apply(this, arguments) || this;
}
var _proto = Tree.prototype;
_proto.getDefaultCfg = function getDefaultCfg() {
var cfg = _Base.prototype.getDefaultCfg.call(this);
cfg.type = 'tree';
cfg.line = {
lineWidth: 1,
stroke: '#ddd'
};
cfg.lineSmooth = false;
return cfg;
};
_proto.generateFacets = function generateFacets(data) {
var self = this;
var fields = self.fields;
if (!fields.length) {
throw 'Please specify for the fields for facet!';
}
var rst = [];
var root = self.getRootFacet(data); // if (self.showRoot) {
rst.push(root); // }
root.children = self.getChildFacets(data, 1, rst);
self.setRegion(rst);
return rst;
};
_proto.getRootFacet = function getRootFacet(data) {
var self = this;
var facet = {
type: self.type,
rows: self.getRows(),
rowIndex: 0,
colIndex: 0,
colValue: self.rootTitle,
data: data
};
return facet;
};
_proto.getRows = function getRows() {
return this.fields.length + 1;
} // get child
;
_proto.getChildFacets = function getChildFacets(data, level, arr) {
var self = this;
var fields = self.fields;
var length = fields.length;
if (length < level) {
return;
}
var rst = [];
var field = fields[level - 1];
var values = self.getFieldValues(field, data);
values.forEach(function (value, index) {
var conditions = [{
field: field,
value: value,
values: values
}];
var filter = self.getFilter(conditions);
var subData = data.filter(filter);
if (subData.length) {
var facet = {
type: self.type,
colValue: value,
colField: field,
colIndex: index,
rows: self.getRows(),
rowIndex: level,
data: subData,
children: self.getChildFacets(subData, level + 1, arr)
};
rst.push(facet);
arr.push(facet);
}
});
return rst;
} // 设置 region
;
_proto.setRegion = function setRegion(facets) {
var self = this;
self.forceColIndex(facets);
facets.forEach(function (facet) {
facet.region = self.getRegion(facet.rows, facet.cols, facet.colIndex, facet.rowIndex);
});
} // set column index of facets
;
_proto.forceColIndex = function forceColIndex(facets) {
var self = this;
var leafs = [];
var index = 0;
facets.forEach(function (facet) {
if (self.isLeaf(facet)) {
leafs.push(facet);
facet.colIndex = index;
index++;
}
});
leafs.forEach(function (facet) {
facet.cols = leafs.length;
});
var maxLevel = self.fields.length;
for (var i = maxLevel - 1; i >= 0; i--) {
var levelFacets = self.getFacetsByLevel(facets, i); // var yIndex = maxLevel - i;
for (var j = 0; j < levelFacets.length; j++) {
var facet = levelFacets[j];
if (!self.isLeaf(facet)) {
facet.originColIndex = facet.colIndex;
facet.colIndex = self.getRegionIndex(facet.children);
facet.cols = leafs.length;
}
}
}
} // get facet use level
;
_proto.getFacetsByLevel = function getFacetsByLevel(facets, level) {
var rst = [];
facets.forEach(function (facet) {
if (facet.rowIndex === level) {
rst.push(facet);
}
});
return rst;
} // set facets region
;
_proto.getRegion = function getRegion(rows, cols, xIndex, yIndex) {
var xWidth = 1 / cols; // x轴方向的每个分面的偏移
var yWidth = 1 / rows; // y轴方向的每个分面的偏移
var start = {
x: xWidth * xIndex,
y: yWidth * yIndex
};
var end = {
x: start.x + xWidth,
y: start.y + yWidth * 2 / 3 // 预留1/3的空隙方便添加连接线
};
return {
start: start,
end: end
};
} // if the facet has children , make it's column index in the middle of it's children
;
_proto.getRegionIndex = function getRegionIndex(children) {
var first = children[0];
var last = children[children.length - 1];
return (last.colIndex - first.colIndex) / 2 + first.colIndex;
} // is a leaf without children
;
_proto.isLeaf = function isLeaf(facet) {
return !facet.children || !facet.children.length;
};
_proto.setXAxis = function setXAxis(xField, axes, facet) {
// 当是最后一行或者下面没有 view 时文本不显示
if (facet.rowIndex !== facet.rows - 1) {
axes[xField].label = null;
axes[xField].title = null;
}
} // 设置 y 坐标轴的文本、title 是否显示
;
_proto.setYAxis = function setYAxis(yField, axes, facet) {
if (facet.originColIndex !== 0 && facet.colIndex !== 0) {
axes[yField].title = null;
axes[yField].label = null;
}
} // 绘制完成后
;
_proto.onPaint = function onPaint() {
_Base.prototype.onPaint.call(this);
this.group.clear();
if (this.facets && this.line) {
this.drawLines(this.facets, this.group);
}
};
_proto.drawLines = function drawLines(facets, group) {
var self = this;
var lineGroup = group.addGroup();
facets.forEach(function (facet) {
if (!self.isLeaf(facet)) {
var children = facet.children;
self._addFacetLines(facet, children, lineGroup);
}
});
} // add lines with it's children
;
_proto._addFacetLines = function _addFacetLines(facet, children, group) {
var self = this;
var view = facet.view;
var region = view.getViewRegion();
var start = {
x: region.start.x + (region.end.x - region.start.x) / 2,
y: region.start.y
};
children.forEach(function (subFacet) {
var subRegion = subFacet.view.getViewRegion();
var end = {
x: subRegion.start.x + (subRegion.end.x - subRegion.start.x) / 2,
y: subRegion.end.y
};
var middle1 = {
x: start.x,
y: start.y + (end.y - start.y) / 2
};
var middle2 = {
x: end.x,
y: middle1.y
};
self._drawLine([start, middle1, middle2, end], group);
});
};
_proto._getPath = function _getPath(points) {
var self = this;
var path = [];
var smooth = self.lineSmooth;
if (smooth) {
path.push(['M', points[0].x, points[0].y]);
path.push(['C', points[1].x, points[1].y, points[2].x, points[2].y, points[3].x, points[3].y]);
} else {
points.forEach(function (point, index) {
if (index === 0) {
path.push(['M', point.x, point.y]);
} else {
path.push(['L', point.x, point.y]);
}
});
}
return path;
} // draw line width points
;
_proto._drawLine = function _drawLine(points, group) {
var self = this;
var path = self._getPath(points);
var line = self.line;
group.addShape('path', {
attrs: assign({
path: path
}, line)
});
};
return Tree;
}(Base);
module.exports = Tree;