summaryrefslogtreecommitdiffstats
path: root/src/components/new_chat.rs
diff options
context:
space:
mode:
authorLibravatar cel 🌸 <cel@bunny.garden>2025-06-07 17:36:22 +0100
committerLibravatar cel 🌸 <cel@bunny.garden>2025-06-07 17:36:22 +0100
commit36e87b708ed3a2b0d6f2e932509b0fdf10fe0089 (patch)
tree5f3fc5a3d863f52a82a204a7746532202103d7cc /src/components/new_chat.rs
parent4a5aa6579f5184c443ffbe80ce93e0daa0926826 (diff)
downloadmacaw-web-36e87b708ed3a2b0d6f2e932509b0fdf10fe0089.tar.gz
macaw-web-36e87b708ed3a2b0d6f2e932509b0fdf10fe0089.tar.bz2
macaw-web-36e87b708ed3a2b0d6f2e932509b0fdf10fe0089.zip
fix: avatar flashing from avatar loadHEADmain
Diffstat (limited to '')
-rw-r--r--src/components/new_chat.rs15
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 }