From ff65f2a39ef260b380af86ca7d5356d0c52ced99 Mon Sep 17 00:00:00 2001 From: Seongmin Lee Date: Thu, 20 Aug 2026 01:28:14 +0900 Subject: [PATCH] web: hold selected commit range until navigation lands Signed-off-by: Seongmin Lee --- .../[aturi]/[version]/[[range]]/+page.svelte | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/web/src/routes/[handle]/[repo]/pulls/[aturi]/[version]/[[range]]/+page.svelte b/web/src/routes/[handle]/[repo]/pulls/[aturi]/[version]/[[range]]/+page.svelte index a51933765..c0c83aaf8 100644 --- a/web/src/routes/[handle]/[repo]/pulls/[aturi]/[version]/[[range]]/+page.svelte +++ b/web/src/routes/[handle]/[repo]/pulls/[aturi]/[version]/[[range]]/+page.svelte @@ -104,12 +104,20 @@ const row = commits.findIndex((commit) => commit.hash === hash); return row !== -1 ? row : undefined; }; - // an interdiff's second url slot carries a change-id rather than a commit range, so there - // is nothing to narrow to there + + // hold the committed range until navigation lands + let stagedRange = $state(null); + $effect(() => { + // `pendingRange` is written but never read here, so this can't retrigger itself + void data.view; + stagedRange = null; + }); + const commitRange = $derived( - view.mode === "diff" - ? { start: rowOf(view.head) ?? 0, end: rowOf(view.base) ?? commits.length } - : { start: 0, end: commits.length } + stagedRange ?? + (view.mode === "diff" + ? { start: rowOf(view.head) ?? 0, end: rowOf(view.base) ?? commits.length } + : { start: 0, end: commits.length }) // interdiff doesn't use commitRange ); // rows are newest-first and `end` names the base marker, so in range is [start, end) @@ -123,6 +131,7 @@ }; const confirmCommits = ({ start, end }: Range) => { + stagedRange = { start, end }; const head = commits[start]?.hash ?? commits[0]?.hash ?? ""; const base = commits[end]?.hash ?? ""; const whole = start === 0 && end >= commits.length; -- 2.51.2