filterTree function

Tree? filterTree(
  1. Tree tree,
  2. bool predicate(
    1. Tree node
    )
)

Implementation

Tree? filterTree(Tree tree, bool Function(Tree node) predicate) {
  if (tree.data.data is StoryNode) {
    if (predicate(tree)) {
      return tree;
    } else {
      return null;
    }
  }

  final children = [
    for (final node in tree.children) //
      if (filterTree(node, predicate) case Tree node) //
        node
  ];

  if (children.isEmpty) {
    if (tree.data.data is ComponentNode) {
      if (predicate(tree)) {
        return tree;
      }
    }

    return null;
  }

  return TreeType(
    data: tree.data,
    children: children,
    parent: tree.parent,
  );
}