fix(tasks): do not show bookmarks on childrenless tasks

This commit is contained in:
xeruf 2024-08-29 23:28:40 +03:00
parent 945e29b5ed
commit 3942105764
1 changed files with 17 additions and 8 deletions

View File

@ -379,10 +379,15 @@ impl Tasks {
pub(crate) fn filtered_tasks<'a>(&'a self, position: Option<&'a EventId>) -> impl Iterator<Item=&Task> + 'a { pub(crate) fn filtered_tasks<'a>(&'a self, position: Option<&'a EventId>) -> impl Iterator<Item=&Task> + 'a {
let current: HashMap<&EventId, &Task> = self.resolve_tasks(self.children_of(position)).map(|t| (t.get_id(), t)).collect(); let current: HashMap<&EventId, &Task> = self.resolve_tasks(self.children_of(position)).map(|t| (t.get_id(), t)).collect();
let bookmarks = self.bookmarks.iter() let bookmarks =
.filter(|id| !position.is_some_and(|p| &p == id) && !current.contains_key(id)) if current.is_empty() {
.filter_map(|id| self.get_by_id(id)) vec![]
.collect_vec(); } else {
self.bookmarks.iter()
.filter(|id| !position.is_some_and(|p| &p == id) && !current.contains_key(id))
.filter_map(|id| self.get_by_id(id))
.collect_vec()
};
// TODO use ChildIterator // TODO use ChildIterator
current.into_values().chain( current.into_values().chain(
bookmarks bookmarks
@ -528,7 +533,7 @@ impl Tasks {
pub(crate) fn toggle_bookmark(&mut self, id: EventId) -> nostr_sdk::Result<Event> { pub(crate) fn toggle_bookmark(&mut self, id: EventId) -> nostr_sdk::Result<Event> {
match self.bookmarks.iter().position(|b| b == &id) { match self.bookmarks.iter().position(|b| b == &id) {
None => self.bookmarks.push(id), None => self.bookmarks.push(id),
Some(pos) => { self.bookmarks.remove(pos); }, Some(pos) => { self.bookmarks.remove(pos); }
} }
self.sender.submit( self.sender.submit(
EventBuilder::new(Kind::Bookmarks, "mostr pins", EventBuilder::new(Kind::Bookmarks, "mostr pins",
@ -1253,10 +1258,14 @@ mod tasks_test {
assert_eq!(tasks.filtered_tasks(None).count(), 2); assert_eq!(tasks.filtered_tasks(None).count(), 2);
assert_eq!(tasks.filtered_tasks(Some(&zero)).count(), 0); assert_eq!(tasks.filtered_tasks(Some(&zero)).count(), 0);
assert_eq!(tasks.visible_tasks().len(), 1);
assert_eq!(tasks.filtered_tasks(Some(&pin)).count(), 0);
assert_eq!(tasks.filtered_tasks(Some(&zero)).count(), 0);
tasks.submit(EventBuilder::new(Kind::Bookmarks, "", [Tag::event(pin), Tag::event(zero)])); tasks.submit(EventBuilder::new(Kind::Bookmarks, "", [Tag::event(pin), Tag::event(zero)]));
assert_eq!(tasks.filtered_tasks(Some(&zero)).collect_vec(), vec![tasks.get_by_id(&pin).unwrap()]); assert_eq!(tasks.visible_tasks().len(), 1);
tasks.move_to(Some(pin)); assert_eq!(tasks.filtered_tasks(Some(&pin)).count(), 0);
assert!(tasks.visible_tasks().is_empty()); assert_eq!(tasks.filtered_tasks(Some(&zero)).count(), 0);
tasks.move_to(None); tasks.move_to(None);
assert_eq!(tasks.visible_tasks().len(), 3); assert_eq!(tasks.visible_tasks().len(), 3);