Skip to content

Commit 7f393d8

Browse files
committed
add property to v12 edge that can used to define the arrow marker, or remove it from the edge
1 parent 7dd9e24 commit 7f393d8

2 files changed

Lines changed: 31 additions & 15 deletions

File tree

src/extensions/react-flow/edges/EdgeDefaultV12.tsx

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { memo } from "react";
2-
import React from "react";
1+
import React, { memo } from "react";
32
import { BaseEdge, Edge, EdgeProps, EdgeText, getBezierPath } from "@xyflow/react";
43

54
import { nodeContentUtils } from "../nodes/NodeContent";
@@ -10,7 +9,13 @@ import { EdgeDefaultDataProps, edgeDefaultUtils } from "./EdgeDefault";
109
/**
1110
* @deprecated (v26) use EdgeDefaultDataProps
1211
*/
13-
export type EdgeDefaultV12DataProps = Record<string, unknown> & EdgeDefaultDataProps;
12+
export interface EdgeDefaultV12DataProps extends Record<string, unknown>, EdgeDefaultDataProps {
13+
/**
14+
* Set the marker used on the start or end of the edge.
15+
*/
16+
markerAppearance?: "arrow-closed" | "none";
17+
}
18+
1419
/**
1520
* @deprecated (v26) use EdgeDefaultProps
1621
*/
@@ -71,7 +76,19 @@ export const EdgeDefaultV12 = memo(
7176
/>
7277
) : null);
7378

74-
const appearance = "arrow-closed"; // test
79+
const appearance = data.markerAppearance ?? "arrow-closed";
80+
81+
const marker =
82+
appearance !== "none"
83+
? {
84+
markerStart: inversePath
85+
? `url(#react-flow__marker--${appearance}${intent ? `-${intent}` : "-none"}-reverse)`
86+
: undefined,
87+
markerEnd: !inversePath
88+
? `url(#react-flow__marker--${appearance}${intent ? `-${intent}` : "-none"}`
89+
: undefined,
90+
}
91+
: {};
7592

7693
return (
7794
<g
@@ -107,16 +124,7 @@ export const EdgeDefaultV12 = memo(
107124
<BaseEdge
108125
id={id}
109126
path={edgePath}
110-
markerStart={
111-
inversePath
112-
? `url(#react-flow__marker--${appearance}${intent ? `-${intent}` : "-none"}-reverse)`
113-
: undefined
114-
}
115-
markerEnd={
116-
!inversePath
117-
? `url(#react-flow__marker--${appearance}${intent ? `-${intent}` : "-none"}`
118-
: undefined
119-
}
127+
{...marker}
120128
className={edgeDefaultUtils.createEdgeDefaultClassName({ strokeType })}
121129
interactionWidth={pathGlowWidth}
122130
style={{

src/extensions/react-flow/edges/stories/EdgeDefaultV12.stories.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,6 @@ const EdgeDefault = (args: Edge) => {
102102
onNodesChange={onNodesChange}
103103
onEdgesChange={onEdgesChange}
104104
onConnect={onConnect}
105-
defaultZoom={1}
106105
/>
107106
</div>
108107
);
@@ -125,6 +124,15 @@ const defaultEdge: Edge = {
125124
export const Default = Template.bind({});
126125
Default.args = defaultEdge;
127126

127+
export const WithoutArrow = Template.bind({});
128+
WithoutArrow.args = {
129+
...Default.args,
130+
id: "noarrow",
131+
data: {
132+
markerAppearance: "none",
133+
},
134+
};
135+
128136
export const CustomLabel = Template.bind({});
129137
CustomLabel.args = {
130138
...Default.args,

0 commit comments

Comments
 (0)