mirror of
https://github.com/farcasclaudiu/Flowise.git
synced 2026-06-25 13:01:00 +03:00
0f09faa1bc
- Removed Yarn dependency and replaced with PNPM - Changed Frontend to render via vite
78 lines
2.3 KiB
React
78 lines
2.3 KiB
React
import { getBezierPath, EdgeText } from 'reactflow'
|
||
import PropTypes from 'prop-types'
|
||
import { useDispatch } from 'react-redux'
|
||
import { useContext } from 'react'
|
||
import { SET_DIRTY } from '@/store/actions'
|
||
import { flowContext } from '@/store/context/ReactFlowContext'
|
||
|
||
import './index.css'
|
||
|
||
const foreignObjectSize = 40
|
||
|
||
const ButtonEdge = ({ id, sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, style = {}, data, markerEnd }) => {
|
||
const [edgePath, edgeCenterX, edgeCenterY] = getBezierPath({
|
||
sourceX,
|
||
sourceY,
|
||
sourcePosition,
|
||
targetX,
|
||
targetY,
|
||
targetPosition
|
||
})
|
||
|
||
const { deleteEdge } = useContext(flowContext)
|
||
|
||
const dispatch = useDispatch()
|
||
|
||
const onEdgeClick = (evt, id) => {
|
||
evt.stopPropagation()
|
||
deleteEdge(id)
|
||
dispatch({ type: SET_DIRTY })
|
||
}
|
||
|
||
return (
|
||
<>
|
||
<path id={id} style={style} className='react-flow__edge-path' d={edgePath} markerEnd={markerEnd} />
|
||
{data && data.label && (
|
||
<EdgeText
|
||
x={sourceX + 10}
|
||
y={sourceY + 10}
|
||
label={data.label}
|
||
labelStyle={{ fill: 'black' }}
|
||
labelBgStyle={{ fill: 'transparent' }}
|
||
labelBgPadding={[2, 4]}
|
||
labelBgBorderRadius={2}
|
||
/>
|
||
)}
|
||
<foreignObject
|
||
width={foreignObjectSize}
|
||
height={foreignObjectSize}
|
||
x={edgeCenterX - foreignObjectSize / 2}
|
||
y={edgeCenterY - foreignObjectSize / 2}
|
||
className='edgebutton-foreignobject'
|
||
requiredExtensions='http://www.w3.org/1999/xhtml'
|
||
>
|
||
<div>
|
||
<button className='edgebutton' onClick={(event) => onEdgeClick(event, id)}>
|
||
×
|
||
</button>
|
||
</div>
|
||
</foreignObject>
|
||
</>
|
||
)
|
||
}
|
||
|
||
ButtonEdge.propTypes = {
|
||
id: PropTypes.string,
|
||
sourceX: PropTypes.number,
|
||
sourceY: PropTypes.number,
|
||
targetX: PropTypes.number,
|
||
targetY: PropTypes.number,
|
||
sourcePosition: PropTypes.any,
|
||
targetPosition: PropTypes.any,
|
||
style: PropTypes.object,
|
||
data: PropTypes.object,
|
||
markerEnd: PropTypes.any
|
||
}
|
||
|
||
export default ButtonEdge
|