wip(app): progress

This commit is contained in:
Adam
2026-01-01 20:04:46 -06:00
parent 6b4c433e14
commit afc1825cf5
3 changed files with 93 additions and 89 deletions

View File

@@ -1,6 +1,5 @@
export { SessionHeader } from "./session-header"
export { SessionContextTab } from "./session-context-tab"
export { SessionReviewTab } from "./session-review-tab"
export { SortableTab, FileVisual } from "./session-sortable-tab"
export { SortableTerminalTab } from "./session-sortable-terminal-tab"
export { NewSessionView } from "./session-new-view"

View File

@@ -1,86 +0,0 @@
import { createEffect, on, onCleanup } from "solid-js"
import { useLayout } from "@/context/layout"
import { SessionReview } from "@opencode-ai/ui/session-review"
import type { FileDiff } from "@opencode-ai/sdk/v2/client"
interface SessionReviewTabProps {
diffs: () => FileDiff[]
view: () => ReturnType<ReturnType<typeof useLayout>["view"]>
classes?: {
root?: string
header?: string
container?: string
}
}
export function SessionReviewTab(props: SessionReviewTabProps) {
const layout = useLayout()
let scroll: HTMLDivElement | undefined
let frame: number | undefined
let pending: { x: number; y: number } | undefined
const restoreScroll = () => {
const el = scroll
if (!el) return
const s = props.view().scroll("review")
if (!s) return
if (el.scrollTop !== s.y) el.scrollTop = s.y
if (el.scrollLeft !== s.x) el.scrollLeft = s.x
}
const handleScroll = (event: Event & { currentTarget: HTMLDivElement }) => {
pending = {
x: event.currentTarget.scrollLeft,
y: event.currentTarget.scrollTop,
}
if (frame !== undefined) return
frame = requestAnimationFrame(() => {
frame = undefined
const next = pending
pending = undefined
if (!next) return
props.view().setScroll("review", next)
})
}
createEffect(
on(
() => props.diffs().length,
() => {
requestAnimationFrame(restoreScroll)
},
{ defer: true },
),
)
onCleanup(() => {
if (frame === undefined) return
cancelAnimationFrame(frame)
})
return (
<SessionReview
scrollRef={(el) => {
scroll = el
restoreScroll()
}}
onScroll={handleScroll}
open={props.view().review.open()}
onOpenChange={props.view().review.setOpen}
classes={{
root: props.classes?.root ?? "pb-40",
header: props.classes?.header ?? "px-6",
container: props.classes?.container ?? "px-6",
}}
diffs={props.diffs()}
diffStyle={layout.review.diffStyle()}
onDiffStyleChange={layout.review.setDiffStyle}
/>
)
}