NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/@antv/g2/esm/facet/tree.js
2023-09-14 14:47:11 +08:00

290 lines
9.7 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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