filteredTree function
- @Riverpod(dependencies: [ComponentTreeNotifier])
Tree?
filteredTree(
- Ref ref
)
Implementation
@Riverpod(dependencies: [ComponentTreeNotifier])
Tree? filteredTree(Ref ref) {
final tree = ref.watch(componentTreeNotifierProvider);
final query = ref.watch(searchQueryProvider);
final selectedTags = ref.watch(tagFilterProvider);
if (query.isEmpty && selectedTags.isEmpty) return tree;
return filterTree(
tree,
(node) {
bool condition = true;
if (selectedTags.isNotEmpty) {
switch (node.data.data) {
case StoryNode(story: Story(:final tags)):
case ComponentNode(component: Component(meta: Meta(:final tags))):
condition = tags.isNotEmpty &&
tags.toSet().intersection(selectedTags).isNotEmpty;
default:
condition = true;
}
}
if (query.trim().isNotEmpty) {
condition &= node.data.title //
.toLowerCase()
.contains(query.toLowerCase());
}
return condition;
},
);
}