summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/context
diff options
context:
space:
mode:
Diffstat (limited to 'packages/app/src/context')
-rw-r--r--packages/app/src/context/highlights.tsx15
-rw-r--r--packages/app/src/context/layout.tsx55
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)
},
},
}