web: search for unread tags when clicking under Unread section

This commit is contained in:
Bill Thiede 2023-12-05 20:55:41 -08:00
parent c31f9d581f
commit e0890f1181

View File

@ -23,10 +23,15 @@ pub(super) fn view(model: &Model) -> Node<Msg> {
pager, pager,
} => view_search_results(&query, results.as_slice(), *count, pager), } => view_search_results(&query, results.as_slice(), *count, pager),
}; };
fn view_tag_li(display_name: &str, indent: usize, t: &Tag) -> Node<Msg> { fn view_tag_li(display_name: &str, indent: usize, t: &Tag, search_unread: bool) -> Node<Msg> {
let href = if search_unread {
urls::search(&format!("is:unread tag:{}", t.name), 0)
} else {
urls::search(&format!("tag:{}", t.name), 0)
};
li![a![ li![a![
attrs! { attrs! {
At::Href => urls::search(&format!("tag:{}", t.name), 0) At::Href => href
}, },
(0..indent).map(|_| span![C!["tag-indent"], ""]), (0..indent).map(|_| span![C!["tag-indent"], ""]),
i![ i![
@ -45,15 +50,15 @@ pub(super) fn view(model: &Model) -> Node<Msg> {
.take_while(|(a, b)| a == b) .take_while(|(a, b)| a == b)
.count() .count()
} }
fn view_tag_list<'a>(tags: impl Iterator<Item = &'a Tag>) -> Vec<Node<Msg>> { fn view_tag_list<'a>(
tags: impl Iterator<Item = &'a Tag>,
search_unread: bool,
) -> Vec<Node<Msg>> {
let mut lis = Vec::new(); let mut lis = Vec::new();
let mut last = Vec::new(); let mut last = Vec::new();
for t in tags { for t in tags {
let parts: Vec<_> = t.name.split('/').collect(); let parts: Vec<_> = t.name.split('/').collect();
let mut n = matches(&last, &parts); let mut n = matches(&last, &parts);
if t.name.starts_with("ZZCrap/Free") {
info!("n: {n}, parts: {parts:?} last: {last:?}");
}
if n <= parts.len() - 2 && parts.len() > 1 { if n <= parts.len() - 2 && parts.len() > 1 {
// Synthesize fake tags for proper indenting. // Synthesize fake tags for proper indenting.
for i in n..parts.len() - 1 { for i in n..parts.len() - 1 {
@ -67,13 +72,14 @@ pub(super) fn view(model: &Model) -> Node<Msg> {
fg_color: "#000".to_string(), fg_color: "#000".to_string(),
unread: 0, unread: 0,
}, },
search_unread,
)); ));
} }
last = parts[..parts.len() - 1].to_vec(); last = parts[..parts.len() - 1].to_vec();
n = parts.len() - 1; n = parts.len() - 1;
} }
let display_name = parts[n]; let display_name = parts[n];
lis.push(view_tag_li(&display_name, n, t)); lis.push(view_tag_li(&display_name, n, t, search_unread));
last = parts; last = parts;
} }
lis lis
@ -90,7 +96,7 @@ pub(super) fn view(model: &Model) -> Node<Msg> {
aside![ aside![
C!["tags-menu", "menu"], C!["tags-menu", "menu"],
IF!(!unread.is_empty() => p![C!["menu-label"], "Unread"]), IF!(!unread.is_empty() => p![C!["menu-label"], "Unread"]),
IF!(!unread.is_empty() => ul![C!["menu-list"], view_tag_list(unread.into_iter())]), IF!(!unread.is_empty() => ul![C!["menu-list"], view_tag_list(unread.into_iter(),true)]),
p![ p![
C!["menu-label"], C!["menu-label"],
IF!(!force_tags_open => IF!(!force_tags_open =>
@ -109,7 +115,7 @@ pub(super) fn view(model: &Model) -> Node<Msg> {
], ],
ul![ ul![
C!["menu-list"], C!["menu-list"],
IF!(force_tags_open||tags_open.get() => model.tags.as_ref().map(|tags| view_tag_list(tags.iter()))), IF!(force_tags_open||tags_open.get() => model.tags.as_ref().map(|tags| view_tag_list(tags.iter(),false))),
] ]
], ],
div![ div![