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>, ) -> impl IntoView { view! { "Loading hosts…"

}> - {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! {