blob: f24e3a5810774f390f87a2418a616789c651b2e8 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
macro_rules! AsyncResource {
(
(
$(
$input_name:ident : $input_type:ty = $input:expr
),*
) -> $output:ty $fetcher:block
) => {{
async fn fetcher($($input_name : $input_type),*) -> $output $fetcher
leptos::prelude::LocalResource::new(move || fetcher($($input),*))
}}
}
pub(crate) use AsyncResource;
macro_rules! AsyncFetch {
(
fetcher = $fetcher:block
producer = |$bound_variable:pat_param| $producer:block
) => {{
use leptos::{
prelude::{ElementChild, LocalResource, Suspend, Transition},
view,
};
view! {
<Transition fallback=|| {
view! { <p>"Loading..."</p> }
}>
{move || Suspend::new(async move {
let resource = { LocalResource::new(move || $fetcher) };
resource
.await
.map(|$bound_variable| $producer)
})}
</Transition>
}
}};
(
@map_error_in_producer
from_resource = $resource:ident
producer = |$bound_variable:pat_param| $producer:block
) => {{
use leptos::prelude::{ElementChild, Suspend, Transition};
leptos::view! {
<Transition fallback=|| {
view! { <p>"Loading..."</p> }
}>
{move || Suspend::new(async move {
$resource
.await
.map(|$bound_variable| $producer)
})}
</Transition>
}
}};
}
pub(crate) use AsyncFetch;
|