chore(svelte): cleanup useSvelteFlow

This commit is contained in:
moklick
2023-10-30 11:52:50 +01:00
parent b502547f8c
commit e899c379d0
2 changed files with 19 additions and 9 deletions
@@ -1,5 +1,5 @@
<script lang="ts"> <script lang="ts">
import { useSvelteFlow } from '@xyflow/svelte'; import { useNodes, useSvelteFlow } from '@xyflow/svelte';
const { const {
zoomIn, zoomIn,
@@ -10,8 +10,10 @@
setViewport, setViewport,
getViewport, getViewport,
viewport, viewport,
nodes toObject
} = useSvelteFlow(); } = useSvelteFlow();
const nodes = useNodes();
</script> </script>
<aside> <aside>
@@ -23,6 +25,12 @@
<button on:click={() => setCenter(0, 0)}>setCenter 0, 0</button> <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={() => setViewport({ x: 100, y: 100, zoom: 2 })}>setViewport</button>
<button on:click={() => console.log(getViewport())}>getViewport</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> <div class="label">Nodes:</div>
{#each $nodes as node (node.id)} {#each $nodes as node (node.id)}
@@ -265,14 +265,16 @@ export function useSvelteFlow(): {
return getOutgoersBase(_node, get(nodes), get(edges)); return getOutgoersBase(_node, get(nodes), get(edges));
}, },
toObject: () => { toObject: () => {
const _nodes = get(nodes);
const _edges = get(edges);
const _viewport = get(viewport);
return { return {
nodes: { ..._nodes }, nodes: get(nodes).map((node) => ({
edges: { ..._edges }, ...node,
viewport: { ..._viewport } // 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 viewport