import { DSLComponents } from '@/interfaces/database/flow'; | |
import { Edge, Node, Position } from 'reactflow'; | |
import { v4 as uuidv4 } from 'uuid'; | |
export const buildNodesFromDSLComponents = (data: DSLComponents) => { | |
const nodes: Node[] = []; | |
const edges: Edge[] = []; | |
Object.entries(data).forEach(([key, value]) => { | |
const downstream = [...value.downstream]; | |
const upstream = [...value.upstream]; | |
nodes.push({ | |
id: key, | |
type: 'textUpdater', | |
position: { x: 0, y: 0 }, | |
data: { | |
label: value.obj.component_name, | |
params: value.obj.params, | |
downstream: downstream, | |
upstream: upstream, | |
}, | |
sourcePosition: Position.Left, | |
targetPosition: Position.Right, | |
}); | |
// intermediate node | |
// The first and last nodes do not need to be considered | |
if (upstream.length > 0 && downstream.length > 0) { | |
for (let i = 0; i < upstream.length; i++) { | |
const up = upstream[i]; | |
for (let j = 0; j < downstream.length; j++) { | |
const down = downstream[j]; | |
edges.push({ | |
id: uuidv4(), | |
label: '', | |
type: 'step', | |
source: up, | |
target: down, | |
}); | |
} | |
} | |
} | |
}); | |
}; | |