summaryrefslogtreecommitdiffstats
path: root/src/message.rs
diff options
context:
space:
mode:
authorLibravatar cel 🌸 <cel@bunny.garden>2025-06-01 20:17:57 +0100
committerLibravatar cel 🌸 <cel@bunny.garden>2025-06-01 20:17:57 +0100
commit33bb7130943b5f74b3b0f08c5e6d8f7c5e54d4c0 (patch)
tree0617888d360550508ede95aa12c00375cde4e70b /src/message.rs
parent6ee4190a26f32bfa953302ee363ad3bb6c384ebb (diff)
downloadmacaw-web-33bb7130943b5f74b3b0f08c5e6d8f7c5e54d4c0.tar.gz
macaw-web-33bb7130943b5f74b3b0f08c5e6d8f7c5e54d4c0.tar.bz2
macaw-web-33bb7130943b5f74b3b0f08c5e6d8f7c5e54d4c0.zip
feat: switch to leptos-fetch for state management
Diffstat (limited to 'src/message.rs')
-rw-r--r--src/message.rs34
1 files changed, 26 insertions, 8 deletions
diff --git a/src/message.rs b/src/message.rs
index e5caed1..a47c75f 100644
--- a/src/message.rs
+++ b/src/message.rs
@@ -1,30 +1,48 @@
use std::ops::{Deref, DerefMut};
use filamento::{chat::Message, user::User};
+use leptos_fetch::QueryClient;
use reactive_stores::ArcStore;
use uuid::Uuid;
use leptos::prelude::*;
-use crate::{state_store::{StateListener, StateStore}, user::MacawUser};
+use crate::{client::Client, user::MacawUser};
+
+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())
+}
#[derive(Clone)]
pub struct MacawMessage {
- pub message: StateListener<Uuid, ArcStore<Message>>,
+ pub message: ArcStore<Message>,
pub user: MacawUser,
}
impl MacawMessage {
pub fn got_message_and_user(message: Message, user: User) -> Self {
- let message_state_store: StateStore<Uuid, ArcStore<Message>> =
- use_context().expect("no message state store");
- let message = message_state_store.store(message.id, ArcStore::new(message));
- let user = MacawUser::got_user(user);
- Self { message, user }
+ 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,
+ }
+ }
}
}
impl Deref for MacawMessage {
- type Target = StateListener<Uuid, ArcStore<Message>>;
+ type Target = ArcStore<Message>;
fn deref(&self) -> &Self::Target {
&self.message