nodeToGraph function

TTGraphData nodeToGraph(
  1. TTNode node,
  2. GraphMergePort mergePort
)

Implementation

TTGraphData nodeToGraph(TTNode node, GraphMergePort mergePort) {
  final modified = {...node};
  TTGraphData nodes = TTGraphData();
  final nodeSoul = node.nodeMetaData?.key;

  for (final key in node.keys) {
    final val = node[key];
    if (!isObject(val) || val == null) {
      continue;
    }

    if (val is TTGraphNode) {
      if (val.soul.isNotEmpty) {
        final edge = {'#': val.soul};
        modified[key] = edge;

        continue;
      }
    }

    String soul = '';

    if (val is TTNode) {
      soul = val.nodeMetaData!.key!;
    }

    if (val is TTLink && val.soul != null && val.soul!.isNotEmpty) {
      soul = val.soul!;
    }

    if (soul.isNotEmpty) {
      final edge = {'#': soul};
      modified[key] = edge;
      final graph = mergePort.addMissingState(nodeToGraph(val, mergePort));
      final diff = mergePort.diffGraph(graph, nodes);
      nodes = !isNull(diff) ? mergePort.mergeGraph(nodes, diff!) : nodes;
    }
  }

  // print('SD:: ${modified.toString()} $nodeSoul');

  TTGraphData raw = TTGraphData();
  raw[nodeSoul!] = TTNode.fromJson(modified);
  final withMissingState = mergePort.addMissingState(raw);
  final graphDiff = mergePort.diffGraph(withMissingState, nodes);
  nodes = !isNull(graphDiff) ? mergePort.mergeGraph(nodes, graphDiff!) : nodes;

  return nodes;
}