findNodeChildren.ts 773 B

1234567891011121314151617181920212223242526272829303132333435
  1. import { NodeData, EdgeData } from "reaflow/dist/types";
  2. export const findNodeChildren = (
  3. selectedNode: string,
  4. nodes: NodeData[],
  5. edges: EdgeData[]
  6. ) => {
  7. const toByFrom = {};
  8. for (const edge of edges) {
  9. if (edge.from) {
  10. toByFrom[edge.from] ??= [];
  11. toByFrom[edge.from].push(edge.to);
  12. }
  13. }
  14. const getNodes = (parent, allNodesIds: string[] = []) => {
  15. const tos = toByFrom[parent];
  16. if (tos) {
  17. allNodesIds.push(...tos);
  18. for (const to of tos) {
  19. getNodes(to, allNodesIds);
  20. }
  21. }
  22. return allNodesIds;
  23. };
  24. const myNodes = getNodes(selectedNode);
  25. const findNodes = myNodes.map((id) => {
  26. const node = nodes.find((n) => n.id === id);
  27. return node as NodeData<any>;
  28. });
  29. return findNodes;
  30. };