summaryrefslogtreecommitdiffstats
path: root/src/user.rs
diff options
context:
space:
mode:
authorLibravatar cel 🌸 <cel@bunny.garden>2025-06-01 21:32:13 +0100
committerLibravatar cel 🌸 <cel@bunny.garden>2025-06-01 21:32:13 +0100
commit12d9e5955092b282a96add03ddfc148f01f3a3e8 (patch)
treebca74c6132c25c8493b8b209f20203c71b1daad6 /src/user.rs
parent33bb7130943b5f74b3b0f08c5e6d8f7c5e54d4c0 (diff)
downloadmacaw-web-leptos-fetch.tar.gz
macaw-web-leptos-fetch.tar.bz2
macaw-web-leptos-fetch.zip
WIP: fix untracked stateleptos-fetch
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