use filamento::chat::MessageStoreFields; use leptos::prelude::*; use reactive_stores::{ArcStore, Store}; use crate::{message::MacawMessage, user::{get_avatar, get_name, NO_AVATAR}}; use super::icon::Delivery; #[component] pub fn Message(message: MacawMessage, major: bool, r#final: bool) -> impl IntoView { let message_message: Store = as Clone>::clone(&message.get()).into(); let message_user = as Clone>::clone(&message.user.get()).into(); let avatar = LocalResource::new(move || get_avatar(message_user)); let name = move || get_name(message_user, false); // TODO: chrono-humanize? // TODO: if final, show delivery not only on hover. // {move || message_message.delivery().read().map(|delivery| delivery.to_string()).unwrap_or_default()} if major { view! {
} >
{name}
{move || message_message.timestamp().read().format("%H:%M").to_string()}
{move || message_message.body().read().body.clone()}
{move || message_message.delivery().get().map(|delivery| view! { } ) }
}.into_any() } else { view! {
{move || message_message.timestamp().read().format("%H:%M").to_string()}
{move || message_message.body().read().body.clone()}
{move || message_message.delivery().get().map(|delivery| view! { } ) }
}.into_any() } }