Improve connecting link logic (#697)

### Current

- Connections are disconnected the moment a link starts being dragged
- Reseating a connection where it came from creates a new connection
- If the process is somehow interrupted, the links are already gone

### Proposed

- Connection is disconnected after a new connection is made
- Rendering is bypassed for the link segment being moved
- Does nothing if dropping a link exactly where it came from
- Adds early return when trying to connect a node to itself
This commit is contained in:
filtered
2025-03-04 04:03:31 +11:00
committed by GitHub
parent cef6ab6ced
commit b227eefbdd
4 changed files with 64 additions and 26 deletions

View File

@@ -1,4 +1,5 @@
import type { Positionable } from "../interfaces"
import type { ConnectingLink, Positionable } from "../interfaces"
import type { LinkId } from "@/LLink"
import { LGraphNode } from "@/LGraphNode"
@@ -35,3 +36,13 @@ export function findFirstNode(items: Iterable<Positionable>): LGraphNode | undef
if (item instanceof LGraphNode) return item
}
}
/** @returns `true` if the provided link ID is currently being dragged. */
export function isDraggingLink(linkId: LinkId, connectingLinks: ConnectingLink[] | null | undefined): ConnectingLink | undefined {
if (connectingLinks == null) return
for (const connectingLink of connectingLinks) {
if (connectingLink.link == null) continue
if (linkId === connectingLink.link.id) return connectingLink
}
}