From fd4ffbc1f8348b05ef6dd622b71704d946bdc450 Mon Sep 17 00:00:00 2001 From: filtered <176114999+webfiltered@users.noreply.github.com> Date: Mon, 24 Mar 2025 11:16:06 +1100 Subject: [PATCH] Fix render issues after moving floating input links (#841) - Fixes floating inputs have invisible segment after moving - Fixes floating input can be moved onto existing input link, resulting in the slot having two links --- src/canvas/FloatingRenderLink.ts | 10 ++++++---- src/canvas/LinkConnector.ts | 1 + test/LinkConnector.integration.test.ts | 21 +++++++++++++++++++++ 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/canvas/FloatingRenderLink.ts b/src/canvas/FloatingRenderLink.ts index 053e3355d..d5315fadd 100644 --- a/src/canvas/FloatingRenderLink.ts +++ b/src/canvas/FloatingRenderLink.ts @@ -96,12 +96,12 @@ export class FloatingRenderLink implements RenderLink { this.fromPos = fromReroute.pos } - canConnectToInput(): true { - return true + canConnectToInput(): boolean { + return this.toType === "input" } - canConnectToOutput(): true { - return true + canConnectToOutput(): boolean { + return this.toType === "output" } canConnectToReroute(reroute: Reroute): boolean { @@ -118,6 +118,8 @@ export class FloatingRenderLink implements RenderLink { floatingLink.target_id = node.id floatingLink.target_slot = node.inputs.indexOf(input) + node.disconnectInput(node.inputs.indexOf(input)) + this.fromSlot._floatingLinks?.delete(floatingLink) input._floatingLinks ??= new Set() input._floatingLinks.add(floatingLink) diff --git a/src/canvas/LinkConnector.ts b/src/canvas/LinkConnector.ts index 98c0aaa11..ee1f8efa2 100644 --- a/src/canvas/LinkConnector.ts +++ b/src/canvas/LinkConnector.ts @@ -622,6 +622,7 @@ export class LinkConnector { for (const link of outputLinks) delete link._dragging for (const link of inputLinks) delete link._dragging + for (const link of floatingLinks) delete link._dragging for (const reroute of hiddenReroutes) delete reroute._dragging renderLinks.length = 0 diff --git a/test/LinkConnector.integration.test.ts b/test/LinkConnector.integration.test.ts index 8cefcd509..404016e2e 100644 --- a/test/LinkConnector.integration.test.ts +++ b/test/LinkConnector.integration.test.ts @@ -530,6 +530,27 @@ describe("LinkConnector Integration", () => { validateIntegrityFloatingRemoved() }) + + test("Dropping a floating input link onto input slot disconnects the existing link", ({ graph, connector }) => { + const manyOutputsNode = graph.getNodeById(4)! + manyOutputsNode.disconnectOutput(0) + + const floatingInputNode = graph.getNodeById(6)! + const fromFloatingInput = floatingInputNode.inputs[0] + + const hasInputNode = graph.getNodeById(2)! + const toInput = hasInputNode.inputs[0] + + connector.moveInputLink(graph, fromFloatingInput) + const dropEvent = mockedInputDropEvent(hasInputNode, 0) + connector.dropLinks(graph, dropEvent) + + expect(fromFloatingInput.link).toBeNull() + expect(fromFloatingInput._floatingLinks?.size).toBe(0) + + expect(toInput.link).toBeNull() + expect(toInput._floatingLinks?.size).toBe(1) + }) }) test("Should drop floating links when both sides are disconnected", ({ graph, connector, reroutesBeforeTest, validateIntegrityNoChanges }) => {