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

290 lines
9.7 KiB
Java
Raw Normal View History

2023-09-14 14:47:11 +08:00
import { __assign, __extends } from "tslib";
/**
* Create By Bruce Too
* On 2020-02-10
*/
import { assign, deepMix, each } from '@antv/util';
import { DIRECTION, VIEW_LIFE_CIRCLE } from '../constant';
import { getFactTitleConfig } from '../util/facet';
import { Facet } from './facet';
/**
* @ignore
* Tree Facet
*/
var Tree = /** @class */ (function (_super) {
__extends(Tree, _super);
function Tree() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.afterChartRender = function () {
if (_this.facets && _this.cfg.line) {
_this.container.clear();
_this.drawLines(_this.facets);
}
};
return _this;
}
Tree.prototype.afterEachView = function (view, facet) {
this.processAxis(view, facet);
};
Tree.prototype.beforeEachView = function (view, facet) {
};
Tree.prototype.init = function () {
_super.prototype.init.call(this);
this.view.on(VIEW_LIFE_CIRCLE.AFTER_RENDER, this.afterChartRender);
};
Tree.prototype.getDefaultCfg = function () {
return deepMix({}, _super.prototype.getDefaultCfg.call(this), {
type: 'tree',
line: {
style: {
lineWidth: 1,
stroke: '#ddd'
},
smooth: false,
},
showTitle: true,
title: _super.prototype.getDefaultTitleCfg.call(this),
});
};
Tree.prototype.generateFacets = function (data) {
var fields = this.cfg.fields;
if (!fields.length) {
throw new Error('Please specify for the fields for rootFacet!');
}
var rst = [];
var rootFacet = {
type: this.cfg.type,
data: data,
region: null,
rowValuesLength: this.getRows(),
columnValuesLength: 1,
rowIndex: 0,
columnIndex: 0,
rowField: '',
columnField: '',
rowValue: '',
columnValue: '',
};
rst.push(rootFacet);
rootFacet.children = this.getChildFacets(data, 1, rst);
this.setRegion(rst);
return rst;
};
Tree.prototype.setRegion = function (facets) {
var _this = this;
this.forceColIndex(facets);
facets.forEach(function (facet) {
// @ts-ignore 允许调整
facet.region = _this.getRegion(facet.rowValuesLength, facet.columnValuesLength, facet.columnIndex, facet.rowIndex);
});
};
Tree.prototype.getRegion = function (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
};
};
Tree.prototype.forceColIndex = function (facets) {
var _this = this;
var leafs = [];
var index = 0;
facets.forEach(function (facet) {
if (_this.isLeaf(facet)) {
leafs.push(facet);
// @ts-ignore 允许调整
facet.columnIndex = index;
index++;
}
});
leafs.forEach(function (facet) {
// @ts-ignore
facet.columnValuesLength = leafs.length;
});
var maxLevel = this.cfg.fields.length;
for (var i = maxLevel - 1; i >= 0; i--) {
var levelFacets = this.getFacetsByLevel(facets, i);
// var yIndex = maxLevel - i;
for (var _i = 0, levelFacets_1 = levelFacets; _i < levelFacets_1.length; _i++) {
var facet = levelFacets_1[_i];
if (!this.isLeaf(facet)) {
facet.originColIndex = facet.columnIndex;
// @ts-ignore
facet.columnIndex = this.getRegionIndex(facet.children);
// @ts-ignore
facet.columnValuesLength = leafs.length;
}
}
}
};
// get facet use level
Tree.prototype.getFacetsByLevel = function (facets, level) {
var rst = [];
facets.forEach(function (facet) {
if (facet.rowIndex === level) {
rst.push(facet);
}
});
return rst;
};
// if the facet has children , make it's column index in the middle of it's children
Tree.prototype.getRegionIndex = function (children) {
var first = children[0];
var last = children[children.length - 1];
return (last.columnIndex - first.columnIndex) / 2 + first.columnIndex;
};
// is a leaf without children
Tree.prototype.isLeaf = function (facet) {
return !facet.children || !facet.children.length;
};
Tree.prototype.getRows = function () {
return this.cfg.fields.length + 1;
};
// get child
Tree.prototype.getChildFacets = function (data, level, arr) {
var _this = this;
// [ 'grade', 'class' ]
var fields = this.cfg.fields;
var length = fields.length;
if (length < level) {
return;
}
var rst = [];
// get fist level except root node
var field = fields[level - 1];
// get field value
var values = this.getFieldValues(data, field);
values.forEach(function (value, index) {
var conditions = [
{ field: field, value: value, values: values }
];
var subData = data.filter(_this.getFacetDataFilter(conditions));
if (subData.length) {
var facet = {
type: _this.cfg.type,
data: subData,
region: null,
columnValue: value,
rowValue: '',
columnField: field,
rowField: '',
columnIndex: index,
rowValuesLength: _this.getRows(),
columnValuesLength: 1,
rowIndex: level,
children: _this.getChildFacets(subData, level + 1, arr)
};
rst.push(facet);
arr.push(facet);
}
});
return rst;
};
Tree.prototype.render = function () {
_super.prototype.render.call(this);
if (this.cfg.showTitle) {
this.renderTitle();
}
};
Tree.prototype.renderTitle = function () {
var _this = this;
each(this.facets, function (facet) {
var columnValue = facet.columnValue, view = facet.view;
var config = deepMix({
position: ['50%', '0%'],
content: columnValue,
}, getFactTitleConfig(DIRECTION.TOP), _this.cfg.title);
view.annotation().text(config);
});
};
Tree.prototype.drawLines = function (facets) {
var _this = this;
facets.forEach(function (facet) {
if (!_this.isLeaf(facet)) {
var children = facet.children;
_this.addFacetLines(facet, children);
}
});
};
// add lines with it's children
Tree.prototype.addFacetLines = function (facet, children) {
var _this = this;
var view = facet.view;
var region = view.coordinateBBox;
// top, right, bottom, left
var start = {
x: region.x + region.width / 2,
y: region.y + region.height
};
children.forEach(function (subFacet) {
var subRegion = subFacet.view.coordinateBBox;
var end = {
x: subRegion.bl.x + (subRegion.tr.x - subRegion.bl.x) / 2,
y: subRegion.tr.y
};
var middle1 = {
x: start.x,
y: start.y + (end.y - start.y) / 2
};
var middle2 = {
x: end.x,
y: middle1.y
};
_this.drawLine([start, middle1, middle2, end]);
});
};
Tree.prototype.getPath = function (points) {
var path = [];
var smooth = this.cfg.line.smooth;
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
Tree.prototype.drawLine = function (points) {
var path = this.getPath(points);
var line = this.cfg.line.style;
this.container.addShape('path', {
attrs: assign({
// @ts-ignore
path: path
}, line),
});
};
Tree.prototype.getXAxisOption = function (x, axes, option, facet) {
if (facet.rowIndex !== facet.rowValuesLength - 1) {
return __assign(__assign({}, option), { title: null, label: null });
}
return option;
};
Tree.prototype.getYAxisOption = function (y, axes, option, facet) {
if (facet.originColIndex !== 0 && facet.columnIndex !== 0) {
return __assign(__assign({}, option), { title: null, label: null });
}
return option;
};
return Tree;
}(Facet));
export default Tree;
//# sourceMappingURL=tree.js.map