Sfoglia il codice sorgente

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

Adam 3 mesi fa
parent
commit
c59ec71918

+ 3 - 5
packages/desktop/src/pages/layout.tsx

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

+ 3 - 3
packages/desktop/src/pages/session.tsx

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

+ 10 - 8
packages/ui/src/components/diff-changes.tsx

@@ -1,18 +1,20 @@
-import type { FileDiff } from "@opencode-ai/sdk"
 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 additions = createMemo(() =>
-    Array.isArray(props.diff)
-      ? props.diff.reduce((acc, diff) => acc + (diff.additions ?? 0), 0)
-      : props.diff.additions,
+    Array.isArray(props.changes)
+      ? props.changes.reduce((acc, diff) => acc + (diff.additions ?? 0), 0)
+      : props.changes.additions,
   )
   const deletions = createMemo(() =>
-    Array.isArray(props.diff)
-      ? props.diff.reduce((acc, diff) => acc + (diff.deletions ?? 0), 0)
-      : props.diff.deletions,
+    Array.isArray(props.changes)
+      ? props.changes.reduce((acc, diff) => acc + (diff.deletions ?? 0), 0)
+      : props.changes.deletions,
   )
   const total = createMemo(() => (additions() ?? 0) + (deletions() ?? 0))
 

+ 1 - 1
packages/ui/src/components/message-part.tsx

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