mirror of
https://github.com/csunny/DB-GPT.git
synced 2025-07-26 05:23:37 +00:00
Co-authored-by: Fangyin Cheng <staneyffer@gmail.com> Co-authored-by: 谨欣 <echo.cmy@antgroup.com> Co-authored-by: 严志勇 <yanzhiyong@tiansuixiansheng.com> Co-authored-by: yanzhiyong <932374019@qq.com>
52 lines
1.3 KiB
TypeScript
52 lines
1.3 KiB
TypeScript
import React from 'react';
|
||
import { BaseEdge, EdgeProps, getBezierPath, useReactFlow } from 'reactflow';
|
||
|
||
const ButtonEdge: React.FC<EdgeProps> = ({
|
||
id,
|
||
sourceX,
|
||
sourceY,
|
||
targetX,
|
||
targetY,
|
||
sourcePosition,
|
||
targetPosition,
|
||
style = {},
|
||
markerEnd,
|
||
}) => {
|
||
const [edgePath, edgeCenterX, edgeCenterY] = getBezierPath({
|
||
sourceX,
|
||
sourceY,
|
||
sourcePosition,
|
||
targetX,
|
||
targetY,
|
||
targetPosition,
|
||
});
|
||
const reactFlow = useReactFlow();
|
||
|
||
function onEdgeClick(event: React.MouseEvent, id: string) {
|
||
event.stopPropagation();
|
||
reactFlow.setEdges(reactFlow.getEdges().filter(edge => edge.id !== id));
|
||
}
|
||
return (
|
||
<>
|
||
<BaseEdge id={id} style={style} path={edgePath} markerEnd={markerEnd} />
|
||
<foreignObject
|
||
width={40}
|
||
height={40}
|
||
x={edgeCenterX - 40 / 2}
|
||
y={edgeCenterY - 40 / 2}
|
||
className='bg-transparent w-10 h-10 relative'
|
||
requiredExtensions='http://www.w3.org/1999/xhtml'
|
||
>
|
||
<button
|
||
className='absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 w-5 h-5 rounded-full bg-stone-400 dark:bg-zinc-700 cursor-pointer text-sm'
|
||
onClick={event => onEdgeClick(event, id)}
|
||
>
|
||
×
|
||
</button>
|
||
</foreignObject>
|
||
</>
|
||
);
|
||
};
|
||
|
||
export default ButtonEdge;
|