fix(js): release superseded latest pending state
When data-slhx-policy=latest aborts an in-flight request, release that request's pending UI bookkeeping before starting the replacement request so pending classes, indicators, and disabled controls do not leak. req: convention/006 req: convention/007
This commit is contained in:
@@ -174,7 +174,10 @@
|
||||
const policy = requestPolicy(target, eventName);
|
||||
const active = pending.get(target);
|
||||
if (active && policy === "drop") return;
|
||||
if (active && policy === "latest") active.abort.abort();
|
||||
if (active && policy === "latest") {
|
||||
active.abort.abort();
|
||||
showPending(target, false);
|
||||
}
|
||||
if (active && policy === "queue") {
|
||||
const base = queues.get(target) || active.done;
|
||||
let queued;
|
||||
|
||||
@@ -143,6 +143,15 @@ fn runtime_supports_queued_request_policy() {
|
||||
assert!(source.contains("const base = queues.get(target) || active.done"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn runtime_latest_request_policy_releases_superseded_pending_state() {
|
||||
// req: convention/006 req: convention/007
|
||||
let source = slhx_js::RUNTIME_JS;
|
||||
|
||||
assert!(source.contains("if (active && policy === \"latest\") {\n active.abort.abort();\n showPending(target, false);\n }"));
|
||||
assert!(source.contains("if (pending.get(target)?.abort === abort)"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn runtime_exposes_page_swap_hooks() {
|
||||
let source = slhx_js::RUNTIME_JS;
|
||||
|
||||
Reference in New Issue
Block a user