fix(hosts): switch hosts resource to LocalResource to fix hydration warning
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -287,12 +287,12 @@ fn PaginationBar(
|
|||||||
|
|
||||||
#[component]
|
#[component]
|
||||||
fn HostTable(
|
fn HostTable(
|
||||||
hosts: Resource<Result<HostsPageData, ServerFnError>>,
|
hosts: LocalResource<Result<HostsPageData, ServerFnError>>,
|
||||||
pending_delete: RwSignal<Option<(i64, String)>>,
|
pending_delete: RwSignal<Option<(i64, String)>>,
|
||||||
) -> impl IntoView {
|
) -> impl IntoView {
|
||||||
view! {
|
view! {
|
||||||
<Suspense fallback=|| view! { <p class="empty">"Loading hosts…"</p> }>
|
<Suspense fallback=|| view! { <p class="empty">"Loading hosts…"</p> }>
|
||||||
{move || hosts.get().map(|result| match result {
|
{move || hosts.get().map(|r| match (*r).clone() {
|
||||||
Err(e) => view! {
|
Err(e) => view! {
|
||||||
<p class="error">"Could not load hosts: " {e.to_string()}</p>
|
<p class="error">"Could not load hosts: " {e.to_string()}</p>
|
||||||
}.into_any(),
|
}.into_any(),
|
||||||
@@ -380,28 +380,30 @@ pub fn HostsPage() -> impl IntoView {
|
|||||||
let page = RwSignal::new(1i64);
|
let page = RwSignal::new(1i64);
|
||||||
let per_page = RwSignal::new(15i64);
|
let per_page = RwSignal::new(15i64);
|
||||||
|
|
||||||
let hosts = Resource::new(
|
// LocalResource avoids reading a resource outside <Suspense> during hydration.
|
||||||
move || (
|
// 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(),
|
name_filter.get(),
|
||||||
network_id_filter.get(),
|
network_id_filter.get(),
|
||||||
port_filter.get(),
|
port_filter.get(),
|
||||||
app_id_filter.get(),
|
app_id_filter.get(),
|
||||||
page.get(),
|
page.get(),
|
||||||
per_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 networks_res = LocalResource::new(|| get_networks());
|
||||||
let applications_res = LocalResource::new(|| get_applications());
|
let applications_res = LocalResource::new(|| get_applications());
|
||||||
|
|
||||||
let total_pages = Signal::derive(move || {
|
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 || {
|
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! {
|
view! {
|
||||||
|
|||||||
Reference in New Issue
Block a user