fixed resetting nodes in svelte

This commit is contained in:
peterkogo
2024-02-28 17:42:33 +01:00
parent 966531ec39
commit 382cab728b
3 changed files with 64 additions and 7 deletions
@@ -23,7 +23,8 @@
'usenodesdata',
'usesvelteflow',
'useupdatenodeinternals',
'validation'
'validation',
'reset'
];
const onChange = (event: Event) => {
@@ -0,0 +1,43 @@
<script lang="ts">
import { writable } from 'svelte/store';
import {
SvelteFlow,
Controls,
Background,
MiniMap,
type Node,
type Edge,
type NodeTypes
} from '@xyflow/svelte';
import '@xyflow/svelte/dist/style.css';
const nodes = writable<Node[]>([]);
const edges = writable<Edge[]>([]);
const resetNodesArray = () => {
const node1: Node = {
id: 'c1',
data: { label: '1' },
position: { x: 0, y: 0 }
};
const node2: Node = {
id: 'c2',
data: { label: '2' },
position: { x: 100, y: 0 }
};
$nodes = [node1, node2];
};
</script>
<button on:click={resetNodesArray}> Reset </button>
<div style:height="100vh">
<SvelteFlow {nodes} {edges} fitView>
<Controls />
<Background />
<MiniMap />
</SvelteFlow>
</div>
@@ -1,7 +1,13 @@
<svelte:options immutable />
<script lang="ts">
import { createEventDispatcher, setContext, SvelteComponent, type ComponentType } from 'svelte';
import {
createEventDispatcher,
setContext,
SvelteComponent,
type ComponentType,
onDestroy
} from 'svelte';
import { get, writable } from 'svelte/store';
import cc from 'classcat';
import { errorMessages, Position, type NodeProps } from '@xyflow/system';
@@ -129,15 +135,22 @@
setContext('svelteflow__node_connectable', connectableStore);
$: {
// hiding the noder removes html element is removed from the dom
if (nodeRef) {
resizeObserver?.observe(nodeRef);
prevNodeRef = nodeRef;
} else if (prevNodeRef) {
resizeObserver?.unobserve(prevNodeRef);
if (!prevNodeRef) {
resizeObserver?.observe(nodeRef);
prevNodeRef = nodeRef;
} else if (prevNodeRef !== nodeRef || (!computedWidth && !computedHeight)) {
resizeObserver?.unobserve(prevNodeRef);
resizeObserver?.observe(nodeRef);
prevNodeRef = nodeRef;
}
}
}
onDestroy(() => {
resizeObserver?.unobserve(nodeRef);
});
function onSelectNodeHandler(event: MouseEvent | TouchEvent) {
if (selectable && (!get(selectNodesOnDrag) || !draggable || get(nodeDragThreshold) > 0)) {
// this handler gets called by XYDrag on drag start when selectNodesOnDrag=true