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';
interface Props {
let {
data
}: {
data: { flowConfig: FlowConfig };
}
let { data }: Props = $props();
} = $props();
</script>
<SvelteFlowProvider>
@@ -1,5 +1,4 @@
<script lang="ts">
import { writable } from 'svelte/store';
import { Background, Controls, MiniMap, Panel, SvelteFlow } from '@xyflow/svelte';
import '@xyflow/svelte/dist/style.css';
@@ -11,13 +10,13 @@
let { flowConfig }: Props = $props();
// Create writables here so it is easier to create test cases
const nodes = writable(flowConfig.flowProps?.nodes);
const edges = writable(flowConfig.flowProps?.edges);
let nodes = $state.raw(flowConfig.flowProps?.nodes ?? []);
let edges = $state.raw(flowConfig.flowProps?.edges ?? []);
const flowProps = { ...flowConfig.flowProps, nodes, edges };
const flowProps = { ...flowConfig.flowProps };
</script>
<SvelteFlow {...flowProps}>
<SvelteFlow bind:nodes bind:edges {...flowProps}>
{#if flowConfig.panelProps}
<Panel {...flowConfig.panelProps} />
{/if}
@@ -8,6 +8,7 @@
import type { KeyHandlerProps } from './types';
import type { KeyDefinition, KeyDefinitionObject } from '$lib/types';
import { useSvelteFlow } from '$lib/hooks/useSvelteFlow.svelte';
let {
store,
@@ -18,7 +19,7 @@
zoomActivationKey = isMacOs() ? 'Meta' : 'Control'
}: KeyHandlerProps = $props();
// const { nodes: _nodes, edges: _edges } = store;
let { deleteElements } = useSvelteFlow();
function isKeyObject(key?: KeyDefinition | null): key is KeyDefinitionObject {
return key !== null && typeof key === 'object';
@@ -64,26 +65,18 @@
}
async function handleDelete() {
// const nodes = get(_nodes);
// const edges = get(_edges);
const selectedNodes = store.nodes.filter((node) => node.selected);
const selectedEdges = store.edges.filter((edge) => edge.selected);
const { nodes: matchingNodes, edges: matchingEdges } = await getElementsToRemove({
nodesToRemove: selectedNodes,
edgesToRemove: selectedEdges,
nodes: store.nodes,
edges: store.edges,
onBeforeDelete: store.onbeforedelete
const { deletedNodes, deletedEdges } = await deleteElements({
nodes: selectedNodes,
edges: selectedEdges
});
if (matchingNodes.length || matchingEdges.length) {
// _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)));
if (deletedNodes.length > 0 || deletedEdges.length > 0) {
store.ondelete?.({
nodes: matchingNodes,
edges: matchingEdges
nodes: deletedNodes,
edges: deletedEdges
});
}
}