fix(app,ui): session review reactivity and VCS query cache (#30660)
This commit is contained in:
@@ -467,8 +467,6 @@ export default function Page() {
|
|||||||
return {
|
return {
|
||||||
queryKey: [...vcsKey(), mode] as const,
|
queryKey: [...vcsKey(), mode] as const,
|
||||||
enabled,
|
enabled,
|
||||||
staleTime: Number.POSITIVE_INFINITY,
|
|
||||||
gcTime: 60 * 1000,
|
|
||||||
queryFn: mode
|
queryFn: mode
|
||||||
? () =>
|
? () =>
|
||||||
sdk.client.vcs
|
sdk.client.vcs
|
||||||
|
|||||||
@@ -182,10 +182,10 @@ export const SessionReview = (props: SessionReviewProps) => {
|
|||||||
const opened = () => store.opened
|
const opened = () => store.opened
|
||||||
|
|
||||||
const open = () => props.open ?? store.open
|
const open = () => props.open ?? store.open
|
||||||
const items = createMemo<Item[]>(() =>
|
const itemsMap = createMemo(() =>
|
||||||
list(props.diffs).map((diff) => ({ ...normalize(diff), preloaded: diff.preloaded })),
|
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 grouped = createMemo(() => {
|
||||||
const next = new Map<string, SessionReviewComment[]>()
|
const next = new Map<string, SessionReviewComment[]>()
|
||||||
for (const comment of props.comments ?? []) {
|
for (const comment of props.comments ?? []) {
|
||||||
@@ -388,12 +388,13 @@ export const SessionReview = (props: SessionReviewProps) => {
|
|||||||
<Show when={hasDiffs()} fallback={props.empty}>
|
<Show when={hasDiffs()} fallback={props.empty}>
|
||||||
<div class="pb-6">
|
<div class="pb-6">
|
||||||
<Accordion multiple value={open()} onChange={handleChange}>
|
<Accordion multiple value={open()} onChange={handleChange}>
|
||||||
<For each={items()}>
|
<For each={files()}>
|
||||||
{(diff) => {
|
{(file) => {
|
||||||
const file = diff.file
|
console.log({ file })
|
||||||
|
const diff = () => itemsMap()[file]
|
||||||
|
|
||||||
// binary files have empty diffs that we can't render
|
// 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 expanded = createMemo(() => open().includes(file))
|
||||||
const mounted = createMemo(() => expanded() && (!!store.visible[file] || pinned(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 comments = createMemo(() => grouped().get(file) ?? [])
|
||||||
const commentedLines = createMemo(() => comments().map((c) => c.selection))
|
const commentedLines = createMemo(() => comments().map((c) => c.selection))
|
||||||
|
|
||||||
const beforeText = () => text(diff, "deletions")
|
const beforeText = () => text(diff(), "deletions")
|
||||||
const afterText = () => text(diff, "additions")
|
const afterText = () => text(diff(), "additions")
|
||||||
const changedLines = () => diff.additions + diff.deletions
|
const changedLines = () => diff().additions + diff().deletions
|
||||||
const mediaKind = createMemo(() => mediaKindFromPath(file))
|
const mediaKind = createMemo(() => mediaKindFromPath(file))
|
||||||
|
|
||||||
const tooLarge = createMemo(() => {
|
const tooLarge = createMemo(() => {
|
||||||
@@ -415,9 +416,9 @@ export const SessionReview = (props: SessionReviewProps) => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
const isAdded = () =>
|
const isAdded = () =>
|
||||||
diff.status === "added" || (beforeText().length === 0 && afterText().length > 0)
|
diff().status === "added" || (beforeText().length === 0 && afterText().length > 0)
|
||||||
const isDeleted = () =>
|
const isDeleted = () =>
|
||||||
diff.status === "deleted" || (afterText().length === 0 && beforeText().length > 0)
|
diff().status === "deleted" || (afterText().length === 0 && beforeText().length > 0)
|
||||||
|
|
||||||
const selectedLines = createMemo(() => {
|
const selectedLines = createMemo(() => {
|
||||||
const current = selection()
|
const current = selection()
|
||||||
@@ -455,7 +456,7 @@ export const SessionReview = (props: SessionReviewProps) => {
|
|||||||
file,
|
file,
|
||||||
selection,
|
selection,
|
||||||
comment,
|
comment,
|
||||||
preview: selectionPreview(diff, selection),
|
preview: selectionPreview(diff(), selection),
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
onUpdate: ({ id, comment, selection }) => {
|
onUpdate: ({ id, comment, selection }) => {
|
||||||
@@ -464,7 +465,7 @@ export const SessionReview = (props: SessionReviewProps) => {
|
|||||||
file,
|
file,
|
||||||
selection,
|
selection,
|
||||||
comment,
|
comment,
|
||||||
preview: selectionPreview(diff, selection),
|
preview: selectionPreview(diff(), selection),
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
onDelete: (comment) => {
|
onDelete: (comment) => {
|
||||||
@@ -543,7 +544,7 @@ export const SessionReview = (props: SessionReviewProps) => {
|
|||||||
<span data-slot="session-review-change" data-type="added">
|
<span data-slot="session-review-change" data-type="added">
|
||||||
{i18n.t("ui.sessionReview.change.added")}
|
{i18n.t("ui.sessionReview.change.added")}
|
||||||
</span>
|
</span>
|
||||||
<DiffChanges changes={diff} />
|
<DiffChanges changes={diff()} />
|
||||||
</div>
|
</div>
|
||||||
</Match>
|
</Match>
|
||||||
<Match when={isDeleted()}>
|
<Match when={isDeleted()}>
|
||||||
@@ -557,7 +558,7 @@ export const SessionReview = (props: SessionReviewProps) => {
|
|||||||
</span>
|
</span>
|
||||||
</Match>
|
</Match>
|
||||||
<Match when={true}>
|
<Match when={true}>
|
||||||
<DiffChanges changes={diff} />
|
<DiffChanges changes={diff()} />
|
||||||
</Match>
|
</Match>
|
||||||
</Switch>
|
</Switch>
|
||||||
<Show when={diffCanRender()}>
|
<Show when={diffCanRender()}>
|
||||||
@@ -613,8 +614,8 @@ export const SessionReview = (props: SessionReviewProps) => {
|
|||||||
<Dynamic
|
<Dynamic
|
||||||
component={fileComponent}
|
component={fileComponent}
|
||||||
mode="diff"
|
mode="diff"
|
||||||
fileDiff={diff.fileDiff}
|
fileDiff={diff().fileDiff}
|
||||||
preloadedDiff={diff.preloaded}
|
preloadedDiff={diff().preloaded}
|
||||||
diffStyle={diffStyle()}
|
diffStyle={diffStyle()}
|
||||||
onRendered={() => {
|
onRendered={() => {
|
||||||
props.onDiffRendered?.()
|
props.onDiffRendered?.()
|
||||||
@@ -632,8 +633,8 @@ export const SessionReview = (props: SessionReviewProps) => {
|
|||||||
media={{
|
media={{
|
||||||
mode: "auto",
|
mode: "auto",
|
||||||
path: file,
|
path: file,
|
||||||
deleted: diff.status === "deleted",
|
deleted: diff().status === "deleted",
|
||||||
readFile: diff.status === "deleted" ? undefined : props.readFile,
|
readFile: diff().status === "deleted" ? undefined : props.readFile,
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</Match>
|
</Match>
|
||||||
|
|||||||
Reference in New Issue
Block a user