fix deletion logic

This commit is contained in:
peterkogo
2025-01-09 11:59:22 +01:00
parent a30484413d
commit 4762ce3494
3 changed files with 16 additions and 24 deletions
@@ -3,11 +3,11 @@
import Flow from './Flow.svelte'; import Flow from './Flow.svelte';
interface Props { let {
data
}: {
data: { flowConfig: FlowConfig }; data: { flowConfig: FlowConfig };
} } = $props();
let { data }: Props = $props();
</script> </script>
<SvelteFlowProvider> <SvelteFlowProvider>
@@ -1,5 +1,4 @@
<script lang="ts"> <script lang="ts">
import { writable } from 'svelte/store';
import { Background, Controls, MiniMap, Panel, SvelteFlow } from '@xyflow/svelte'; import { Background, Controls, MiniMap, Panel, SvelteFlow } from '@xyflow/svelte';
import '@xyflow/svelte/dist/style.css'; import '@xyflow/svelte/dist/style.css';
@@ -11,13 +10,13 @@
let { flowConfig }: Props = $props(); let { flowConfig }: Props = $props();
// Create writables here so it is easier to create test cases // Create writables here so it is easier to create test cases
const nodes = writable(flowConfig.flowProps?.nodes); let nodes = $state.raw(flowConfig.flowProps?.nodes ?? []);
const edges = writable(flowConfig.flowProps?.edges); let edges = $state.raw(flowConfig.flowProps?.edges ?? []);
const flowProps = { ...flowConfig.flowProps, nodes, edges }; const flowProps = { ...flowConfig.flowProps };
</script> </script>
<SvelteFlow {...flowProps}> <SvelteFlow bind:nodes bind:edges {...flowProps}>
{#if flowConfig.panelProps} {#if flowConfig.panelProps}
<Panel {...flowConfig.panelProps} /> <Panel {...flowConfig.panelProps} />
{/if} {/if}
@@ -8,6 +8,7 @@
import type { KeyHandlerProps } from './types'; import type { KeyHandlerProps } from './types';
import type { KeyDefinition, KeyDefinitionObject } from '$lib/types'; import type { KeyDefinition, KeyDefinitionObject } from '$lib/types';
import { useSvelteFlow } from '$lib/hooks/useSvelteFlow.svelte';
let { let {
store, store,
@@ -18,7 +19,7 @@
zoomActivationKey = isMacOs() ? 'Meta' : 'Control' zoomActivationKey = isMacOs() ? 'Meta' : 'Control'
}: KeyHandlerProps = $props(); }: KeyHandlerProps = $props();
// const { nodes: _nodes, edges: _edges } = store; let { deleteElements } = useSvelteFlow();
function isKeyObject(key?: KeyDefinition | null): key is KeyDefinitionObject { function isKeyObject(key?: KeyDefinition | null): key is KeyDefinitionObject {
return key !== null && typeof key === 'object'; return key !== null && typeof key === 'object';
@@ -64,26 +65,18 @@
} }
async function handleDelete() { async function handleDelete() {
// const nodes = get(_nodes);
// const edges = get(_edges);
const selectedNodes = store.nodes.filter((node) => node.selected); const selectedNodes = store.nodes.filter((node) => node.selected);
const selectedEdges = store.edges.filter((edge) => edge.selected); const selectedEdges = store.edges.filter((edge) => edge.selected);
const { nodes: matchingNodes, edges: matchingEdges } = await getElementsToRemove({ const { deletedNodes, deletedEdges } = await deleteElements({
nodesToRemove: selectedNodes, nodes: selectedNodes,
edgesToRemove: selectedEdges, edges: selectedEdges
nodes: store.nodes,
edges: store.edges,
onBeforeDelete: store.onbeforedelete
}); });
if (matchingNodes.length || matchingEdges.length) { if (deletedNodes.length > 0 || deletedEdges.length > 0) {
// _nodes.update((nds) => nds.filter((node) => !matchingNodes.some((mN) => mN.id === node.id)));
// _edges.update((eds) => eds.filter((edge) => !matchingEdges.some((mE) => mE.id === edge.id)));
store.ondelete?.({ store.ondelete?.({
nodes: matchingNodes, nodes: deletedNodes,
edges: matchingEdges edges: deletedEdges
}); });
} }
} }