summaryrefslogtreecommitdiffstats
path: root/src/components/roster_list/roster_list_item.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/roster_list/roster_list_item.rs')
-rw-r--r--src/components/roster_list/roster_list_item.rs48
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>
}
}
-