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}
>
-
+
)}