From 982ffb5e591b12e2f47410a0e57cbbbcf5acf3d5 Mon Sep 17 00:00:00 2001 From: moklick Date: Wed, 5 Jun 2024 17:49:05 +0200 Subject: [PATCH] refactor(edge-text): enable dynamic edge label updates closes #4340 --- .../react/src/components/Edges/EdgeText.tsx | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/packages/react/src/components/Edges/EdgeText.tsx b/packages/react/src/components/Edges/EdgeText.tsx index d6c68caa..2e3ad041 100644 --- a/packages/react/src/components/Edges/EdgeText.tsx +++ b/packages/react/src/components/Edges/EdgeText.tsx @@ -1,4 +1,4 @@ -import { memo, useState, useCallback } from 'react'; +import { memo, useState, useEffect, useRef } from 'react'; import cc from 'classcat'; import type { Rect } from '@xyflow/system'; @@ -19,19 +19,20 @@ function EdgeTextComponent({ }: EdgeTextProps) { const [edgeTextBbox, setEdgeTextBbox] = useState({ x: 1, y: 0, width: 0, height: 0 }); const edgeTextClasses = cc(['react-flow__edge-textwrapper', className]); + const edgeTextRef = useRef(null); - const onEdgeTextRefChange = useCallback((edgeRef: SVGTextElement) => { - if (edgeRef === null) return; + useEffect(() => { + if (edgeTextRef.current) { + const textBbox = edgeTextRef.current.getBBox(); - const textBbox = edgeRef.getBBox(); - - setEdgeTextBbox({ - x: textBbox.x, - y: textBbox.y, - width: textBbox.width, - height: textBbox.height, - }); - }, []); + setEdgeTextBbox({ + x: textBbox.x, + y: textBbox.y, + width: textBbox.width, + height: textBbox.height, + }); + } + }, [label]); if (typeof label === 'undefined' || !label) { return null; @@ -60,7 +61,7 @@ function EdgeTextComponent({ className="react-flow__edge-text" y={edgeTextBbox.height / 2} dy="0.3em" - ref={onEdgeTextRefChange} + ref={edgeTextRef} style={labelStyle} > {label}