| 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 | |