diff options
author | 2025-06-01 21:32:13 +0100 | |
---|---|---|
committer | 2025-06-01 21:32:13 +0100 | |
commit | 12d9e5955092b282a96add03ddfc148f01f3a3e8 (patch) | |
tree | bca74c6132c25c8493b8b209f20203c71b1daad6 /src/message.rs | |
parent | 33bb7130943b5f74b3b0f08c5e6d8f7c5e54d4c0 (diff) | |
download | macaw-web-12d9e5955092b282a96add03ddfc148f01f3a3e8.tar.gz macaw-web-12d9e5955092b282a96add03ddfc148f01f3a3e8.tar.bz2 macaw-web-12d9e5955092b282a96add03ddfc148f01f3a3e8.zip |
WIP: fix untracked stateleptos-fetch
Diffstat (limited to 'src/message.rs')
-rw-r--r-- | src/message.rs | 34 |
1 files changed, 16 insertions, 18 deletions
diff --git a/src/message.rs b/src/message.rs index a47c75f..2a5fe18 100644 --- a/src/message.rs +++ b/src/message.rs @@ -8,14 +8,19 @@ use leptos::prelude::*; use crate::{client::Client, user::MacawUser}; +#[derive(Clone)] +pub struct GotMessage(Message); + async fn get_message(id: Uuid) -> ArcStore<Message> { - let client: Client = use_context().expect("no client in context"); - ArcStore::new(client.get_message(id).await.unwrap()) + // let client: Client = use_context().expect("no client in context"); + // ArcStore::new(client.get_message(id).await.unwrap()) + let GotMessage(message) = use_context().expect("no message in context"); + ArcStore::new(message) } -#[derive(Clone)] +#[derive(Clone, Copy)] pub struct MacawMessage { - pub message: ArcStore<Message>, + pub message: LocalResource<ArcStore<Message>>, pub user: MacawUser, } @@ -24,25 +29,18 @@ impl MacawMessage { let query_client: QueryClient = expect_context(); let id = message.id; - let message_store = query_client.subscribe_value_local(get_message, move || id); - if let Some(message_store) = message_store.get() { - message_store.set(message); - let user = MacawUser::got_user(user); - Self { message: message_store, user } - } else { - let message_store = ArcStore::new(message); - query_client.set_query_local(get_message, id, message_store.clone()); - let user = MacawUser::got_user(user); - Self { - message: message_store, - user, - } + provide_context(GotMessage(message)); + let message = query_client.local_resource(get_message, move || id); + let user = MacawUser::got_user(user); + Self { + message, + user, } } } impl Deref for MacawMessage { - type Target = ArcStore<Message>; + type Target = LocalResource<ArcStore<Message>>; fn deref(&self) -> &Self::Target { &self.message |