flattenCarpenterTree<T> function

List<CarpenterTreeFlatNode<T>> flattenCarpenterTree<T>(
  1. List<CarpenterTreeNode<T>> roots,
  2. Set<Object> expandedIds
)

Implementation

List<CarpenterTreeFlatNode<T>> flattenCarpenterTree<T>(
  List<CarpenterTreeNode<T>> roots,
  Set<Object> expandedIds,
) {
  final result = <CarpenterTreeFlatNode<T>>[];

  void visit(
    Iterable<CarpenterTreeNode<T>> nodes,
    int depth,
    Object? parentId,
  ) {
    for (final node in nodes) {
      result.add(
        CarpenterTreeFlatNode<T>(node: node, depth: depth, parentId: parentId),
      );
      if (expandedIds.contains(node.id) && node.children.isNotEmpty) {
        visit(node.children, depth + 1, node.id);
      }
    }
  }

  visit(roots, 0, null);
  return List.unmodifiable(result);
}