@@ -79,8 +79,7 @@ interface EdgeLabelProps {
7979 labelX : number ;
8080 labelY : number ;
8181 isActive : boolean ;
82- /** When true, immediately enter editing mode on mount */
83- startEditing : boolean ;
82+ isEditing : boolean ;
8483 onEditingChange : ( editing : boolean ) => void ;
8584}
8685
@@ -90,23 +89,20 @@ function EdgeLabel({
9089 labelX,
9190 labelY,
9291 isActive,
93- startEditing ,
92+ isEditing ,
9493 onEditingChange,
9594} : EdgeLabelProps ) {
96- const [ isEditing , setIsEditing ] = useState ( false ) ;
97- const [ draft , setDraft ] = useState ( label ?? "" ) ;
95+ const [ draft , setDraft ] = useState ( label ?? "" ) ;
96+ const [ prevIsEditing , setPrevIsEditing ] = useState ( isEditing ) ;
9897 const inputRef = useRef < HTMLInputElement > ( null ) ;
9998 const { setEdges } = useReactFlow ( ) ;
10099
101- // Respond to parent requesting edit mode (double-click on invisible path)
102- useEffect ( ( ) => {
103- if ( startEditing && ! isEditing ) {
100+ if ( isEditing !== prevIsEditing ) {
101+ setPrevIsEditing ( isEditing ) ;
102+ if ( isEditing ) {
104103 setDraft ( label ?? "" ) ;
105- setIsEditing ( true ) ;
106- onEditingChange ( true ) ;
107104 }
108- // eslint-disable-next-line react-hooks/exhaustive-deps
109- } , [ startEditing ] ) ;
105+ }
110106
111107 // Auto-focus + select-all when entering edit mode
112108 useEffect ( ( ) => {
@@ -117,10 +113,8 @@ function EdgeLabel({
117113 } , [ isEditing ] ) ;
118114
119115 const enterEdit = useCallback ( ( ) => {
120- setDraft ( label ?? "" ) ;
121- setIsEditing ( true ) ;
122116 onEditingChange ( true ) ;
123- } , [ label , onEditingChange ] ) ;
117+ } , [ onEditingChange ] ) ;
124118
125119 const commit = useCallback ( ( ) => {
126120 const trimmed = draft . trim ( ) ;
@@ -131,12 +125,10 @@ function EdgeLabel({
131125 : e ,
132126 ) ,
133127 ) ;
134- setIsEditing ( false ) ;
135128 onEditingChange ( false ) ;
136129 } , [ draft , edgeId , setEdges , onEditingChange ] ) ;
137130
138131 const discard = useCallback ( ( ) => {
139- setIsEditing ( false ) ;
140132 onEditingChange ( false ) ;
141133 } , [ onEditingChange ] ) ;
142134
@@ -229,10 +221,9 @@ export function CanvasEdgeComponent({
229221 targetPosition,
230222 selected,
231223 data,
232- markerEnd : _markerEnd , // suppress default; we use our own
233224} : EdgeProps < Edge < CanvasEdgeData > > ) {
234- const [ isHovered , setIsHovered ] = useState ( false ) ;
235- const [ startEditing , setStartEditing ] = useState ( false ) ;
225+ const [ isHovered , setIsHovered ] = useState ( false ) ;
226+ const [ isEditing , setIsEditing ] = useState ( false ) ;
236227
237228 const isActive = isHovered || ! ! selected ;
238229 const strokeColor = isActive ? "var(--accent-primary)" : COLOR_REST ;
@@ -276,7 +267,7 @@ export function CanvasEdgeComponent({
276267 onMouseLeave = { ( ) => setIsHovered ( false ) }
277268 onDoubleClick = { ( e ) => {
278269 e . stopPropagation ( ) ;
279- setStartEditing ( true ) ;
270+ setIsEditing ( true ) ;
280271 } }
281272 />
282273
@@ -287,10 +278,8 @@ export function CanvasEdgeComponent({
287278 labelX = { labelX }
288279 labelY = { labelY }
289280 isActive = { isActive }
290- startEditing = { startEditing }
291- onEditingChange = { ( editing ) => {
292- if ( ! editing ) setStartEditing ( false ) ;
293- } }
281+ isEditing = { isEditing }
282+ onEditingChange = { setIsEditing }
294283 />
295284 </ >
296285 ) ;
0 commit comments