diff options
Diffstat (limited to 'src/frontend/keywords.rs')
| -rw-r--r-- | src/frontend/keywords.rs | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/src/frontend/keywords.rs b/src/frontend/keywords.rs index cb0c28f..311366a 100644 --- a/src/frontend/keywords.rs +++ b/src/frontend/keywords.rs @@ -88,7 +88,31 @@ impl App { self.tag_list = TagList::from_iter(filtered_list) } - // Filter the entry list by tags + pub fn filter_tags_by_entries(&mut self) { + if !self.search_struct.filtered_entry_list.is_empty() { + let orig_list = &self.search_struct.filtered_entry_list; + let mut filtered_keywords: Vec<String> = Vec::new(); + + for e in orig_list { + if !e[4].is_empty() { + let mut key_vec: Vec<String> = e[4] + .split(',') + .map(|s| s.trim().to_string()) + .filter(|s| !s.is_empty()) + .collect(); + filtered_keywords.append(&mut key_vec); + } + } + + filtered_keywords.sort_by(|a, b| a.to_lowercase().cmp(&b.to_lowercase())); + filtered_keywords.dedup(); + + self.search_struct.filtered_tag_list = filtered_keywords.clone(); + self.tag_list = TagList::from_iter(filtered_keywords); + } + } + + // Filter the entry list by tags when hitting enter // If already inside a filtered tag or entry list, apply the filtering // to the already filtered list only pub fn filter_for_tags(&mut self) { @@ -105,6 +129,7 @@ impl App { let filtered_list = BibiSearch::filter_entries_by_tag(&keyword, &orig_list); self.search_struct.filtered_entry_list = filtered_list; self.entry_table = EntryTable::from_iter(self.search_struct.filtered_entry_list.clone()); + self.filter_tags_by_entries(); self.toggle_area(); self.former_area = Some(FormerArea::TagArea); } |
