Merge pull request #3783 from xyflow/svelte-fix-selection-drag

Fix dragging in Svelte when draggable=false
This commit is contained in:
Moritz Klack
2024-01-11 17:17:14 +01:00
committed by GitHub
3 changed files with 16 additions and 24 deletions

View File

@@ -5,6 +5,7 @@
### Bugfix
- fix `deleteElements`
- fix dragging when draggable=false
### ⚠️ Breaking

View File

@@ -178,34 +178,23 @@ export function createStore({
}
}
function resetSelectedItem<T extends Node | Edge>(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) => {

View File

@@ -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<string | null>(null),
nodes: createNodesStore(nextNodes, nodeLookup),
nodeLookup: readable<NodeLookup>(nodeLookup),
edgeLookup: readable<EdgeLookup>(edgeLookup),
visibleNodes: readable<Node[]>([]),
edges: createEdgesStore(edges, connectionLookup, edgeLookup),
visibleEdges: readable<EdgeLayouted[]>([]),