| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.SankeyNodeDragAction = void 0;
- var tslib_1 = require("tslib");
- var g2_1 = require("@antv/g2");
- var util_1 = require("@antv/util");
- var utils_1 = require("../../../../utils");
- var constant_1 = require("../../constant");
- var SankeyNodeDragAction = /** @class */ (function (_super) {
- tslib_1.__extends(SankeyNodeDragAction, _super);
- function SankeyNodeDragAction() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- /**
- * 是否在拖拽中的标记
- */
- _this.isDragging = false;
- return _this;
- }
- /**
- * 当前操作的是否是 element
- */
- SankeyNodeDragAction.prototype.isNodeElement = function () {
- var shape = (0, util_1.get)(this.context, 'event.target');
- if (shape) {
- var element = shape.get('element');
- return element && element.getModel().data.isNode;
- }
- return false;
- };
- SankeyNodeDragAction.prototype.getNodeView = function () {
- return (0, utils_1.findViewById)(this.context.view, constant_1.NODES_VIEW_ID);
- };
- SankeyNodeDragAction.prototype.getEdgeView = function () {
- return (0, utils_1.findViewById)(this.context.view, constant_1.EDGES_VIEW_ID);
- };
- /**
- * 获取当前操作的 index
- * @param element
- */
- SankeyNodeDragAction.prototype.getCurrentDatumIdx = function (element) {
- return this.getNodeView().geometries[0].elements.indexOf(element);
- };
- /**
- * 点击下去,开始
- */
- SankeyNodeDragAction.prototype.start = function () {
- // 记录开始了的状态
- if (this.isNodeElement()) {
- this.prevPoint = {
- x: (0, util_1.get)(this.context, 'event.x'),
- y: (0, util_1.get)(this.context, 'event.y'),
- };
- var element = this.context.event.target.get('element');
- var idx = this.getCurrentDatumIdx(element);
- if (idx === -1) {
- return;
- }
- this.currentElementIdx = idx;
- this.context.isDragging = true;
- this.isDragging = true;
- // 关闭动画并暂存配置
- this.prevNodeAnimateCfg = this.getNodeView().getOptions().animate;
- this.prevEdgeAnimateCfg = this.getEdgeView().getOptions().animate;
- this.getNodeView().animate(false);
- this.getEdgeView().animate(false);
- }
- };
- /**
- * 移动过程中,平移
- */
- SankeyNodeDragAction.prototype.translate = function () {
- if (this.isDragging) {
- var chart = this.context.view;
- var currentPoint = {
- x: (0, util_1.get)(this.context, 'event.x'),
- y: (0, util_1.get)(this.context, 'event.y'),
- };
- var x = currentPoint.x - this.prevPoint.x;
- var y = currentPoint.y - this.prevPoint.y;
- var nodeView = this.getNodeView();
- var element = nodeView.geometries[0].elements[this.currentElementIdx];
- // 修改数据
- if (element && element.getModel()) {
- var prevDatum = element.getModel().data;
- var data = nodeView.getOptions().data;
- var coordinate = nodeView.getCoordinate();
- var datumGap_1 = {
- x: x / coordinate.getWidth(),
- y: y / coordinate.getHeight(),
- };
- var nextDatum = tslib_1.__assign(tslib_1.__assign({}, prevDatum), { x: prevDatum.x.map(function (x) { return (x += datumGap_1.x); }), y: prevDatum.y.map(function (y) { return (y += datumGap_1.y); }) });
- // 处理一下在 [0, 1] 范围
- // 1. 更新 node 数据
- var newData = tslib_1.__spreadArray([], data, true);
- newData[this.currentElementIdx] = nextDatum;
- nodeView.data(newData);
- // 2. 更新 edge 数据
- var name_1 = prevDatum.name;
- var edgeView = this.getEdgeView();
- var edgeData = edgeView.getOptions().data;
- edgeData.forEach(function (datum) {
- // 2.1 以该 node 为 source 的边,修改 [x0, x1, x2, x3] 中的 x0, x1
- if (datum.source === name_1) {
- datum.x[0] += datumGap_1.x;
- datum.x[1] += datumGap_1.x;
- datum.y[0] += datumGap_1.y;
- datum.y[1] += datumGap_1.y;
- }
- // 2.2 以该 node 为 target 的边,修改 [x0, x1, x2, x3] 中的 x2, x3
- if (datum.target === name_1) {
- datum.x[2] += datumGap_1.x;
- datum.x[3] += datumGap_1.x;
- datum.y[2] += datumGap_1.y;
- datum.y[3] += datumGap_1.y;
- }
- });
- edgeView.data(edgeData);
- // 3. 更新最新位置
- this.prevPoint = currentPoint;
- // node edge 都改变了,所以要从底层 render
- chart.render(true);
- }
- }
- };
- /**
- * 结论,清除状态
- */
- SankeyNodeDragAction.prototype.end = function () {
- this.isDragging = false;
- this.context.isDragging = false;
- this.prevPoint = null;
- this.currentElementIdx = null;
- // 还原动画
- this.getNodeView().animate(this.prevNodeAnimateCfg);
- this.getEdgeView().animate(this.prevEdgeAnimateCfg);
- };
- return SankeyNodeDragAction;
- }(g2_1.Action));
- exports.SankeyNodeDragAction = SankeyNodeDragAction;
- //# sourceMappingURL=node-drag.js.map
|