aboutsummaryrefslogtreecommitdiff
path: root/src/frontend/keywords.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend/keywords.rs')
-rw-r--r--src/frontend/keywords.rs51
1 files changed, 20 insertions, 31 deletions
diff --git a/src/frontend/keywords.rs b/src/frontend/keywords.rs
index 6aa4068..0363609 100644
--- a/src/frontend/keywords.rs
+++ b/src/frontend/keywords.rs
@@ -16,7 +16,6 @@
/////
use super::app::{App, FormerArea};
-use super::entries::EntryTable;
use crate::backend::search::BibiSearch;
use ratatui::widgets::{ListState, ScrollbarState};
@@ -105,47 +104,37 @@ impl App {
}
pub fn filter_tags_by_entries(&mut self) {
- if !self.search_struct.filtered_entry_list.is_empty() {
- self.search_struct.filtered_tag_list.clear();
- let orig_list = self.search_struct.filtered_entry_list.clone();
- 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);
- }
+ let mut filtered_keywords: Vec<String> = Vec::new();
+
+ let orig_list = &self.entry_table.entry_table_items;
+
+ for e in orig_list {
+ if !e.keywords.is_empty() {
+ let mut key_vec: Vec<String> = e
+ .keywords
+ .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();
+ 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);
- }
+ 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) {
- let orig_list = {
- if self.search_struct.inner_search {
- let orig_list = &self.search_struct.filtered_entry_list;
- orig_list
- } else {
- let orig_list = &self.biblio_data.entry_list.bibentries;
- orig_list
- }
- };
+ let orig_list = &self.entry_table.entry_table_items;
let keyword = self.get_selected_tag();
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.entry_table.entry_table_items = filtered_list;
self.filter_tags_by_entries();
self.toggle_area();
self.former_area = Some(FormerArea::TagArea);