use seed::{prelude::*, *}; use crate::{ api::urls, graphql::front_page_query::*, state::{Context, Model, Msg}, view::{ self, human_age, pretty_authors, set_title, tags_chiclet, view_header, view_search_pager, }, }; pub(super) fn view(model: &Model) -> Node { let content = match &model.context { Context::None => div![h1!["Loading"]], Context::ThreadResult(thread) => view::thread(thread), Context::SearchResult { query, results, count, pager, } => search_results(&query, results.as_slice(), *count, pager), }; div![ view_header(&model.query, &model.refreshing_state), content, view_header(&model.query, &model.refreshing_state), ] } fn search_results( query: &str, results: &[FrontPageQuerySearchNodes], count: usize, pager: &FrontPageQuerySearchPageInfo, ) -> Node { if query.is_empty() { set_title("all mail"); } else { set_title(query); } let rows = results.iter().map(|r| { let tid = r.thread.clone(); let datetime = human_age(r.timestamp as i64); a![ C!["has-text-light"], attrs! { At::Href => urls::thread(&tid) }, div![ C!["row"], div![C!["subject"], &r.subject], span![C!["from", "is-size-7"], pretty_authors(&r.authors)], div![ span![C!["is-size-7"], tags_chiclet(&r.tags, true)], span![C!["is-size-7", "float-right", "date"], datetime] ] ] ] }); div![ C!["search-results"], view_search_pager(count, pager), rows, view_search_pager(count, pager), ] }