web: rework header in thread view, tweak some styles, remove some logging

This commit is contained in:
Bill Thiede 2024-02-22 18:54:34 -08:00
parent c2a5fe19e3
commit 3f268415e9
3 changed files with 79 additions and 94 deletions

View File

@ -38,11 +38,11 @@
.body {
background: white;
color: black;
margin-left: -0.5em;
margin-right: -0.5em;
margin-top: 0.5em;
padding: 1em;
width: 0;
min-width: 100%;
overflow-wrap: break-word;
}
.error {
@ -146,11 +146,19 @@
color: #555;
}
.mobile .search-results,
.mobile .thread {
.mobile .search-results {
padding: 1em;
}
.mobile .thread h3 {
padding: 1em 1em 0;
overflow-wrap: break-word;
}
.mobile .thread .tags {
padding: 0 1em;
}
.search-results .row {
display: flex;
flex-direction: row;

View File

@ -180,7 +180,6 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
first,
last,
} => {
info!("making FrontPageRequest: {query} after:{after:?} before:{before:?} first:{first:?} last:{last:?}");
model.query = query.clone();
orders.skip().perform_cmd(async move {
Msg::FrontPageResult(
@ -336,7 +335,6 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
} = &mut model.context
{
selected_threads.insert(tid);
info!("selected threads {selected_threads:?}");
}
}
Msg::SelectionRemoveThread(tid) => {
@ -345,19 +343,16 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
} = &mut model.context
{
selected_threads.remove(&tid);
info!("selected threads {selected_threads:?}");
}
}
Msg::MessageCollapse(id) => {
if let Context::ThreadResult { open_messages, .. } = &mut model.context {
open_messages.remove(&id);
info!("open_messages threads {open_messages:?}");
}
}
Msg::MessageExpand(id) => {
if let Context::ThreadResult { open_messages, .. } = &mut model.context {
open_messages.insert(id);
info!("open_messages threads {open_messages:?}");
}
}
}

View File

@ -5,7 +5,7 @@ use std::{
use chrono::{DateTime, Datelike, Duration, Local, Utc};
use itertools::Itertools;
use log::error;
use log::{error, info};
use seed::{prelude::*, *};
use seed_hooks::{state_access::CloneState, topo, use_state};
use wasm_timer::Instant;
@ -351,66 +351,61 @@ fn has_unread(tags: &[String]) -> bool {
tags.contains(&String::from("unread"))
}
fn read_message_render(msg: &ShowThreadQueryThreadMessages, open: bool) -> Node<Msg> {
fn message_render(msg: &ShowThreadQueryThreadMessages, open: bool) -> Node<Msg> {
let id = msg.id.clone();
let expand_id = msg.id.clone();
let is_unread = has_unread(&msg.tags);
div![
C!["message"],
article![
C!["media"],
figure![
C!["media-left"],
p![
C!["image", "is-64x64"],
img![attrs! {At::Src=>"https://bulma.io/images/placeholders/128x128.png"}],
],
],
div![
C!["headers"],
span![
C!["read-status"],
i![
style! {
St::Color => "gold"
},
C![
"far",
if is_unread {
"fa-envelope"
} else {
"fa-envelope-open"
},
],
ev(Ev::Click, move |e| {
e.stop_propagation();
Msg::SetUnread(format!("id:{id}"), !is_unread)
}),
],
],
" ",
msg.from
C!["media-content"],
div![
C!["content"],
p![
msg.from.as_ref().map(|from| strong![from
.name()
.as_ref()
.map(|from| span![C!["header"], view_address(&from)]),
" ",
.unwrap_or(&from.addr().unwrap_or("(UNKNOWN)"))]),
br![],
IF!(!msg.to.is_empty() =>
nodes![
small![" to "],
msg.to.iter().enumerate().map(|(i, to)| small![
if i > 0 { ", " } else { "" },
to.name()
.as_ref()
.unwrap_or(&to.addr().unwrap_or("(UNKNOWN)"))
]).collect::<Vec<_>>()
]),
IF!(!msg.cc.is_empty() =>
nodes![
small![" cc "],
msg.cc.iter().enumerate().map(|(i, cc)| small![
if i > 0 { ", " } else { "" },
cc.name()
.as_ref()
.unwrap_or(&cc.addr().unwrap_or("(UNKNOWN)"))
]).collect::<Vec<_>>()
]),
br![],
msg.timestamp.map(|ts| span![C!["header"], human_age(ts)]),
// TODO(wathiede): add first line of message body
],
ev(Ev::Click, move |e| {
e.stop_propagation();
if open {
Msg::MessageCollapse(expand_id)
} else {
Msg::MessageExpand(expand_id)
}
}),
]
}
fn unread_message_render(msg: &ShowThreadQueryThreadMessages, open: bool) -> Node<Msg> {
let id = msg.id.clone();
let expand_id = msg.id.clone();
let is_unread = has_unread(&msg.tags);
],
],
div![
C!["message"],
div![
C!["headers"],
C!["media-right"],
span![
C!["read-status"],
i![
style! {
St::Color => "gold"
},
C![
"far",
if is_unread {
@ -425,16 +420,6 @@ fn unread_message_render(msg: &ShowThreadQueryThreadMessages, open: bool) -> Nod
}),
],
],
msg.from
.as_ref()
.map(|from| div![C!["header"], "From: ", view_address(&from)]),
msg.timestamp
.map(|ts| div![C!["header"], "Date: ", human_age(ts)]),
div![C!["header"], "Message-ID: ", &msg.id],
div![
C!["header"],
IF!(!msg.to.is_empty() => span!["To: ", view_addresses(&msg.to)]),
IF!(!msg.cc.is_empty() => span!["CC: ", view_addresses(&msg.cc)])
],
ev(Ev::Click, move |e| {
e.stop_propagation();
@ -445,6 +430,7 @@ fn unread_message_render(msg: &ShowThreadQueryThreadMessages, open: bool) -> Nod
}
}),
],
IF!(open =>
div![
C!["body"],
match &msg.body {
@ -480,7 +466,7 @@ fn unread_message_render(msg: &ShowThreadQueryThreadMessages, open: bool) -> Nod
view_content_tree(&content_tree),
],
}
],
])
]
}
@ -500,18 +486,14 @@ fn thread(thread: &ShowThreadQueryThread, open_messages: &HashSet<String>) -> No
tags.sort();
let messages = thread.messages.iter().map(|msg| {
let open = open_messages.contains(&msg.id);
if open {
unread_message_render(&msg, open)
} else {
read_message_render(&msg, open)
}
message_render(&msg, open)
});
let read_thread_id = thread.thread_id.clone();
let unread_thread_id = thread.thread_id.clone();
div![
C!["thread"],
h3![C!["is-size-5"], &thread.subject,],
tags_chiclet(&tags, false),
h3![C!["is-size-5"], &thread.subject],
span![C!["tags"], tags_chiclet(&tags, false)],
span![
C!["level-item", "buttons", "has-addons"],
button![