diff --git a/example/src/CustomConnectionLine/ConnectionLine.tsx b/example/src/CustomConnectionLine/ConnectionLine.tsx index f24fcc28..34ede25c 100644 --- a/example/src/CustomConnectionLine/ConnectionLine.tsx +++ b/example/src/CustomConnectionLine/ConnectionLine.tsx @@ -1,7 +1,7 @@ import React, { FC } from 'react'; import { ConnectionLineComponentProps } from 'react-flow-renderer'; -const ConnectionLine: FC = ({ sourceX, sourceY, targetX, targetY }) => { +const ConnectionLine: FC = ({ sourceX, sourceY, targetX, targetY, toX, toY }) => { return ( = ({ sourceX, sourceY, ta className="animated" d={`M${sourceX},${sourceY} C ${sourceX} ${targetY} ${sourceX} ${targetY} ${targetX},${targetY}`} /> - + ); }; diff --git a/example/src/CustomConnectionLine/index.tsx b/example/src/CustomConnectionLine/index.tsx index cca1e821..70c754f8 100644 --- a/example/src/CustomConnectionLine/index.tsx +++ b/example/src/CustomConnectionLine/index.tsx @@ -1,3 +1,4 @@ +import { useCallback } from 'react'; import ReactFlow, { Node, addEdge, @@ -11,13 +12,13 @@ import ReactFlow, { import ConnectionLine from './ConnectionLine'; -const initialNodes: Node[] = [{ id: '1', type: 'input', data: { label: 'Node 1' }, position: { x: 250, y: 5 } }]; +const initialNodes: Node[] = [{ id: '1', type: 'default', data: { label: 'Node 1' }, position: { x: 250, y: 5 } }]; const initialEdges: Edge[] = []; const ConnectionLineFlow = () => { const [nodes, , onNodesChange] = useNodesState(initialNodes); const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges); - const onConnect = (params: Connection | Edge) => setEdges((eds) => addEdge(params, eds)); + const onConnect = useCallback((params: Connection | Edge) => setEdges((eds) => addEdge(params, eds)), [setEdges]); return ( d.id === handleId) : handleBound?.[0]; + const handleBound = fromHandleBounds[connectionHandleType]!; + const fromHandle = handleId ? handleBound.find((d) => d.id === handleId) : handleBound[0]; const fromHandleX = fromHandle ? fromHandle.x + fromHandle.width / 2 : (fromNode?.width ?? 0) / 2; const fromHandleY = fromHandle ? fromHandle.y + fromHandle.height / 2 : fromNode?.height ?? 0; const fromX = (fromNode?.positionAbsolute?.x || 0) + fromHandleX; @@ -52,22 +59,12 @@ export default ({ const fromPosition = fromHandle?.position; - let toPosition: Position | undefined; - switch (fromPosition) { - case Position.Left: - toPosition = Position.Right; - break; - case Position.Right: - toPosition = Position.Left; - break; - case Position.Top: - toPosition = Position.Bottom; - break; - case Position.Bottom: - toPosition = Position.Top; - break; + if (!fromPosition) { + return null; } + let toPosition: Position = oppositePosition[fromPosition]; + let sourceX: number, sourceY: number, sourcePosition: Position | undefined, @@ -102,19 +99,25 @@ export default ({ return ( ); diff --git a/src/types/edges.ts b/src/types/edges.ts index 478c1b7d..5d4acd1a 100644 --- a/src/types/edges.ts +++ b/src/types/edges.ts @@ -148,17 +148,23 @@ export enum ConnectionLineType { } export type ConnectionLineComponentProps = { + connectionLineStyle?: CSSProperties; + connectionLineType: ConnectionLineType; + fromNode?: Node; + fromHandle?: HandleElement; + fromX: number; + fromY: number; + toX: number; + toY: number; + fromPosition: Position; + toPosition: Position; + // remove in v11 sourceX: number; sourceY: number; sourcePosition?: Position; targetX: number; targetY: number; targetPosition?: Position; - connectionLineStyle?: CSSProperties; - connectionLineType: ConnectionLineType; - fromNode?: Node; - fromHandle?: HandleElement; - // backward compatibility, mark as deprecated? sourceNode?: Node; sourceHandle?: HandleElement; };