From 9981d19b363f9d224e8ca67bcb94a2e67419d4fa Mon Sep 17 00:00:00 2001 From: filtered <176114999+webfiltered@users.noreply.github.com> Date: Wed, 12 Mar 2025 01:10:42 +1100 Subject: [PATCH] Fix connecting link regressions (#750) - Fix move link creates link bypassing reroutes - Fix move link creates new link instead of moving --- src/canvas/LinkConnector.ts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/canvas/LinkConnector.ts b/src/canvas/LinkConnector.ts index ec0acfd60..80afa3c8f 100644 --- a/src/canvas/LinkConnector.ts +++ b/src/canvas/LinkConnector.ts @@ -92,7 +92,7 @@ export class LinkConnector { } /** Drag an existing link to a different input. */ - moveInputLink(network: LinkNetwork, input: INodeInputSlot, fromReroute?: Reroute): void { + moveInputLink(network: LinkNetwork, input: INodeInputSlot): void { if (this.isConnecting) throw new Error("Already dragging links.") const { state, inputLinks, renderLinks } = this @@ -104,12 +104,17 @@ export class LinkConnector { if (!link) return try { - const renderLink = new MovingRenderLink(network, link, "input", fromReroute) + const reroute = link.parentId != null ? network.reroutes.get(link.parentId) : undefined + const renderLink = new MovingRenderLink(network, link, "input", reroute) const mayContinue = this.events.dispatch("before-move-input", renderLink) if (mayContinue === false) return renderLinks.push(renderLink) + + this.listenUntilReset("input-moved", (e) => { + e.detail.link.disconnect(network, true) + }) } catch (error) { console.warn(`Could not create render link for link id: [${link.id}].`, link, error) return @@ -443,8 +448,8 @@ export class LinkConnector { // Link is already connected here if (inputSlot === input) continue - outputNode.connectSlots(outputSlot, node, input, fromReroute?.id) - this.events.dispatch("input-moved", link) + const newLink = outputNode.connectSlots(outputSlot, node, input, fromReroute?.id) + if (newLink) this.events.dispatch("input-moved", link) } else { const { node: outputNode, fromSlot, fromReroute } = link const newLink = outputNode.connectSlots(fromSlot, node, input, fromReroute?.id) @@ -475,7 +480,7 @@ export class LinkConnector { /** Sets connecting_links, used by some extensions still. */ #setLegacyLinks(fromSlotIsInput: boolean): void { - const links = this.renderLinks.map((link) => { + const links = this.renderLinks.map((link) => { const input = fromSlotIsInput ? link.fromSlot as INodeInputSlot : null const output = fromSlotIsInput ? null : link.fromSlot as INodeOutputSlot @@ -485,6 +490,7 @@ export class LinkConnector { input, output, pos: link.fromPos, + after: link.fromReroute?.id, } }) this.#setConnectingLinks(links)