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