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

142 lines
4.0 KiB
Java

import { each, get } from '@antv/util';
import { getComponents, isInBox } from './action/util';
/**
* 交互的上下文
*/
var Context = /** @class */ (function () {
function Context(view) {
/** 当前所有的 Action */
this.actions = [];
/** 当前事件对象 */
this.event = null;
this.cacheMap = {};
this.view = view;
}
/**
* 缓存信息
* @param params 缓存的字段
* - 如果一个字段则获取缓存
* - 两个字段则设置缓存
*/
Context.prototype.cache = function () {
var params = [];
for (var _i = 0; _i < arguments.length; _i++) {
params[_i] = arguments[_i];
}
if (params.length === 1) {
return this.cacheMap[params[0]];
}
else if (params.length === 2) {
this.cacheMap[params[0]] = params[1];
}
};
/**
* 获取 Action
* @param name Action 的名称
*/
Context.prototype.getAction = function (name) {
return this.actions.find(function (action) { return action.name === name; });
};
/**
* 获取 Action
* @param action Action 对象
*/
Context.prototype.addAction = function (action) {
this.actions.push(action);
};
/**
* 移除 Action
* @param action Action 对象
*/
Context.prototype.removeAction = function (action) {
var actions = this.actions;
var index = this.actions.indexOf(action);
if (index >= 0) {
actions.splice(index, 1);
}
};
/**
* 获取当前的点
*/
Context.prototype.getCurrentPoint = function () {
var event = this.event;
if (event) {
if (event.target instanceof HTMLElement) {
var canvas = this.view.getCanvas();
var point = canvas.getPointByClient(event.clientX, event.clientY);
return point;
}
else {
return {
x: event.x,
y: event.y,
};
}
}
return null;
};
/**
* 获取当前 shape
* @returns current shape
*/
Context.prototype.getCurrentShape = function () {
return get(this.event, ['gEvent', 'shape']);
};
/**
* 当前的触发是否在 View 内
*/
Context.prototype.isInPlot = function () {
var point = this.getCurrentPoint();
if (point) {
return this.view.isPointInPlot(point);
}
return false;
};
/**
* 是否在指定的图形内
* @param name shape 的 name
*/
Context.prototype.isInShape = function (name) {
var shape = this.getCurrentShape(); // 不再考虑在 shape 的 parent 内的情况
if (shape) {
return shape.get('name') === name;
}
return false;
};
/**
* 当前的触发是组件内部
* @param name 组件名,可以为空
*/
Context.prototype.isInComponent = function (name) {
var components = getComponents(this.view);
var point = this.getCurrentPoint();
if (point) {
return !!components.find(function (component) {
var bbox = component.getBBox();
if (name) {
return component.get('name') === name && isInBox(bbox, point);
}
else {
return isInBox(bbox, point);
}
});
}
return false;
};
/**
* 销毁
*/
Context.prototype.destroy = function () {
this.view = null;
this.event = null;
// 先销毁 action 再清空,一边遍历,一边删除,所以数组需要更新引用
each(this.actions.slice(), function (action) {
action.destroy();
});
this.actions = null;
this.cacheMap = null;
};
return Context;
}());
export default Context;
//# sourceMappingURL=context.js.map