import { createMemo, onMount } from "solid-js" import { useSync } from "@tui/context/sync" import { DialogSelect, type DialogSelectOption } from "@tui/ui/dialog-select" import type { TextPart } from "@opencode-ai/sdk/v2" import { Locale } from "@/util/locale" import { DialogMessage } from "./dialog-message" import { useDialog } from "../../ui/dialog" import type { PromptInfo } from "../../component/prompt/history" export function DialogTimeline(props: { sessionID: string onMove: (messageID: string) => void setPrompt?: (prompt: PromptInfo) => void }) { const sync = useSync() const dialog = useDialog() onMount(() => { dialog.setSize("large") }) const options = createMemo((): DialogSelectOption[] => { const messages = sync.data.message[props.sessionID] ?? [] const result = [] as DialogSelectOption[] for (const message of messages) { if (message.role !== "user") continue const part = (sync.data.part[message.id] ?? []).find( (x) => x.type === "text" && !x.synthetic && !x.ignored, ) as TextPart if (!part) continue result.push({ title: part.text.replace(/\n/g, " "), value: message.id, footer: Locale.time(message.time.created), onSelect: (dialog) => { dialog.replace(() => ( )) }, }) } result.reverse() return result }) return props.onMove(option.value)} title="Timeline" options={options()} /> }