mirror of
https://github.com/aljazceru/opencode.git
synced 2026-01-19 07:44:55 +01:00
fix(desktop): max height on message diffs, session stats
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
@@ -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!,
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user