diff --git a/packages/svelte/CHANGELOG.md b/packages/svelte/CHANGELOG.md index dc044f9e..5f8bc9ea 100644 --- a/packages/svelte/CHANGELOG.md +++ b/packages/svelte/CHANGELOG.md @@ -5,6 +5,7 @@ ### Bugfix - fix `deleteElements` +- fix dragging when draggable=false ### ⚠️ Breaking diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts index 75036a80..a13cc7f1 100644 --- a/packages/svelte/src/lib/store/index.ts +++ b/packages/svelte/src/lib/store/index.ts @@ -178,34 +178,23 @@ export function createStore({ } } - function resetSelectedItem(ids: string[]) { - return (item: T) => { - if (item.selected && ids.includes(item.id)) { - return { - ...item, - selected: false - }; + function resetSelectedElements(elements: Node[] | Edge[]) { + let elementsChanged = false; + elements.forEach((element) => { + if (element.selected) { + element.selected = false; + elementsChanged = true; } - - return item; - }; + }); + return elementsChanged; } function unselectNodesAndEdges(params?: { nodes?: Node[]; edges?: Edge[] }) { - const selectedNodeIds = (params?.nodes ? params.nodes : get(store.nodes)) - .filter((node) => node.selected) - .map((node) => node.id); - const selectedEdgeIds = (params?.edges ? params.edges : get(store.edges)) - .filter((edge) => edge.selected) - .map((edge) => edge.id); + const resetNodes = resetSelectedElements(params?.nodes || get(store.nodes)); + if (resetNodes) store.nodes.set(get(store.nodes)); - if (selectedNodeIds.length) { - store.nodes.update((ns) => ns.map(resetSelectedItem(selectedNodeIds))); - } - - if (selectedEdgeIds.length) { - store.edges.update((es) => es.map(resetSelectedItem(selectedEdgeIds))); - } + const resetEdges = resetSelectedElements(params?.edges || get(store.edges)); + if (resetEdges) store.edges.set(get(store.edges)); } store.deleteKeyPressed.subscribe(async (deleteKeyPressed) => { diff --git a/packages/svelte/src/lib/store/initial-store.ts b/packages/svelte/src/lib/store/initial-store.ts index 01a40a9c..90c59b2d 100644 --- a/packages/svelte/src/lib/store/initial-store.ts +++ b/packages/svelte/src/lib/store/initial-store.ts @@ -23,7 +23,8 @@ import { type OnConnectStart, type OnConnectEnd, type NodeLookup, - type OnBeforeDelete + type OnBeforeDelete, + type EdgeLookup } from '@xyflow/system'; import DefaultNode from '$lib/components/nodes/DefaultNode.svelte'; @@ -99,6 +100,7 @@ export const getInitialStore = ({ flowId: writable(null), nodes: createNodesStore(nextNodes, nodeLookup), nodeLookup: readable(nodeLookup), + edgeLookup: readable(edgeLookup), visibleNodes: readable([]), edges: createEdgesStore(edges, connectionLookup, edgeLookup), visibleEdges: readable([]),