diff --git a/src/components/Edges/EdgeAnchors.tsx b/src/components/Edges/EdgeAnchors.tsx new file mode 100644 index 00000000..a8717671 --- /dev/null +++ b/src/components/Edges/EdgeAnchors.tsx @@ -0,0 +1,51 @@ +import React from 'react'; + +import { WrapEdgeProps, Position } from '../../types'; + +const radiusEdgeUpdater = 10; + +const shiftX = (position: Position, x: number) => { + if (position === Position.Right) return x + radiusEdgeUpdater; + if (position === Position.Left) return x - radiusEdgeUpdater; + return x; +} + +const shiftY = (position: Position, y: number) => { + if (position === Position.Bottom) return y + radiusEdgeUpdater; + if (position === Position.Top) return y - radiusEdgeUpdater; + return y; +} + +export const EdgeAnchorStart = ({ + sourceX, + sourceY, + sourcePosition, +}: WrapEdgeProps): JSX.Element => { + return ( + + ); +} + +export const EdgeAnchorEnd = ({ + targetX, + targetY, + targetPosition, +}: WrapEdgeProps): JSX.Element => { + return ( + + ); +} diff --git a/src/components/Edges/wrapEdge.tsx b/src/components/Edges/wrapEdge.tsx index ace65535..657de81d 100644 --- a/src/components/Edges/wrapEdge.tsx +++ b/src/components/Edges/wrapEdge.tsx @@ -4,41 +4,44 @@ import cc from 'classcat'; import { useStoreActions, useStoreState } from '../../store/hooks'; import { Edge, EdgeProps, WrapEdgeProps } from '../../types'; import { onMouseDown } from '../../components/Handle/handler'; +import { EdgeAnchorStart, EdgeAnchorEnd } from './EdgeAnchors'; export default (EdgeComponent: ComponentType) => { - const EdgeWrapper = ({ - id, - className, - type, - data, - onClick, - selected, - animated, - label, - labelStyle, - labelShowBg, - labelBgStyle, - labelBgPadding, - labelBgBorderRadius, - style, - arrowHeadType, - source, - target, - sourceX, - sourceY, - targetX, - targetY, - sourcePosition, - targetPosition, - elementsSelectable, - markerEndId, - isHidden, - sourceHandleId, - targetHandleId, - handleEdgeUpdate, - onConnectEdge, - onContextMenu, - }: WrapEdgeProps): JSX.Element | null => { + const EdgeWrapper = (props: WrapEdgeProps): JSX.Element | null => { + const { + id, + className, + type, + data, + onClick, + selected, + animated, + label, + labelStyle, + labelShowBg, + labelBgStyle, + labelBgPadding, + labelBgBorderRadius, + style, + arrowHeadType, + source, + target, + sourceX, + sourceY, + targetX, + targetY, + sourcePosition, + targetPosition, + elementsSelectable, + markerEndId, + isHidden, + sourceHandleId, + targetHandleId, + handleEdgeUpdate, + onConnectEdge, + onContextMenu, + } = props; + const addSelectedElements = useStoreActions((actions) => actions.addSelectedElements); const setConnectionNodeId = useStoreActions((actions) => actions.setConnectionNodeId); const setPosition = useStoreActions((actions) => actions.setConnectionPosition); @@ -134,20 +137,6 @@ export default (EdgeComponent: ComponentType) => { const onEdgeUpdaterMouseEnter = useCallback(() => setUpdating(true), [setUpdating]); const onEdgeUpdaterMouseOut = useCallback(() => setUpdating(false), [setUpdating]); - const radiusEdgeUpdater = 10; - - const shiftX = (position: string, x: number) => { - if (position === 'right') return x + radiusEdgeUpdater; - if (position === 'left') return x - radiusEdgeUpdater; - return x; - } - - const shiftY = (position: string, y: number) =>{ - if (position === 'bottom') return y + radiusEdgeUpdater; - if (position === 'top') return y - radiusEdgeUpdater; - return y; - } - if (isHidden) { return null; } @@ -160,14 +149,7 @@ export default (EdgeComponent: ComponentType) => { onMouseEnter={onEdgeUpdaterMouseEnter} onMouseOut={onEdgeUpdaterMouseOut} > - + )} ) => { onMouseEnter={onEdgeUpdaterMouseEnter} onMouseOut={onEdgeUpdaterMouseOut} > - + )}