diff options
Diffstat (limited to '')
-rw-r--r-- | src/components/new_chat.rs | 72 |
1 files changed, 24 insertions, 48 deletions
diff --git a/src/components/new_chat.rs b/src/components/new_chat.rs index 6d64c96..33508b2 100644 --- a/src/components/new_chat.rs +++ b/src/components/new_chat.rs @@ -20,14 +20,24 @@ pub enum NewChatError { } // TODO: remove +#[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)] +pub struct GotUser(User); + async fn get_user(jid: BareJID) -> ArcStore<User> { - let client: Client = use_context().expect("no client in context"); - ArcStore::new(client.get_user(jid).await.unwrap()) + // let client: Client = use_context().expect("no client in context"); + // ArcStore::new(client.get_user(jid).await.unwrap()) + let GotUser(user) = use_context().expect("no user in context"); + ArcStore::new(user) } #[component] @@ -87,51 +97,17 @@ pub fn NewChatWidget(set_open_new_chat: WriteSignal<bool>) -> impl IntoView { let chat = { // let user = MacawUser::got_user(user); 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 = { - let jid = user.jid.clone(); - let user_store = query_client.subscribe_value_local(get_user, move || jid.clone()); - if let Some(user_store) = user_store.get() { - user_store.set(user); - MacawUser { user: user_store } - } else { - let jid = user.jid.clone(); - let user_store = ArcStore::new(user); - query_client.set_query_local(get_user, jid, user_store.clone()); - MacawUser { - user: user_store, - } - } - - }; - MacawChat { 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 = { - let jid = user.jid.clone(); - let user_store = query_client.subscribe_value_local(get_user, move || jid.clone()); - if let Some(user_store) = user_store.get() { - user_store.set(user); - MacawUser { user: user_store } - } else { - let jid = user.jid.clone(); - let user_store = ArcStore::new(user); - query_client.set_query_local(get_user, jid, user_store.clone()); - MacawUser { - user: user_store, - } - } - - }; - MacawChat { - chat: chat_store, - user, + provide_context(GotChat(chat)); + let chat = query_client.local_resource(get_chat, move || jid.clone()); + let user = { + let jid = user.jid.clone(); + provide_context(GotUser(user)); + MacawUser { + user: query_client.local_resource(get_user, move || jid.clone()) } - } + + }; + MacawChat { chat, user } }; open_chats.update(|open_chats| open_chats.open(chat.clone())); set_open_new_chat.set(false); |