findParentOf function

ParentRef? findParentOf(
  1. CanvasSceneDocument doc,
  2. NodeId id
)

Find parent + child-index of node id. If the node is a root child, returns (parent: null, index: i).

Implementation

ParentRef? findParentOf(CanvasSceneDocument doc, NodeId id) {
  for (var i = 0; i < doc.children.length; i++) {
    if (doc.children[i].id == id) {
      return (parent: null, index: i);
    }
  }

  ParentRef? walk(Node parent) {
    final kids = parent.childrenOrEmpty;
    for (var i = 0; i < kids.length; i++) {
      final c = kids[i];
      if (c.id == id) return (parent: parent, index: i);
      if (c.isGroup) {
        final deeper = walk(c);
        if (deeper != null) return deeper;
      }
    }
    return null;
  }

  for (final c in doc.children) {
    if (!c.isGroup) continue;
    final r = walk(c);
    if (r != null) return r;
  }
  return null;
}