fix(js): reload stale popstate partials
When back/forward navigation receives an incompatible or unusable partial response, reload the current URL instead of leaving the previous UI stale. req: page_swap/005 req: page_swap/006 req: runtime/004
This commit is contained in:
@@ -180,8 +180,9 @@
|
|||||||
headers: { "X-SLHX-Partial": "1", "Accept": "text/html" },
|
headers: { "X-SLHX-Partial": "1", "Accept": "text/html" },
|
||||||
credentials: "same-origin",
|
credentials: "same-origin",
|
||||||
});
|
});
|
||||||
if (!await applyResponse(response, root) && mode !== "none") {
|
if (!await applyResponse(response, root)) {
|
||||||
location.href = href;
|
if (mode === "none") location.reload();
|
||||||
|
else location.href = href;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (mode === "push") history.pushState({ slhx: true }, "", href);
|
if (mode === "push") history.pushState({ slhx: true }, "", href);
|
||||||
|
|||||||
@@ -145,7 +145,16 @@ fn runtime_exposes_page_swap_hooks() {
|
|||||||
assert!(source.contains("x-slhx-title"));
|
assert!(source.contains("x-slhx-title"));
|
||||||
assert!(source.contains("x-slhx-fingerprint"));
|
assert!(source.contains("x-slhx-fingerprint"));
|
||||||
assert!(source.contains("slhx:missing-content-slot"));
|
assert!(source.contains("slhx:missing-content-slot"));
|
||||||
assert!(source.contains("location.href = href"));
|
assert!(source.contains("else location.href = href"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn runtime_popstate_failed_partials_reload_instead_of_stale_ui() {
|
||||||
|
// req: page_swap/005 req: page_swap/006 req: runtime/004
|
||||||
|
let source = slhx_js::RUNTIME_JS;
|
||||||
|
|
||||||
|
assert!(source.contains("if (mode === \"none\") location.reload();"));
|
||||||
|
assert!(source.contains("if (root) navigateUrl(location.href, root, \"none\")"));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
Reference in New Issue
Block a user