From 359d67fabc132f25715753641d3c65021c6e8eb3 Mon Sep 17 00:00:00 2001
From: mathieu
Date: Sat, 16 May 2026 03:12:14 +0200
Subject: [PATCH] fix(hosts): switch hosts resource to LocalResource to fix
hydration warning
Co-Authored-By: Claude Sonnet 4.6
---
src/client/hosts.rs | 24 +++++++++++++-----------
1 file changed, 13 insertions(+), 11 deletions(-)
diff --git a/src/client/hosts.rs b/src/client/hosts.rs
index 5cc8494..9c03ee2 100644
--- a/src/client/hosts.rs
+++ b/src/client/hosts.rs
@@ -287,12 +287,12 @@ fn PaginationBar(
#[component]
fn HostTable(
- hosts: Resource>,
+ hosts: LocalResource>,
pending_delete: RwSignal
}>
- {move || hosts.get().map(|result| match result {
+ {move || hosts.get().map(|r| match (*r).clone() {
Err(e) => view! {
"Could not load hosts: " {e.to_string()}
}.into_any(),
@@ -380,28 +380,30 @@ pub fn HostsPage() -> impl IntoView {
let page = RwSignal::new(1i64);
let per_page = RwSignal::new(15i64);
- let hosts = Resource::new(
- move || (
+ // LocalResource avoids reading a resource outside during hydration.
+ // All dependencies (filters, pagination, action versions) are client-side only,
+ // so there is no benefit to SSR for this resource.
+ let hosts = LocalResource::new(move || {
+ let _ = create_action.version().get();
+ let _ = delete_action.version().get();
+ get_hosts_page(
name_filter.get(),
network_id_filter.get(),
port_filter.get(),
app_id_filter.get(),
page.get(),
per_page.get(),
- create_action.version().get(),
- delete_action.version().get(),
- ),
- |(name, net, port, app, p, pp, _, _)| get_hosts_page(name, net, port, app, p, pp),
- );
+ )
+ });
let networks_res = LocalResource::new(|| get_networks());
let applications_res = LocalResource::new(|| get_applications());
let total_pages = Signal::derive(move || {
- hosts.get().and_then(|r| r.ok()).map(|p| p.total_pages).unwrap_or(1)
+ hosts.get().and_then(|r| (*r).clone().ok()).map(|p| p.total_pages).unwrap_or(1)
});
let total = Signal::derive(move || {
- hosts.get().and_then(|r| r.ok()).map(|p| p.total).unwrap_or(0)
+ hosts.get().and_then(|r| (*r).clone().ok()).map(|p| p.total).unwrap_or(0)
});
view! {