From f9f5a71c474466ff2e8f4ce7972105a4fede31ab Mon Sep 17 00:00:00 2001 From: JGerla Date: Wed, 1 Oct 2025 15:51:24 +0200 Subject: [PATCH] feat: added delete option to Nodes added a delete option to nodes, nodes now have strongly typed nodeProps to conform to typescript type safety norms. ref: N25B-114 --- .../components/NodeDefinitions.tsx | 46 +++++++++++++++++-- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/src/visualProgrammingUI/components/NodeDefinitions.tsx b/src/visualProgrammingUI/components/NodeDefinitions.tsx index 99ad1da..7c712b3 100644 --- a/src/visualProgrammingUI/components/NodeDefinitions.tsx +++ b/src/visualProgrammingUI/components/NodeDefinitions.tsx @@ -1,4 +1,4 @@ -import { Handle, Position } from '@xyflow/react'; +import {Handle, NodeToolbar, Position, useReactFlow} from '@xyflow/react'; import '@xyflow/react/dist/style.css'; import '../VisProgUI.css'; @@ -16,12 +16,37 @@ type phaseNodeData = defaultNodeData & { export type nodeData = defaultNodeData | startNodeData | phaseNodeData | endNodeData; +// Node Toolbar definition + +type ToolbarProps= { + nodeId: string; +}; + +export function Toolbar({nodeId}:ToolbarProps) { + const { setNodes, setEdges } = useReactFlow(); + + const handleDelete = () => { + setNodes((nds) => nds.filter((n) => n.id !== nodeId)); + setEdges((eds) => eds.filter((e) => e.source !== nodeId && e.target !== nodeId)); + }; + return ( + + + ); +} + + // Definitions of Nodes +type StartNodeProps = { + id: string; + data: startNodeData; +}; -export const StartNode= ({ data } : {data : startNodeData}) => { +export const StartNode= ({ id, data }: StartNodeProps) => { return ( <> +
data test {data.label}
@@ -30,10 +55,15 @@ export const StartNode= ({ data } : {data : startNodeData}) => { ); }; +type EndNodeProps = { + id: string; + data: endNodeData; +}; -export const EndNode= ({ data } : {data : endNodeData}) => { +export const EndNode= ({ id, data }: EndNodeProps) => { return ( <> +
{data.label}
@@ -42,9 +72,16 @@ export const EndNode= ({ data } : {data : endNodeData}) => { ); }; -export const PhaseNode= ({ data } : {data : phaseNodeData}) => { + +type PhaseNodeProps = { + id: string; + data: phaseNodeData; +}; + +export const PhaseNode= ({ id, data }: PhaseNodeProps) => { return ( <> +
phase {data.number} {data.label}
@@ -53,3 +90,4 @@ export const PhaseNode= ({ data } : {data : phaseNodeData}) => { ); }; +