fix(desktop): max height on message diffs, session stats

This commit is contained in:
Adam
2025-11-05 16:00:17 -06:00
parent 05ae99a09b
commit c59ec71918
4 changed files with 17 additions and 17 deletions

View File

@@ -1,5 +1,5 @@
import { Button, Tooltip, DiffChanges } from "@opencode-ai/ui" import { Button, Tooltip, DiffChanges } from "@opencode-ai/ui"
import { createMemo, ParentProps } from "solid-js" import { createMemo, ParentProps, Show } from "solid-js"
import { getFilename } from "@/utils" import { getFilename } from "@/utils"
import { DateTime } from "luxon" import { DateTime } from "luxon"
import { useSync } from "@/context/sync" import { useSync } from "@/context/sync"
@@ -25,8 +25,6 @@ export default function Layout(props: ParentProps) {
</A> </A>
<VList data={sync.data.session} class="no-scrollbar"> <VList data={sync.data.session} class="no-scrollbar">
{(session) => { {(session) => {
const diffs = createMemo(() => session.summary?.diffs ?? [])
const filesChanged = createMemo(() => diffs().length)
const updated = createMemo(() => DateTime.fromMillis(session.time.updated)) const updated = createMemo(() => DateTime.fromMillis(session.time.updated))
return ( return (
<A <A
@@ -57,8 +55,8 @@ export default function Layout(props: ParentProps) {
</span> </span>
</div> </div>
<div class="flex justify-between items-center self-stretch"> <div class="flex justify-between items-center self-stretch">
<span class="text-12-regular text-text-weak">{`${filesChanged() || "No"} file${filesChanged() !== 1 ? "s" : ""} changed`}</span> <span class="text-12-regular text-text-weak">{`${session.summary?.files || "No"} file${session.summary?.files !== 1 ? "s" : ""} changed`}</span>
<DiffChanges diff={diffs()} /> <Show when={session.summary}>{(summary) => <DiffChanges changes={summary()} />}</Show>
</div> </div>
</div> </div>
</Tooltip> </Tooltip>

View File

@@ -362,7 +362,7 @@ export default function Page() {
<Spinner class="text-text-base shrink-0 w-[18px] aspect-square" /> <Spinner class="text-text-base shrink-0 w-[18px] aspect-square" />
</Match> </Match>
<Match when={true}> <Match when={true}>
<DiffChanges diff={message.summary?.diffs ?? []} variant="bars" /> <DiffChanges changes={message.summary?.diffs ?? []} variant="bars" />
</Match> </Match>
</Switch> </Switch>
<div <div
@@ -490,13 +490,13 @@ export default function Page() {
</div> </div>
</div> </div>
<div class="shrink-0 flex gap-4 items-center justify-end"> <div class="shrink-0 flex gap-4 items-center justify-end">
<DiffChanges diff={diff} /> <DiffChanges changes={diff} />
<Icon name="chevron-grabber-vertical" size="small" /> <Icon name="chevron-grabber-vertical" size="small" />
</div> </div>
</div> </div>
</Accordion.Trigger> </Accordion.Trigger>
</Accordion.Header> </Accordion.Header>
<Accordion.Content> <Accordion.Content class="max-h-[300px] overflow-y-auto no-scrollbar">
<Diff <Diff
before={{ before={{
name: diff.file!, name: diff.file!,

View File

@@ -1,18 +1,20 @@
import type { FileDiff } from "@opencode-ai/sdk"
import { createMemo, For, Match, Show, Switch } from "solid-js" import { createMemo, For, Match, Show, Switch } from "solid-js"
export function DiffChanges(props: { diff: FileDiff | FileDiff[]; variant?: "default" | "bars" }) { export function DiffChanges(props: {
changes: { additions: number; deletions: number } | { additions: number; deletions: number }[]
variant?: "default" | "bars"
}) {
const variant = () => props.variant ?? "default" const variant = () => props.variant ?? "default"
const additions = createMemo(() => const additions = createMemo(() =>
Array.isArray(props.diff) Array.isArray(props.changes)
? props.diff.reduce((acc, diff) => acc + (diff.additions ?? 0), 0) ? props.changes.reduce((acc, diff) => acc + (diff.additions ?? 0), 0)
: props.diff.additions, : props.changes.additions,
) )
const deletions = createMemo(() => const deletions = createMemo(() =>
Array.isArray(props.diff) Array.isArray(props.changes)
? props.diff.reduce((acc, diff) => acc + (diff.deletions ?? 0), 0) ? props.changes.reduce((acc, diff) => acc + (diff.deletions ?? 0), 0)
: props.diff.deletions, : props.changes.deletions,
) )
const total = createMemo(() => (additions() ?? 0) + (deletions() ?? 0)) const total = createMemo(() => (additions() ?? 0) + (deletions() ?? 0))

View File

@@ -364,7 +364,7 @@ ToolRegistry.register({
</div> </div>
<div data-slot="actions"> <div data-slot="actions">
<Show when={props.metadata.filediff}> <Show when={props.metadata.filediff}>
<DiffChanges diff={props.metadata.filediff} /> <DiffChanges changes={props.metadata.filediff} />
</Show> </Show>
</div> </div>
</div> </div>