From 12d9e5955092b282a96add03ddfc148f01f3a3e8 Mon Sep 17 00:00:00 2001 From: cel 🌸 Date: Sun, 1 Jun 2025 21:32:13 +0100 Subject: WIP: fix untracked state --- src/user.rs | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) (limited to 'src/user.rs') 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 { - 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, + pub user: LocalResource>, } 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; + type Target = LocalResource>; fn deref(&self) -> &Self::Target { &self.user -- cgit