Merge pull request #3537 from wbkd/use-svelte-flow-to-object

feat(svelte) added toObject() on useSvelteFlow
This commit is contained in:
Moritz Klack
2023-10-30 11:53:19 +01:00
committed by GitHub
2 changed files with 24 additions and 2 deletions

View File

@@ -1,5 +1,5 @@
<script lang="ts">
import { useSvelteFlow } from '@xyflow/svelte';
import { useNodes, useSvelteFlow } from '@xyflow/svelte';
const {
zoomIn,
@@ -10,8 +10,10 @@
setViewport,
getViewport,
viewport,
nodes
toObject
} = useSvelteFlow();
const nodes = useNodes();
</script>
<aside>
@@ -23,6 +25,12 @@
<button on:click={() => setCenter(0, 0)}>setCenter 0, 0</button>
<button on:click={() => setViewport({ x: 100, y: 100, zoom: 2 })}>setViewport</button>
<button on:click={() => console.log(getViewport())}>getViewport</button>
<button
on:click={() => {
const { nodes, edges, viewport } = toObject();
console.log(nodes, edges, viewport);
}}>toObject</button
>
<div class="label">Nodes:</div>
{#each $nodes as node (node.id)}

View File

@@ -51,6 +51,7 @@ export function useSvelteFlow(): {
getConnectedEdges: (id: string | (Partial<Node> & { id: Node['id'] })[]) => Edge[];
getIncomers: (node: string | (Partial<Node> & { id: Node['id'] })) => Node[];
getOutgoers: (node: string | (Partial<Node> & { id: Node['id'] })) => Node[];
toObject: () => { nodes: Node[]; edges: Edge[]; viewport: Viewport };
} {
const {
zoomIn,
@@ -263,6 +264,19 @@ export function useSvelteFlow(): {
return getOutgoersBase(_node, get(nodes), get(edges));
},
toObject: () => {
return {
nodes: get(nodes).map((node) => ({
...node,
// we want to make sure that changes to the nodes object that gets returned by toObject
// do not affect the nodes object
position: { ...node.position },
data: { ...node.data }
})),
edges: get(edges).map((edge) => ({ ...edge })),
viewport: { ...get(viewport) }
};
},
viewport
};
}