feat: added ReactFlow-based node graph #11

Merged
j.gerla merged 68 commits from feat/visual-programming-interface into dev 2025-10-28 11:59:03 +00:00
2 changed files with 49 additions and 10 deletions
Showing only changes of commit 79f0827b39 - Show all commits

View File

@@ -17,28 +17,34 @@ import {
type Connection,
} from '@xyflow/react';
import '@xyflow/react/dist/style.css';
import StartNode from "./components/NodeDefinitions.tsx";
import {
StartNode,
EndNode,
PhaseNode
} from "./components/NodeDefinitions.tsx";
const nodeTypes = {
startNode: StartNode,
start: StartNode,
end: EndNode,
phase: PhaseNode,
};
const initialNodes = [
{
id: 'start',
type: 'startNode',
type: 'start',
position: {x: 0, y: 0},
data: {label: 'start'}
},
{
id: 'genericPhase',
type: 'default',
type: 'phase',
position: {x: 0, y: 150},
data: {label: 'Generic Phase'},
data: {label: 'Generic Phase', number: 1},
},
{
id: 'end',
type: 'output',
type: 'end',
position: {x: 0, y: 300},
data: {label: 'End'}
}

View File

@@ -4,7 +4,17 @@ import '../VisProgUI.css';
// Datatypes for NodeTypes
type startNodeData = { label: string; };
type defaultNodeData = {
label: string;
};
type startNodeData = defaultNodeData;
type endNodeData = defaultNodeData;
type phaseNodeData = defaultNodeData & {
number: number;
};
export type nodeData = defaultNodeData | startNodeData | phaseNodeData | endNodeData;
// Definitions of Nodes
@@ -12,11 +22,34 @@ type startNodeData = { label: string; };
export const StartNode= ({ data } : {data : startNodeData}) => {
return (
<>
<div>
<div className="default-node"> data test {data.label} </div>
<div className="default-node">
<div> data test {data.label} </div>
<Handle type="source" position={Position.Right} id="start" />
</div>
</>
);
};
export default StartNode;
export const EndNode= ({ data } : {data : endNodeData}) => {
return (
<>
<div className="default-node">
<div> {data.label} </div>
<Handle type="target" position={Position.Left} id="end" />
</div>
</>
);
};
export const PhaseNode= ({ data } : {data : phaseNodeData}) => {
return (
<>
<div className="default-node">
<div> phase {data.number} {data.label} </div>
<Handle type="target" position={Position.Left} id="target" />
<Handle type="source" position={Position.Right} id="source" />
</div>
</>
);
};