diff options
Diffstat (limited to 'src/components/roster_list/roster_list_item.rs')
-rw-r--r-- | src/components/roster_list/roster_list_item.rs | 48 |
1 files changed, 36 insertions, 12 deletions
diff --git a/src/components/roster_list/roster_list_item.rs b/src/components/roster_list/roster_list_item.rs index 538e664..c90455c 100644 --- a/src/components/roster_list/roster_list_item.rs +++ b/src/components/roster_list/roster_list_item.rs @@ -1,12 +1,24 @@ use std::ops::Deref; -use filamento::{chat::Chat, roster::{Contact, ContactStoreFields}, user::{User, UserStoreFields}}; +use filamento::{ + chat::Chat, + roster::{Contact, ContactStoreFields}, + user::{User, UserStoreFields}, +}; use jid::BareJID; use leptos::prelude::*; use reactive_stores::{ArcStore, Store}; use tracing::debug; -use crate::{chat::{ArcMacawChat, MacawChat}, client::Client, components::{avatar::AvatarWithPresence, sidebar::Open}, contact::MacawContact, open_chats::{OpenChatsPanel, OpenChatsPanelStoreFields}, state_store::StateStore, user::{fetch_avatar, get_name, ArcMacawUser}}; +use crate::{ + chat::{ArcMacawChat, MacawChat}, + client::Client, + components::{avatar::AvatarWithPresence, sidebar::Open}, + contact::MacawContact, + open_chats::{OpenChatsPanel, OpenChatsPanelStoreFields}, + state_store::StateStore, + user::{ArcMacawUser, fetch_avatar, get_name}, +}; #[component] pub fn RosterListItem(contact: MacawContact) -> impl IntoView { @@ -23,7 +35,7 @@ pub fn RosterListItem(contact: MacawContact) -> impl IntoView { use_context().expect("no user state store"); let open_chat = Action::new_local(move |_| { - let client= client.clone(); + let client = client.clone(); async move { let to = contact.user.get().jid().get(); let (chat, user) = match client.get_chat_and_user(to).await { @@ -33,7 +45,7 @@ pub fn RosterListItem(contact: MacawContact) -> impl IntoView { // set_error.set(Some(e.into())); // set_new_chat_pending.set(false); return; - }, + } }; let chat = { @@ -41,7 +53,9 @@ pub fn RosterListItem(contact: MacawContact) -> impl IntoView { // let user = user_state_store.store(user.jid.clone(), ArcStore::new(user)); let old_user = user_state_store.get_listener(user.jid.clone()); let user = if let Some(old_user) = old_user { - old_user.update(|(old_user, _avatar)| { old_user.set(user); }); + old_user.update(|(old_user, _avatar)| { + old_user.set(user); + }); old_user } else { let avatar = fetch_avatar(user.avatar.as_deref()).await; @@ -56,7 +70,8 @@ pub fn RosterListItem(contact: MacawContact) -> impl IntoView { } }); - let current_open_chat: Memo<Option<BareJID>> = use_context().expect("no open chat memo in context"); + let current_open_chat: Memo<Option<BareJID>> = + use_context().expect("no open chat memo in context"); let open = move || { if let Some(open_chat) = &*current_open_chat.read() { @@ -78,17 +93,26 @@ pub fn RosterListItem(contact: MacawContact) -> impl IntoView { let open = move || open().is_open(); view! { - <div class="roster-list-item" class:open=move || open() class:focused=move || focused() on:click=move |_| { open_chat.dispatch(()); }> + <div + class="roster-list-item" + class:open=move || open() + class:focused=move || focused() + on:click=move |_| { + open_chat.dispatch(()); + } + > {move || { - view! { - <AvatarWithPresence user=contact.user /> - } + view! { <AvatarWithPresence user=contact.user /> } }} <div class="item-info"> - <div class="main-info"><p class="name">{name}<span class="jid"> - {move || contact.user_jid().read().to_string()}</span></p></div> + <div class="main-info"> + <p class="name"> + {name} + <span class="jid">- {move || contact.user_jid().read().to_string()}</span> + </p> + </div> <div class="sub-info">{move || contact.subscription().read().to_string()}</div> </div> </div> } } - |