tallyweb_frontend/countable/
signal.rs1use super::super::UserSession;
2use super::*;
3use components::MessageJar;
4use leptos::*;
5
6#[component(transparent)]
7pub fn ProvideStore(children: ChildrenFn) -> impl IntoView {
8 let user = expect_context::<RwSignal<UserSession>>();
9 let msg = expect_context::<MessageJar>();
10
11 let store_resource = create_blocking_resource(user, move |user| async move {
12 server::get_countable_store(user.user_uuid).await
13 });
14 provide_context(store_resource);
15
16 let store = create_rw_signal(CountableStore::default());
17 provide_context(store);
18
19 create_isomorphic_effect(move |_| match store_resource.get() {
20 Some(Ok(s)) => {
21 store.set(s);
22 }
23 Some(Err(err)) => {
24 msg.set_err(err);
25 }
26 None => {}
27 });
28
29 view! {
30 <Await future=move || server::get_countable_store(user.get_untracked().user_uuid) let:res>
31
32 {
33 if let Ok(data) = res {
34 store.set(data.clone());
35 }
36 children()
37 }
38
39 </Await>
40 }
41}