getPathData function

PathData getPathData(
  1. List<String> keys,
  2. TTGraphData graph
)

Implementation

PathData getPathData(List<String> keys, TTGraphData graph) {
  final lastKey = keys[keys.length - 1];

  if (keys.length == 1) {
    return PathData(
        souls: keys,
        complete: graph.containsKey(lastKey),
        value: graph[lastKey]);
  }

  PathData getPathDataParent =
      getPathData(keys.sublist(0, keys.length - 1), graph);

  if (!isObject(getPathDataParent.value)) {
    return PathData(
        souls: getPathDataParent.souls,
        complete:
            getPathDataParent.complete || !isNull(getPathDataParent.value),
        value: null);
  }

  final value = getPathDataParent.value[lastKey];

  if (isNull(value)) {
    return PathData(
        souls: getPathDataParent.souls, complete: true, value: value);
  }

  String? edgeSoul;

  if (isObject(value)) {
    edgeSoul = value['#'];
  }

  if (!isNull(edgeSoul)) {
    return PathData(
        souls: [...getPathDataParent.souls, edgeSoul!],
        complete: graph.containsKey(edgeSoul),
        value: graph[edgeSoul]);
  }

  return PathData(souls: getPathDataParent.souls, complete: true, value: value);
}