tallyweb_frontend/countable/
signal.rs

1use 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}