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