fix(app,ui): session review reactivity and VCS query cache (#30660)

This commit is contained in:
Brendan Allan 2026-06-04 10:59:56 +08:00 committed by GitHub
parent 55bafa29d4
commit c35267776a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 21 additions and 22 deletions

View File

@ -467,8 +467,6 @@ export default function Page() {
return {
queryKey: [...vcsKey(), mode] as const,
enabled,
staleTime: Number.POSITIVE_INFINITY,
gcTime: 60 * 1000,
queryFn: mode
? () =>
sdk.client.vcs

View File

@ -182,10 +182,10 @@ export const SessionReview = (props: SessionReviewProps) => {
const opened = () => store.opened
const open = () => props.open ?? store.open
const items = createMemo<Item[]>(() =>
list(props.diffs).map((diff) => ({ ...normalize(diff), preloaded: diff.preloaded })),
const itemsMap = createMemo(() =>
Object.fromEntries(list(props.diffs).map((diff) => [diff.file, { ...normalize(diff), preloaded: diff.preloaded }])),
)
const files = createMemo(() => items().map((diff) => diff.file))
const files = createMemo(() => props.diffs.map((diff) => diff.file!))
const grouped = createMemo(() => {
const next = new Map<string, SessionReviewComment[]>()
for (const comment of props.comments ?? []) {
@ -388,12 +388,13 @@ export const SessionReview = (props: SessionReviewProps) => {
<Show when={hasDiffs()} fallback={props.empty}>
<div class="pb-6">
<Accordion multiple value={open()} onChange={handleChange}>
<For each={items()}>
{(diff) => {
const file = diff.file
<For each={files()}>
{(file) => {
console.log({ file })
const diff = () => itemsMap()[file]
// binary files have empty diffs that we can't render
const diffCanRender = () => diff.additions !== 0 || diff.deletions !== 0
const diffCanRender = () => diff().additions !== 0 || diff().deletions !== 0
const expanded = createMemo(() => open().includes(file))
const mounted = createMemo(() => expanded() && (!!store.visible[file] || pinned(file)))
@ -402,9 +403,9 @@ export const SessionReview = (props: SessionReviewProps) => {
const comments = createMemo(() => grouped().get(file) ?? [])
const commentedLines = createMemo(() => comments().map((c) => c.selection))
const beforeText = () => text(diff, "deletions")
const afterText = () => text(diff, "additions")
const changedLines = () => diff.additions + diff.deletions
const beforeText = () => text(diff(), "deletions")
const afterText = () => text(diff(), "additions")
const changedLines = () => diff().additions + diff().deletions
const mediaKind = createMemo(() => mediaKindFromPath(file))
const tooLarge = createMemo(() => {
@ -415,9 +416,9 @@ export const SessionReview = (props: SessionReviewProps) => {
})
const isAdded = () =>
diff.status === "added" || (beforeText().length === 0 && afterText().length > 0)
diff().status === "added" || (beforeText().length === 0 && afterText().length > 0)
const isDeleted = () =>
diff.status === "deleted" || (afterText().length === 0 && beforeText().length > 0)
diff().status === "deleted" || (afterText().length === 0 && beforeText().length > 0)
const selectedLines = createMemo(() => {
const current = selection()
@ -455,7 +456,7 @@ export const SessionReview = (props: SessionReviewProps) => {
file,
selection,
comment,
preview: selectionPreview(diff, selection),
preview: selectionPreview(diff(), selection),
})
},
onUpdate: ({ id, comment, selection }) => {
@ -464,7 +465,7 @@ export const SessionReview = (props: SessionReviewProps) => {
file,
selection,
comment,
preview: selectionPreview(diff, selection),
preview: selectionPreview(diff(), selection),
})
},
onDelete: (comment) => {
@ -543,7 +544,7 @@ export const SessionReview = (props: SessionReviewProps) => {
<span data-slot="session-review-change" data-type="added">
{i18n.t("ui.sessionReview.change.added")}
</span>
<DiffChanges changes={diff} />
<DiffChanges changes={diff()} />
</div>
</Match>
<Match when={isDeleted()}>
@ -557,7 +558,7 @@ export const SessionReview = (props: SessionReviewProps) => {
</span>
</Match>
<Match when={true}>
<DiffChanges changes={diff} />
<DiffChanges changes={diff()} />
</Match>
</Switch>
<Show when={diffCanRender()}>
@ -613,8 +614,8 @@ export const SessionReview = (props: SessionReviewProps) => {
<Dynamic
component={fileComponent}
mode="diff"
fileDiff={diff.fileDiff}
preloadedDiff={diff.preloaded}
fileDiff={diff().fileDiff}
preloadedDiff={diff().preloaded}
diffStyle={diffStyle()}
onRendered={() => {
props.onDiffRendered?.()
@ -632,8 +633,8 @@ export const SessionReview = (props: SessionReviewProps) => {
media={{
mode: "auto",
path: file,
deleted: diff.status === "deleted",
readFile: diff.status === "deleted" ? undefined : props.readFile,
deleted: diff().status === "deleted",
readFile: diff().status === "deleted" ? undefined : props.readFile,
}}
/>
</Match>