largestNode function

  1. @Riverpod(dependencies: [tree2])
TreeViewNode<ElementNode> largestNode(
  1. Ref ref
)

Implementation

@Riverpod(dependencies: [tree2])
TreeViewNode<ElementNode> largestNode(Ref ref) {
  final tree = ref.watch(tree2Provider);

  double maxWeight = 0;
  TreeViewNode<ElementNode> maxNode = tree.first;
  for (final node in flatten(tree)) {
    var weight = (node.depth ?? 0) * 16 +
        node.content.title.length +
        switch (node.content) {
          ComponentNode component => component.component.meta.tags
              .fold(0, (acc, tag) => acc + tag.length),
          StoryNode story =>
            story.story.tags.fold(0, (acc, tag) => acc + tag.length),
          _ => 0
        };

    if (weight > maxWeight) {
      maxNode = node;
      maxWeight = weight.toDouble();
    }
  }

  return maxNode;
}