12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import { Graph, Node } from "@antv/x6";
- export const handleGraphEvent = (graph: Graph) => {
- const sourceArrowhead = {
- name: "source-arrowhead",
- args: {
- attrs: {
- d: 'M -5,-5 5,-5 5,5 -5,5 Z',
- fill: '#fff',
- stroke: '#239edd',
- 'stroke-width': 1,
- },
- }
- }
- const targetArrowhead = {
- name: "target-arrowhead",
- args: {
- attrs: {
- d: 'M -5,-5 5,-5 5,5 -5,5 Z',
- fill: '#fff',
- stroke: '#239edd',
- 'stroke-width': 1,
- },
- }
- }
- // 边选中
- graph.on("edge:selected", (args) => {
- args.edge.addTools(['edge-editor', sourceArrowhead, targetArrowhead]);
- });
- // 边取消选中
- graph.on("edge:unselected", (args) => {
- args.edge.removeTools(['edge-editor', sourceArrowhead, targetArrowhead]);
- });
- // 控制连接桩显示/隐藏
- const showPorts = (ports: NodeListOf<SVGElement>, show: boolean) => {
- for (let i = 0, len = ports.length; i < len; i += 1) {
- ports[i].style.visibility = show ? "visible" : "hidden";
- }
- };
- graph.on(
- "node:mouseenter",
- ({
- _e,
- node,
- }: {
- _e: React.MouseEvent<HTMLDivElement, MouseEvent>;
- node: Node.Metadata;
- }) => {
- if (node.data?.isPage) return;
- const container = document.querySelector(`[data-cell-id="${node.id}"]`)!;
- if (!container) return;
- const ports = container.querySelectorAll(
- ".x6-port-body"
- ) as NodeListOf<SVGElement>;
- showPorts(ports, true);
- }
- );
- graph.on(
- "node:mouseleave",
- ({
- _e,
- node,
- }: {
- _e: React.MouseEvent<HTMLDivElement, MouseEvent>;
- node: Node.Metadata;
- }) => {
- if (node.data?.isPage) return;
- const container = document.querySelector("#graph-container")!;
- if (!container) return;
- const ports = container.querySelectorAll(
- ".x6-port-body"
- ) as NodeListOf<SVGElement>;
- showPorts(ports, false);
- }
- );
- // 处理添加节点事件 noCreate为不用创建节点
- graph.on("node:added", ({ node }) => {
- if(node.getData()?.noCreate) {
- setTimeout(() => {
- graph.removeNode(node.id);
- }, 50);
- }
- })
- };
|