import {Handle, NodeToolbar, Position, useReactFlow} from '@xyflow/react'; import '@xyflow/react/dist/style.css'; import '../VisProgUI.css'; // Datatypes for NodeTypes type defaultNodeData = { label: string; }; type startNodeData = defaultNodeData; type endNodeData = defaultNodeData; type normNodeData = defaultNodeData; type phaseNodeData = defaultNodeData & { number: number; }; export type nodeData = defaultNodeData | startNodeData | phaseNodeData | endNodeData; // Node Toolbar definition, contains node delete functionality type ToolbarProps= { nodeId: string; allowDelete: boolean; }; export function Toolbar({nodeId, allowDelete}: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 // Start Node definition: type StartNodeProps = { id: string; data: startNodeData; }; export const StartNode= ({ id, data }: StartNodeProps) => { return ( <>
data test {data.label}
); }; // End node definition: type EndNodeProps = { id: string; data: endNodeData; }; export const EndNode= ({ id, data }: EndNodeProps) => { return ( <>
{data.label}
); }; // Phase node definition: type PhaseNodeProps = { id: string; data: phaseNodeData; }; export const PhaseNode= ({ id, data }: PhaseNodeProps) => { return ( <>
phase {data.number} {data.label}
); }; // Norm node definition: type NormNodeProps = { id: string; data: normNodeData; }; export const NormNode= ({ id, data }: NormNodeProps) => { return ( <>
Norm {data.label}
); };