67 lines
1.8 KiB
Rust
67 lines
1.8 KiB
Rust
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<Msg> {
|
|
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<Msg> {
|
|
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),
|
|
]
|
|
}
|