diff options
Diffstat (limited to 'packages/ui/src/components/session-turn.tsx')
| -rw-r--r-- | packages/ui/src/components/session-turn.tsx | 106 |
1 files changed, 2 insertions, 104 deletions
diff --git a/packages/ui/src/components/session-turn.tsx b/packages/ui/src/components/session-turn.tsx index d878bd245..7c5694ba5 100644 --- a/packages/ui/src/components/session-turn.tsx +++ b/packages/ui/src/components/session-turn.tsx @@ -8,25 +8,16 @@ import { TextPart, ToolPart, } from "@opencode-ai/sdk/v2/client" -import { type FileDiff } from "@opencode-ai/sdk/v2" import { useData } from "../context" -import { useDiffComponent } from "../context/diff" import { type UiI18nKey, type UiI18nParams, useI18n } from "../context/i18n" import { findLast } from "@opencode-ai/util/array" -import { getDirectory, getFilename } from "@opencode-ai/util/path" import { Binary } from "@opencode-ai/util/binary" import { createEffect, createMemo, createSignal, For, Match, on, onCleanup, ParentProps, Show, Switch } from "solid-js" -import { DiffChanges } from "./diff-changes" import { Message, Part } from "./message-part" import { Markdown } from "./markdown" -import { Accordion } from "./accordion" -import { StickyAccordionHeader } from "./sticky-accordion-header" -import { FileIcon } from "./file-icon" -import { Icon } from "./icon" import { IconButton } from "./icon-button" import { Card } from "./card" -import { Dynamic } from "solid-js/web" import { Button } from "./button" import { Spinner } from "./spinner" import { Tooltip } from "./tooltip" @@ -143,7 +134,6 @@ export function SessionTurn( ) { const i18n = useI18n() const data = useData() - const diffComponent = useDiffComponent() const emptyMessages: MessageType[] = [] const emptyParts: PartType[] = [] @@ -153,7 +143,6 @@ export function SessionTurn( const emptyPermissionParts: { part: ToolPart; message: AssistantMessage }[] = [] const emptyQuestions: QuestionRequest[] = [] const emptyQuestionParts: { part: ToolPart; message: AssistantMessage }[] = [] - const emptyDiffs: FileDiff[] = [] const idle = { type: "idle" as const } const allMessages = createMemo(() => data.store.message[props.sessionID] ?? emptyMessages) @@ -409,8 +398,7 @@ export function SessionTurn( const response = createMemo(() => lastTextPart()?.text) const responsePartId = createMemo(() => lastTextPart()?.id) - const messageDiffs = createMemo(() => message()?.summary?.diffs ?? emptyDiffs) - const hasDiffs = createMemo(() => messageDiffs().length > 0) + const hasDiffs = createMemo(() => (message()?.summary?.diffs?.length ?? 0) > 0) const hideResponsePart = createMemo(() => !working() && !!responsePartId()) const [copied, setCopied] = createSignal(false) @@ -476,28 +464,12 @@ export function SessionTurn( updateStickyHeight(sticky.getBoundingClientRect().height) }) - const diffInit = 20 - const diffBatch = 20 - const [store, setStore] = createStore({ retrySeconds: 0, - diffsOpen: [] as string[], - diffLimit: diffInit, status: rawStatus(), duration: duration(), }) - createEffect( - on( - () => message()?.id, - () => { - setStore("diffsOpen", []) - setStore("diffLimit", diffInit) - }, - { defer: true }, - ), - ) - createEffect(() => { const r = retry() if (!r) { @@ -727,7 +699,7 @@ export function SessionTurn( <div class="sr-only" aria-live="polite"> {!working() && response() ? response() : ""} </div> - <Show when={!working() && (response() || hasDiffs())}> + <Show when={!working() && response()}> <div data-slot="session-turn-summary-section"> <div data-slot="session-turn-summary-header"> <h2 data-slot="session-turn-summary-title">{i18n.t("ui.sessionTurn.summary.response")}</h2> @@ -760,80 +732,6 @@ export function SessionTurn( </Show> </div> </div> - <Accordion - data-slot="session-turn-accordion" - multiple - value={store.diffsOpen} - onChange={(value) => { - if (!Array.isArray(value)) return - setStore("diffsOpen", value) - }} - > - <For each={messageDiffs().slice(0, store.diffLimit)}> - {(diff) => ( - <Accordion.Item value={diff.file}> - <StickyAccordionHeader> - <Accordion.Trigger> - <div data-slot="session-turn-accordion-trigger-content"> - <div data-slot="session-turn-file-info"> - <FileIcon - node={{ path: diff.file, type: "file" }} - data-slot="session-turn-file-icon" - /> - <div data-slot="session-turn-file-path"> - <Show when={diff.file.includes("/")}> - <span data-slot="session-turn-directory"> - {`\u202A${getDirectory(diff.file)}\u202C`} - </span> - </Show> - <span data-slot="session-turn-filename">{getFilename(diff.file)}</span> - </div> - </div> - <div data-slot="session-turn-accordion-actions"> - <DiffChanges changes={diff} /> - <Icon name="chevron-grabber-vertical" size="small" /> - </div> - </div> - </Accordion.Trigger> - </StickyAccordionHeader> - <Accordion.Content data-slot="session-turn-accordion-content"> - <Show when={store.diffsOpen.includes(diff.file!)}> - <Dynamic - component={diffComponent} - before={{ - name: diff.file!, - contents: diff.before!, - }} - after={{ - name: diff.file!, - contents: diff.after!, - }} - /> - </Show> - </Accordion.Content> - </Accordion.Item> - )} - </For> - </Accordion> - <Show when={messageDiffs().length > store.diffLimit}> - <Button - data-slot="session-turn-accordion-more" - variant="ghost" - size="small" - onClick={() => { - const total = messageDiffs().length - setStore("diffLimit", (limit) => { - const next = limit + diffBatch - if (next > total) return total - return next - }) - }} - > - {i18n.t("ui.sessionTurn.diff.showMore", { - count: messageDiffs().length - store.diffLimit, - })} - </Button> - </Show> </div> </Show> <Show when={error() && !props.stepsExpanded}> |
