Skip to content

Commit 19635b3

Browse files
committed
Fix: Revmoved the unused _markEnd and use derived state pattern
1 parent 291339d commit 19635b3

2 files changed

Lines changed: 19 additions & 25 deletions

File tree

components/editor/canvas-edge.tsx

Lines changed: 14 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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
);
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Add a floating control bar for zoom and undo/redo, then wire the same actions tokeyboard shortcuts.
2+
3+
## Implementation
4+
5+
1. Add a pill-shaped control bar at the bottom-left of the canvas.

0 commit comments

Comments
 (0)