Skip to content

Commit e7cba5d

Browse files
sudo-shashankDavid Himmelstrup
andauthored
Update Leptos deps (#108)
Co-authored-by: David Himmelstrup <[email protected]>
1 parent b8ea1c0 commit e7cba5d

File tree

10 files changed

+638
-602
lines changed

10 files changed

+638
-602
lines changed

Cargo.lock

Lines changed: 493 additions & 502 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,14 @@ console_log = "1"
2424
derive_more = { version = "1", features = ["from", "into"] }
2525
fvm_ipld_encoding = "0.5"
2626
fvm_shared = { version = "~4.5" }
27+
getrandom = { version = "0.2", features = ["js"], optional = true }
2728
hex = "0.4"
2829
http = { version = "1", optional = true }
29-
leptos = "0.6"
30-
leptos-use = "0.13"
31-
leptos_axum = { version = "0.6", default-features = false, optional = true }
32-
leptos_meta = "0.6"
33-
leptos_router = "0.6"
30+
leptos = "0.7.3"
31+
leptos-use = "0.15.3"
32+
leptos_axum = { version = "0.7.3", default-features = false, optional = true }
33+
leptos_meta = "0.7.3"
34+
leptos_router = "0.7.3"
3435
libsecp256k1 = "0.7"
3536
log = "0.4"
3637
multihash-codetable = { version = "0.1" }
@@ -47,7 +48,7 @@ worker = { version = "0.5", features = ['http', 'axum'], optional = true }
4748
worker-macros = { version = "0.5", features = ['http'], optional = true }
4849

4950
[features]
50-
hydrate = ["leptos/hydrate", "leptos_meta/hydrate", "leptos_router/hydrate"]
51+
hydrate = ["leptos/hydrate"]
5152
ssr = [
5253
"dep:tower",
5354
"dep:http",
@@ -58,6 +59,7 @@ ssr = [
5859
"leptos_router/ssr",
5960
"dep:worker",
6061
"dep:worker-macros",
62+
"dep:getrandom",
6163
]
6264

6365
[profile.release]

src/app.rs

Lines changed: 48 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,44 @@
1-
use leptos::{component, create_local_resource, event_target_value, view, IntoView, SignalGet};
1+
use crate::rpc_context::RpcContext;
2+
use leptos::prelude::*;
3+
use leptos::{component, leptos_dom::helpers::event_target_value, view, IntoView};
24
use leptos_meta::*;
3-
use leptos_router::*;
5+
use leptos_router::components::*;
6+
use leptos_router::path;
47

5-
use crate::rpc_context::RpcContext;
8+
#[allow(dead_code)]
9+
pub fn shell(options: LeptosOptions) -> impl IntoView {
10+
view! {
11+
<!DOCTYPE html>
12+
<html lang="en">
13+
<head>
14+
<meta charset="utf-8"/>
15+
<meta name="viewport" content="width=device-width, initial-scale=1"/>
16+
17+
<AutoReload options=options.clone() />
18+
<HydrationScripts options/>
19+
<MetaTags/>
20+
</head>
21+
</html>
22+
}
23+
}
624

725
#[component]
8-
pub fn Loader(loading: impl Fn() -> bool + 'static) -> impl IntoView {
26+
pub fn Loader(loading: impl Fn() -> bool + 'static + Send) -> impl IntoView {
927
view! { <span class:loader=loading /> }
1028
}
1129

1230
#[component]
1331
pub fn BlockchainExplorer() -> impl IntoView {
1432
let rpc_context = RpcContext::use_context();
15-
let network_name = create_local_resource(
16-
move || rpc_context.get(),
17-
move |provider| async move { provider.network_name().await.ok() },
18-
);
33+
let network_name = LocalResource::new(move || {
34+
let provider = rpc_context.get();
35+
async move { provider.network_name().await.ok() }
36+
});
1937

20-
let network_version = create_local_resource(
21-
move || rpc_context.get(),
22-
move |provider| async move { provider.network_version().await.ok() },
23-
);
38+
let network_version = LocalResource::new(move || {
39+
let provider = rpc_context.get();
40+
async move { provider.network_version().await.ok() }
41+
});
2442

2543
view! {
2644
<h1 class="mb-4 text-4xl font-extrabold leading-none tracking-tight text-gray-900 md:text-5xl lg:text-6xl">
@@ -31,15 +49,20 @@ pub fn BlockchainExplorer() -> impl IntoView {
3149
<option value="https://api.node.glif.io/">Glif.io Mainnet</option>
3250
</select>
3351
<p>StateNetworkName</p>
34-
<p class="px-8">
35-
<span>{move || network_name.get()}</span>
36-
<Loader loading=move || network_name.loading().get() />
37-
</p>
52+
<Suspense fallback={move || view!{ <p>Loading network name...</p> }}>
53+
<p class="px-8">
54+
<span>{move || network_name.get().as_deref().flatten().cloned()}</span>
55+
<Loader loading={move || network_name.get().is_none()} />
56+
</p>
57+
</Suspense>
58+
3859
<p>StateNetworkVersion</p>
39-
<p class="px-8">
40-
<span>{move || network_version.get()}</span>
41-
<Loader loading=move || network_name.loading().get() />
42-
</p>
60+
<Suspense fallback={move || view!{ <p>Loading network version...</p> }}>
61+
<p class="px-8">
62+
<span>{move || network_version.get().as_deref().flatten().cloned()}</span>
63+
<Loader loading={move || network_version.get().is_none()} />
64+
</p>
65+
</Suspense>
4366
}
4467
}
4568

@@ -61,11 +84,11 @@ pub fn App() -> impl IntoView {
6184
<Stylesheet href="/style.css" />
6285
<Link rel="icon" type_="image/x-icon" href="/favicon.ico" />
6386
<Router>
64-
<Routes>
65-
<Route path="/" view=BlockchainExplorer />
66-
<Route path="/faucet" view=crate::faucet::views::Faucets />
67-
<Route path="/faucet/calibnet" view=crate::faucet::views::Faucet_Calibnet />
68-
<Route path="/faucet/mainnet" view=crate::faucet::views::Faucet_Mainnet />
87+
<Routes fallback=|| "Not found.">
88+
<Route path=path!("/") view=BlockchainExplorer />
89+
<Route path=path!("/faucet") view=crate::faucet::views::Faucets />
90+
<Route path=path!("/faucet/calibnet") view=crate::faucet::views::Faucet_Calibnet />
91+
<Route path=path!("/faucet/mainnet") view=crate::faucet::views::Faucet_Mainnet />
6992
</Routes>
7093
<Footer />
7194
</Router>

src/faucet/controller.rs

Lines changed: 40 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
use super::{model::FaucetModel, utils::sign_with_secret_key};
22
use cid::Cid;
33
use fvm_shared::{address::Network, econ::TokenAmount};
4-
use leptos::{
5-
create_local_resource, create_local_resource_with_initial_value, create_rw_signal, spawn_local,
6-
SignalGet as _, SignalSet as _, SignalUpdate as _,
7-
};
4+
use leptos::prelude::*;
5+
use leptos::task::spawn_local;
86

97
use crate::{
108
address::parse_address, lotus_json::LotusJson, message::message_transfer,
@@ -21,11 +19,12 @@ pub(super) struct FaucetController {
2119
impl FaucetController {
2220
pub fn new(network: Network) -> Self {
2321
let is_mainnet = network == Network::Mainnet;
24-
let target_address = create_rw_signal(String::new());
25-
let target_balance = create_local_resource_with_initial_value(
26-
move || target_address.get(),
27-
move |address| async move {
28-
if let Ok(address) = parse_address(&address, network) {
22+
let target_address = RwSignal::new(String::new());
23+
let balance_trigger = Trigger::new();
24+
let target_balance = LocalResource::new(move || {
25+
let target_address = target_address.get();
26+
async move {
27+
if let Ok(address) = parse_address(&target_address, network) {
2928
Provider::from_network(network)
3029
.wallet_balance(address)
3130
.await
@@ -34,22 +33,21 @@ impl FaucetController {
3433
} else {
3534
TokenAmount::from_atto(0)
3635
}
37-
},
38-
Some(TokenAmount::from_atto(0)),
39-
);
40-
let sender_address = create_local_resource(
41-
move || (),
42-
move |()| async move {
36+
}
37+
});
38+
let sender_address = LocalResource::new(move || {
39+
balance_trigger.track();
40+
async move {
4341
faucet_address(is_mainnet)
4442
.await
4543
.map(|LotusJson(addr)| addr)
4644
.ok()
47-
},
48-
);
49-
let faucet_balance = create_local_resource_with_initial_value(
50-
move || sender_address.get().flatten(),
51-
move |addr| async move {
52-
if let Some(addr) = addr {
45+
}
46+
});
47+
let faucet_balance = LocalResource::new(move || {
48+
balance_trigger.track();
49+
async move {
50+
if let Some(addr) = sender_address.await {
5351
Provider::from_network(network)
5452
.wallet_balance(addr)
5553
.await
@@ -58,16 +56,15 @@ impl FaucetController {
5856
} else {
5957
TokenAmount::from_atto(0)
6058
}
61-
},
62-
Some(TokenAmount::from_atto(0)),
63-
);
64-
59+
}
60+
});
6561
let faucet = FaucetModel {
6662
network,
67-
send_disabled: create_rw_signal(false),
68-
send_limited: create_rw_signal(0),
69-
sent_messages: create_rw_signal(Vec::new()),
70-
error_messages: create_rw_signal(Vec::new()),
63+
send_disabled: RwSignal::new(false),
64+
send_limited: RwSignal::new(0),
65+
sent_messages: RwSignal::new(Vec::new()),
66+
error_messages: RwSignal::new(Vec::new()),
67+
balance_trigger,
7168
target_balance,
7269
faucet_balance,
7370
target_address,
@@ -77,11 +74,10 @@ impl FaucetController {
7774

7875
#[allow(dead_code)]
7976
pub fn refetch_balances(&self) {
80-
use leptos::SignalGetUntracked;
77+
use leptos::prelude::GetUntracked;
8178

8279
log::info!("Checking for new transactions");
83-
self.faucet.target_balance.refetch();
84-
self.faucet.faucet_balance.refetch();
80+
self.faucet.balance_trigger.notify();
8581
let pending = self
8682
.faucet
8783
.sent_messages
@@ -111,7 +107,12 @@ impl FaucetController {
111107
}));
112108
}
113109
pub fn get_target_balance(&self) -> TokenAmount {
114-
self.faucet.target_balance.get().unwrap_or_default()
110+
self.faucet
111+
.target_balance
112+
.get()
113+
.as_deref()
114+
.cloned()
115+
.unwrap_or_default()
115116
}
116117

117118
pub fn get_target_address(&self) -> String {
@@ -131,7 +132,12 @@ impl FaucetController {
131132
}
132133

133134
pub fn get_faucet_balance(&self) -> TokenAmount {
134-
self.faucet.faucet_balance.get().unwrap_or_default()
135+
self.faucet
136+
.faucet_balance
137+
.get()
138+
.as_deref()
139+
.cloned()
140+
.unwrap_or_default()
135141
}
136142

137143
pub fn get_error_messages(&self) -> Vec<String> {

src/faucet/model.rs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
use cid::Cid;
2-
use fvm_shared::{
3-
address::{Address, Network},
4-
econ::TokenAmount,
5-
};
6-
use leptos::{Resource, RwSignal};
2+
use fvm_shared::{address::Network, econ::TokenAmount};
3+
use leptos::prelude::{LocalResource, RwSignal, Trigger};
74

85
#[derive(Clone)]
96
pub(super) struct FaucetModel {
@@ -12,7 +9,8 @@ pub(super) struct FaucetModel {
129
pub send_limited: RwSignal<i32>,
1310
pub sent_messages: RwSignal<Vec<(Cid, bool)>>,
1411
pub error_messages: RwSignal<Vec<String>>,
15-
pub faucet_balance: Resource<Option<Address>, TokenAmount>,
16-
pub target_balance: Resource<String, TokenAmount>,
12+
pub balance_trigger: Trigger,
13+
pub faucet_balance: LocalResource<TokenAmount>,
14+
pub target_balance: LocalResource<TokenAmount>,
1715
pub target_address: RwSignal<String>,
1816
}

src/faucet/utils.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use crate::{lotus_json::LotusJson, message::SignedMessage};
44
#[cfg(feature = "ssr")]
55
use fvm_shared::address::Network;
66
use fvm_shared::{address::Address, econ::TokenAmount, message::Message};
7-
use leptos::{server, ServerFnError};
7+
use leptos::{prelude::ServerFnError, server};
88

99
#[server]
1010
pub async fn faucet_address(is_mainnet: bool) -> Result<LotusJson<Address>, ServerFnError> {

src/faucet/views.rs

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use fvm_shared::address::Network;
2-
use leptos::{component, event_target_value, view, IntoView, SignalGet};
2+
use leptos::{component, leptos_dom::helpers::event_target_value, view, IntoView};
33

4-
use leptos::*;
4+
use leptos::prelude::*;
55
#[cfg(feature = "hydrate")]
66
use leptos_use::*;
77

@@ -10,7 +10,7 @@ use crate::faucet::utils::format_balance;
1010

1111
#[component]
1212
pub fn Faucet(target_network: Network) -> impl IntoView {
13-
let faucet = create_rw_signal(FaucetController::new(target_network));
13+
let faucet = RwSignal::new(FaucetController::new(target_network));
1414

1515
#[cfg(feature = "hydrate")]
1616
let _ = use_interval_fn(
@@ -67,9 +67,9 @@ pub fn Faucet(target_network: Network) -> impl IntoView {
6767
.collect::<Vec<_>>()}
6868
</div>
6969
}
70-
.into_view()
70+
.into_any()
7171
} else {
72-
view! {}.into_view()
72+
().into_any()
7373
}
7474
}}
7575
<div class="max-w-2xl mx-auto">
@@ -92,14 +92,14 @@ pub fn Faucet(target_network: Network) -> impl IntoView {
9292
<button class="bg-gray-400 text-white font-bold py-2 px-4 rounded-r" disabled=true>
9393
"Sending..."
9494
</button>
95-
}
95+
}.into_any()
9696
} else if faucet.get().get_send_rate_limit_remaining() > 0 {
9797
let duration = faucet.get().get_send_rate_limit_remaining();
9898
view! {
9999
<button class="bg-gray-400 text-white font-bold py-2 px-4 rounded-r" disabled=true>
100100
{format!("Rate-limited! {duration}s")}
101101
</button>
102-
}
102+
}.into_any()
103103
} else {
104104
view! {
105105
<button
@@ -110,19 +110,23 @@ pub fn Faucet(target_network: Network) -> impl IntoView {
110110
>
111111
Send
112112
</button>
113-
}
113+
}.into_any()
114114
}
115115
}}
116116

117117
</div>
118118
<div class="flex justify-between my-4">
119119
<div>
120120
<h3 class="text-lg font-semibold">Faucet Balance:</h3>
121-
<p class="text-xl">{ move || format_balance(&faucet.get().get_faucet_balance(), &faucet.get().get_fil_unit()) }</p>
121+
<Suspense fallback={move || view!{ <p>Loading faucet balance...</p> }}>
122+
<p class="text-xl">{ move || format_balance(&faucet.get().get_faucet_balance(), &faucet.get().get_fil_unit()) }</p>
123+
</Suspense>
122124
</div>
123125
<div>
124126
<h3 class="text-lg font-semibold">Target Balance:</h3>
125-
<p class="text-xl">{ move || format_balance(&faucet.get().get_target_balance(), &faucet.get().get_fil_unit()) }</p>
127+
<Suspense fallback={move || view!{ <p>Loading target balance...</p> }}>
128+
<p class="text-xl">{ move || format_balance(&faucet.get().get_target_balance(), &faucet.get().get_fil_unit()) }</p>
129+
</Suspense>
126130
</div>
127131
</div>
128132
<hr class="my-4 border-t border-gray-300" />
@@ -147,9 +151,9 @@ pub fn Faucet(target_network: Network) -> impl IntoView {
147151
</ul>
148152
</div>
149153
}
150-
.into_view()
154+
.into_any()
151155
} else {
152-
view! {}.into_view()
156+
().into_any()
153157
}
154158
}}
155159
</div>

0 commit comments

Comments
 (0)