import { NodeData, EdgeData } from "src/types/graph"; type Outgoers = [NodeData[], string[]]; export const getOutgoers = ( nodeId: string, nodes: NodeData[], edges: EdgeData[], parent: string[] = [] ): Outgoers => { const outgoerNodes: NodeData[] = []; const matchingNodes: string[] = []; if (parent.includes(nodeId)) { const initialParentNode = nodes.find(n => n.id === nodeId); if (initialParentNode) outgoerNodes.push(initialParentNode); } const findOutgoers = (currentNodeId: string) => { const outgoerIds = edges.filter(e => e.from === currentNodeId).map(e => e.to); const nodeList = nodes.filter(n => { if (parent.includes(n.id) && !matchingNodes.includes(n.id)) matchingNodes.push(n.id); return outgoerIds.includes(n.id) && !parent.includes(n.id); }); outgoerNodes.push(...nodeList); nodeList.forEach(node => findOutgoers(node.id)); }; findOutgoers(nodeId); return [outgoerNodes, matchingNodes]; };