diff options
Diffstat (limited to 'packages/app/src/context')
| -rw-r--r-- | packages/app/src/context/highlights.tsx | 15 | ||||
| -rw-r--r-- | packages/app/src/context/layout.tsx | 55 |
2 files changed, 59 insertions, 11 deletions
diff --git a/packages/app/src/context/highlights.tsx b/packages/app/src/context/highlights.tsx index 476209e41..058f7cc4b 100644 --- a/packages/app/src/context/highlights.tsx +++ b/packages/app/src/context/highlights.tsx @@ -1,4 +1,4 @@ -import { createEffect, createSignal, onCleanup } from "solid-js" +import { createEffect, onCleanup } from "solid-js" import { createStore } from "solid-js/store" import { createSimpleContext } from "@opencode-ai/ui/context" import { useDialog } from "@opencode-ai/ui/context/dialog" @@ -146,8 +146,10 @@ export const { use: useHighlights, provider: HighlightsProvider } = createSimple const settings = useSettings() const [store, setStore, _, ready] = persisted("highlights.v1", createStore<Store>({ version: undefined })) - const [from, setFrom] = createSignal<string | undefined>(undefined) - const [to, setTo] = createSignal<string | undefined>(undefined) + const [range, setRange] = createStore({ + from: undefined as string | undefined, + to: undefined as string | undefined, + }) const state = { started: false } let timer: ReturnType<typeof setTimeout> | undefined @@ -214,15 +216,14 @@ export const { use: useHighlights, provider: HighlightsProvider } = createSimple if (previous === platform.version) return - setFrom(previous) - setTo(platform.version) + setRange({ from: previous, to: platform.version }) start(previous) }) return { ready, - from, - to, + from: () => range.from, + to: () => range.to, get last() { return store.version }, diff --git a/packages/app/src/context/layout.tsx b/packages/app/src/context/layout.tsx index 5199e5a26..78928118d 100644 --- a/packages/app/src/context/layout.tsx +++ b/packages/app/src/context/layout.tsx @@ -793,20 +793,67 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( }, }, review: { - open: createMemo(() => s().reviewOpen), + open: createMemo(() => s().reviewOpen ?? []), setOpen(open: string[]) { const session = key() + const next = Array.from(new Set(open)) const current = store.sessionView[session] if (!current) { setStore("sessionView", session, { scroll: {}, - reviewOpen: open, + reviewOpen: next, }) return } - if (same(current.reviewOpen, open)) return - setStore("sessionView", session, "reviewOpen", open) + if (same(current.reviewOpen, next)) return + setStore("sessionView", session, "reviewOpen", next) + }, + openPath(path: string) { + const session = key() + const current = store.sessionView[session] + if (!current) { + setStore("sessionView", session, { + scroll: {}, + reviewOpen: [path], + }) + return + } + + if (!current.reviewOpen) { + setStore("sessionView", session, "reviewOpen", [path]) + return + } + + if (current.reviewOpen.includes(path)) return + setStore("sessionView", session, "reviewOpen", current.reviewOpen.length, path) + }, + closePath(path: string) { + const session = key() + const current = store.sessionView[session]?.reviewOpen + if (!current) return + + const index = current.indexOf(path) + if (index === -1) return + setStore( + "sessionView", + session, + "reviewOpen", + produce((draft) => { + if (!draft) return + draft.splice(index, 1) + }), + ) + }, + togglePath(path: string) { + const session = key() + const current = store.sessionView[session]?.reviewOpen + if (!current || !current.includes(path)) { + this.openPath(path) + return + } + + this.closePath(path) }, }, } |
