@difizen/ai-flow
Version:
Scalable, out-of-the-box, agent-oriented flow
53 lines • 1.5 kB
JavaScript
import dagre from '@dagrejs/dagre';
import { cloneDeep } from 'lodash';
import { v4 } from 'uuid';
export function cleanEdges(nodes, edges) {
var newEdges = cloneDeep(edges);
return newEdges;
}
export function getNodeId(nodeType) {
return nodeType + '-' + v4();
}
export var getLayoutByDagre = function getLayoutByDagre(originNodes, originEdges) {
var dagreGraph = new dagre.graphlib.Graph();
dagreGraph.setDefaultEdgeLabel(function () {
return {};
});
var nodes = cloneDeep(originNodes).filter(function (node) {
return !node.parentId;
});
var edges = cloneDeep(originEdges);
dagreGraph.setGraph({
rankdir: 'LR',
align: 'UL',
nodesep: 120,
ranksep: 120
// ranker: 'tight-tree',
// marginx: 1300,
// marginy: 1200,
});
nodes.forEach(function (node) {
dagreGraph.setNode(node.id, {
width: node.measured.width,
height: node.measured.height
});
});
edges.forEach(function (edge) {
dagreGraph.setEdge(edge.source, edge.target);
});
dagre.layout(dagreGraph);
return dagreGraph;
};
export var findNodes = function findNodes(nodeId, nodes, edge, onlyParent) {
if (onlyParent) {
return nodes.filter(function (node) {
var _edge$filter;
return (_edge$filter = edge.filter(function (item) {
return item.target === nodeId;
})) === null || _edge$filter === void 0 ? void 0 : _edge$filter.map(function (item) {
return item.source;
}).includes(node.id);
});
}
return;
};