From 6ee4190a26f32bfa953302ee363ad3bb6c384ebb Mon Sep 17 00:00:00 2001 From: cel 🌸 Date: Sun, 1 Jun 2025 16:10:26 +0100 Subject: refactor: reorganise code --- src/components/message.rs | 52 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/components/message.rs (limited to 'src/components/message.rs') diff --git a/src/components/message.rs b/src/components/message.rs new file mode 100644 index 0000000..2ae2ef0 --- /dev/null +++ b/src/components/message.rs @@ -0,0 +1,52 @@ +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.message).into(); + let message_user = as Clone>::clone(&message.user).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() + } +} + -- cgit