largestNode function
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;
}