summaryrefslogtreecommitdiffstats
path: root/src/user.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/user.rs29
1 files changed, 13 insertions, 16 deletions
diff --git a/src/user.rs b/src/user.rs
index d92ba4f..2dd0cb2 100644
--- a/src/user.rs
+++ b/src/user.rs
@@ -8,14 +8,19 @@ use leptos::prelude::*;
use crate::{client::Client, roster::{Roster, RosterStoreFields}};
+#[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)
}
-#[derive(Clone)]
+#[derive(Clone, Copy)]
pub struct MacawUser {
- pub user: ArcStore<User>,
+ pub user: LocalResource<ArcStore<User>>,
}
impl MacawUser {
@@ -25,23 +30,15 @@ impl MacawUser {
let query_client: QueryClient = expect_context();
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);
- Self { 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());
- Self {
- user: user_store,
- }
+ provide_context(GotUser(user));
+ Self {
+ user: query_client.local_resource(get_user, move || jid.clone())
}
}
}
impl Deref for MacawUser {
- type Target = ArcStore<User>;
+ type Target = LocalResource<ArcStore<User>>;
fn deref(&self) -> &Self::Target {
&self.user