diff options
author | 2025-06-07 17:36:22 +0100 | |
---|---|---|
committer | 2025-06-07 17:36:22 +0100 | |
commit | 36e87b708ed3a2b0d6f2e932509b0fdf10fe0089 (patch) | |
tree | 5f3fc5a3d863f52a82a204a7746532202103d7cc /src/components/new_chat.rs | |
parent | 4a5aa6579f5184c443ffbe80ce93e0daa0926826 (diff) | |
download | macaw-web-36e87b708ed3a2b0d6f2e932509b0fdf10fe0089.tar.gz macaw-web-36e87b708ed3a2b0d6f2e932509b0fdf10fe0089.tar.bz2 macaw-web-36e87b708ed3a2b0d6f2e932509b0fdf10fe0089.zip |
Diffstat (limited to '')
-rw-r--r-- | src/components/new_chat.rs | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/components/new_chat.rs b/src/components/new_chat.rs index b706ca9..2f9b943 100644 --- a/src/components/new_chat.rs +++ b/src/components/new_chat.rs @@ -6,7 +6,7 @@ use leptos::{html::Input, prelude::*}; use reactive_stores::{ArcStore, Store}; use thiserror::Error; -use crate::{chat::{ArcMacawChat, MacawChat}, client::Client, open_chats::OpenChatsPanel, state_store::StateStore, user::{ArcMacawUser, MacawUser}}; +use crate::{chat::{ArcMacawChat, MacawChat}, client::Client, open_chats::OpenChatsPanel, state_store::StateStore, user::{fetch_avatar, ArcMacawUser, MacawUser}}; #[derive(Clone, Debug, Error)] pub enum NewChatError { @@ -41,7 +41,7 @@ pub fn NewChatWidget(set_open_new_chat: WriteSignal<bool>) -> impl IntoView { let chat_state_store: StateStore<BareJID, ArcStore<Chat>> = use_context().expect("no chat state store"); - let user_state_store: StateStore<BareJID, ArcStore<User>> = + let user_state_store: StateStore<BareJID, (ArcStore<User>, ArcRwSignal<String>)> = use_context().expect("no user state store"); let open_chat = Action::new_local(move |_| { @@ -77,7 +77,16 @@ pub fn NewChatWidget(set_open_new_chat: WriteSignal<bool>) -> impl IntoView { let chat = { // let user = MacawUser::got_user(user); - let user = user_state_store.store(user.jid.clone(), ArcStore::new(user)); + // 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 + } else { + let avatar = fetch_avatar(user.avatar.as_deref()).await; + let avatar = ArcRwSignal::new(avatar); + user_state_store.store(user.jid.clone(), (ArcStore::new(user), avatar)) + }; let user = ArcMacawUser { user }; let chat = chat_state_store.store(chat.correspondent.clone(), ArcStore::new(chat)); ArcMacawChat { chat, user } |