Skip to content

Commit 6ea65f1

Browse files
committed
Fix DiffPanel: preserve base ref on scope switch, fix file scroll target, filter stale refs
- Scope switch (selectGitScope) now preserves diffBaseRef when switching to branch scope instead of clearing it via stripDiffSearchParams - Scroll-to-file useEffect updated to query [data-title] elements (which AnnotatableCodeView renders) instead of missing [data-diff-file-path] - Base ref combobox now filters choices client-side by baseRefQuery text so stale/unrelated refs are hidden during refetches
1 parent e2a6588 commit 6ea65f1

1 file changed

Lines changed: 17 additions & 4 deletions

File tree

apps/web/src/components/DiffPanel.tsx

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,13 @@ export default function DiffPanel({ mode = "inline", composerDraftTarget }: Diff
380380
const baseRefItems = [AUTOMATIC_BASE_REF, ...baseRefChoices.map(valueForBaseRefChoice)];
381381
const filteredBaseRefItems = [
382382
...(baseRefQuery.trim().length === 0 ? [AUTOMATIC_BASE_REF] : []),
383-
...baseRefChoices.map(valueForBaseRefChoice),
383+
...baseRefChoices
384+
.filter(
385+
(choice) =>
386+
baseRefQuery.trim().length === 0 ||
387+
choice.label.toLowerCase().includes(baseRefQuery.trim().toLowerCase()),
388+
)
389+
.map(valueForBaseRefChoice),
384390
];
385391
const gitDiff = selectedGitSource?.diff;
386392

@@ -436,8 +442,8 @@ export default function DiffPanel({ mode = "inline", composerDraftTarget }: Diff
436442
return;
437443
}
438444
const target = Array.from(
439-
patchViewportRef.current.querySelectorAll<HTMLElement>("[data-diff-file-path]"),
440-
).find((element) => element.dataset.diffFilePath === selectedFilePath);
445+
patchViewportRef.current.querySelectorAll<HTMLElement>("[data-title]"),
446+
).find((element) => element.textContent?.trim() === selectedFilePath);
441447
target?.scrollIntoView({ block: "nearest" });
442448
}, [selectedFilePath, renderableFiles]);
443449

@@ -491,8 +497,15 @@ export default function DiffPanel({ mode = "inline", composerDraftTarget }: Diff
491497
to: "/$environmentId/$threadId",
492498
params: buildThreadRouteParams(scopeThreadRef(activeThread.environmentId, activeThread.id)),
493499
search: (previous) => {
500+
const prevBaseRef =
501+
scope === "branch" ? parseDiffRouteSearch(previous).diffBaseRef : undefined;
494502
const rest = stripDiffSearchParams(previous);
495-
return { ...rest, diff: "1", ...(scope === "unstaged" ? { diffScope: scope } : {}) };
503+
return {
504+
...rest,
505+
diff: "1",
506+
...(scope === "unstaged" ? { diffScope: scope } : {}),
507+
...(prevBaseRef ? { diffBaseRef: prevBaseRef } : {}),
508+
};
496509
},
497510
});
498511
};

0 commit comments

Comments
 (0)