feat(flowEditor): 添加节点和边的右键菜单功能
- 新增节点右键菜单和边右键菜单组件 - 实现节点和边的删除、编辑、复制等功能 - 优化画布点击事件,关闭未选中的菜单- 调整菜单显示位置,确保在画布区域内显示master
parent
10af5b0d78
commit
54235f0f8e
@ -0,0 +1,36 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { Menu } from '@arco-design/web-react';
|
||||||
|
import { Edge } from '@xyflow/react';
|
||||||
|
|
||||||
|
interface EdgeContextMenuProps {
|
||||||
|
edge: Edge;
|
||||||
|
onDelete?: (edge: Edge) => void;
|
||||||
|
onEdit?: (edge: Edge) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
const EdgeContextMenu: React.FC<EdgeContextMenuProps> = ({
|
||||||
|
edge,
|
||||||
|
onDelete,
|
||||||
|
onEdit
|
||||||
|
}) => {
|
||||||
|
const handleDelete = () => {
|
||||||
|
onDelete && onDelete(edge);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleEdit = () => {
|
||||||
|
onEdit && onEdit(edge);
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Menu>
|
||||||
|
<Menu.Item key="edit" onClick={handleEdit}>
|
||||||
|
编辑连接
|
||||||
|
</Menu.Item>
|
||||||
|
<Menu.Item key="delete" onClick={handleDelete}>
|
||||||
|
删除连接
|
||||||
|
</Menu.Item>
|
||||||
|
</Menu>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default EdgeContextMenu;
|
||||||
@ -0,0 +1,51 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { Menu, Dropdown } from '@arco-design/web-react';
|
||||||
|
import { Node } from '@xyflow/react';
|
||||||
|
|
||||||
|
interface NodeContextMenuProps {
|
||||||
|
node: Node;
|
||||||
|
onRename?: (node: Node) => void;
|
||||||
|
onDelete?: (node: Node) => void;
|
||||||
|
onCopy?: (node: Node) => void;
|
||||||
|
onEdit?: (node: Node) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
const NodeContextMenu: React.FC<NodeContextMenuProps> = ({
|
||||||
|
node,
|
||||||
|
onDelete,
|
||||||
|
onCopy,
|
||||||
|
onEdit
|
||||||
|
}) => {
|
||||||
|
const handleDelete = () => {
|
||||||
|
onDelete && onDelete(node);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleCopy = () => {
|
||||||
|
onCopy && onCopy(node);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleEdit = () => {
|
||||||
|
onEdit && onEdit(node);
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Menu>
|
||||||
|
<Menu.Item key="edit" onClick={handleEdit}>
|
||||||
|
编辑节点
|
||||||
|
</Menu.Item>
|
||||||
|
|
||||||
|
{(!['start', 'end'].includes(node.type)) && (
|
||||||
|
<>
|
||||||
|
<Menu.Item key="copy" onClick={handleCopy}>
|
||||||
|
复制节点
|
||||||
|
</Menu.Item>
|
||||||
|
<Menu.Item key="delete" onClick={handleDelete}>
|
||||||
|
删除节点
|
||||||
|
</Menu.Item>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
</Menu>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default NodeContextMenu;
|
||||||
Loading…
Reference in New Issue