import dagre from "dagre"; const dagreGraph = new dagre.graphlib.Graph(); dagreGraph.setDefaultEdgeLabel(() => ({})); const nodeWidth = 172; const nodeHeight = 200; export const getLayoutedElements = (nodes: any, edges: any, direction = 'TB') => { const isHorizontal = direction === 'LR'; dagreGraph.setGraph({rankdir: direction}); nodes.forEach((node: any) => { dagreGraph.setNode(node.id, {width: nodeWidth, height: nodeHeight}); }); edges.forEach((edge: any) => { dagreGraph.setEdge(edge.source, edge.target); }); dagre.layout(dagreGraph); const newNodes = nodes.map((node: any) => { const nodeWithPosition = dagreGraph.node(node.id) return { ...node, targetPosition: isHorizontal ? 'left' : 'top', sourcePosition: isHorizontal ? 'right' : 'bottom', position: { x: nodeWithPosition.x - nodeWidth / 2, y: nodeWithPosition.y - nodeHeight / 2 }, }; }); return {nodes: newNodes, edges}; }