diff options
Diffstat (limited to '')
-rw-r--r-- | src/chat.rs | 35 |
1 files changed, 16 insertions, 19 deletions
diff --git a/src/chat.rs b/src/chat.rs index a1ced32..6612431 100644 --- a/src/chat.rs +++ b/src/chat.rs @@ -8,14 +8,19 @@ use leptos::prelude::*; use crate::{client::Client, user::MacawUser}; +#[derive(Clone)] +pub struct GotChat(Chat); + async fn get_chat(jid: BareJID) -> ArcStore<Chat> { - let client: Client = use_context().expect("no client in context"); - ArcStore::new(client.get_chat(jid).await.unwrap()) + // let client: Client = use_context().expect("no client in context"); + // ArcStore::new(client.get_chat(jid).await.unwrap()) + let GotChat(chat) = use_context().expect("no chat in context"); + ArcStore::new(chat) } -#[derive(Clone)] +#[derive(Clone, Copy)] pub struct MacawChat { - pub chat: ArcStore<Chat>, + pub chat: LocalResource<ArcStore<Chat>>, pub user: MacawUser, // user: StateListener<BareJID, ArcStore<User>>, } @@ -25,26 +30,18 @@ impl MacawChat { let query_client: QueryClient = expect_context(); let jid = chat.correspondent.clone(); - let chat_store = query_client.subscribe_value_local(get_chat, move || jid.clone()); - if let Some(chat_store) = chat_store.get() { - chat_store.set(chat); - let user = MacawUser::got_user(user); - Self { chat: chat_store, user } - } else { - let jid = chat.correspondent.clone(); - let chat_store = ArcStore::new(chat); - query_client.set_query_local(get_chat, jid, chat_store.clone()); - let user = MacawUser::got_user(user); - Self { - chat: chat_store, - user, - } + provide_context(GotChat(chat)); + let chat = query_client.local_resource(get_chat, move || jid.clone()); + let user = MacawUser::got_user(user); + Self { + chat, + user, } } } impl Deref for MacawChat { - type Target = ArcStore<Chat>; + type Target = LocalResource<ArcStore<Chat>>; fn deref(&self) -> &Self::Target { &self.chat |