summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/context
diff options
context:
space:
mode:
authoradamelmore <[email protected]>2026-01-26 10:04:59 -0600
committeradamelmore <[email protected]>2026-01-26 11:26:17 -0600
commitd05ed5ca83e03904c7c3dda23a6dcccfd607bdce (patch)
tree1afcb055bcedf8b477472f0b25432b318a95f53b /packages/app/src/context
parent37f1a1a4ef36eacb60ad5493db8aeb1130c5fa91 (diff)
downloadopencode-d05ed5ca83e03904c7c3dda23a6dcccfd607bdce.tar.gz
opencode-d05ed5ca83e03904c7c3dda23a6dcccfd607bdce.zip
chore(app): createStore over signals
Diffstat (limited to 'packages/app/src/context')
-rw-r--r--packages/app/src/context/command.tsx18
-rw-r--r--packages/app/src/context/comments.tsx18
-rw-r--r--packages/app/src/context/server.tsx39
3 files changed, 44 insertions, 31 deletions
diff --git a/packages/app/src/context/command.tsx b/packages/app/src/context/command.tsx
index dc5228b82..791569584 100644
--- a/packages/app/src/context/command.tsx
+++ b/packages/app/src/context/command.tsx
@@ -1,4 +1,4 @@
-import { createEffect, createMemo, createSignal, onCleanup, onMount, type Accessor } from "solid-js"
+import { createEffect, createMemo, onCleanup, onMount, type Accessor } from "solid-js"
import { createStore } from "solid-js/store"
import { createSimpleContext } from "@opencode-ai/ui/context"
import { useDialog } from "@opencode-ai/ui/context/dialog"
@@ -165,8 +165,10 @@ export const { use: useCommand, provider: CommandProvider } = createSimpleContex
const dialog = useDialog()
const settings = useSettings()
const language = useLanguage()
- const [registrations, setRegistrations] = createSignal<Accessor<CommandOption[]>[]>([])
- const [suspendCount, setSuspendCount] = createSignal(0)
+ const [store, setStore] = createStore({
+ registrations: [] as Accessor<CommandOption[]>[],
+ suspendCount: 0,
+ })
const [catalog, setCatalog, _, catalogReady] = persisted(
Persist.global("command.catalog.v1"),
@@ -184,7 +186,7 @@ export const { use: useCommand, provider: CommandProvider } = createSimpleContex
const seen = new Set<string>()
const all: CommandOption[] = []
- for (const reg of registrations()) {
+ for (const reg of store.registrations) {
for (const opt of reg()) {
if (seen.has(opt.id)) continue
seen.add(opt.id)
@@ -230,7 +232,7 @@ export const { use: useCommand, provider: CommandProvider } = createSimpleContex
]
})
- const suspended = () => suspendCount() > 0
+ const suspended = () => store.suspendCount > 0
const palette = createMemo(() => {
const config = settings.keybinds.get(PALETTE_ID) ?? DEFAULT_PALETTE_KEYBIND
@@ -297,9 +299,9 @@ export const { use: useCommand, provider: CommandProvider } = createSimpleContex
return {
register(cb: () => CommandOption[]) {
const results = createMemo(cb)
- setRegistrations((arr) => [results, ...arr])
+ setStore("registrations", (arr) => [results, ...arr])
onCleanup(() => {
- setRegistrations((arr) => arr.filter((x) => x !== results))
+ setStore("registrations", (arr) => arr.filter((x) => x !== results))
})
},
trigger(id: string, source?: "palette" | "keybind" | "slash") {
@@ -321,7 +323,7 @@ export const { use: useCommand, provider: CommandProvider } = createSimpleContex
},
show: showPalette,
keybinds(enabled: boolean) {
- setSuspendCount((count) => count + (enabled ? -1 : 1))
+ setStore("suspendCount", (count) => count + (enabled ? -1 : 1))
},
suspended,
get catalog() {
diff --git a/packages/app/src/context/comments.tsx b/packages/app/src/context/comments.tsx
index 41123042d..f55514587 100644
--- a/packages/app/src/context/comments.tsx
+++ b/packages/app/src/context/comments.tsx
@@ -1,4 +1,4 @@
-import { batch, createMemo, createRoot, createSignal, onCleanup } from "solid-js"
+import { batch, createMemo, createRoot, onCleanup } from "solid-js"
import { createStore } from "solid-js/store"
import { createSimpleContext } from "@opencode-ai/ui/context"
import { useParams } from "@solidjs/router"
@@ -37,8 +37,16 @@ function createCommentSession(dir: string, id: string | undefined) {
}),
)
- const [focus, setFocus] = createSignal<CommentFocus | null>(null)
- const [active, setActive] = createSignal<CommentFocus | null>(null)
+ const [state, setState] = createStore({
+ focus: null as CommentFocus | null,
+ active: null as CommentFocus | null,
+ })
+
+ const setFocus = (value: CommentFocus | null | ((value: CommentFocus | null) => CommentFocus | null)) =>
+ setState("focus", value)
+
+ const setActive = (value: CommentFocus | null | ((value: CommentFocus | null) => CommentFocus | null)) =>
+ setState("active", value)
const list = (file: string) => store.comments[file] ?? []
@@ -74,10 +82,10 @@ function createCommentSession(dir: string, id: string | undefined) {
all,
add,
remove,
- focus: createMemo(() => focus()),
+ focus: createMemo(() => state.focus),
setFocus,
clearFocus: () => setFocus(null),
- active: createMemo(() => active()),
+ active: createMemo(() => state.active),
setActive,
clearActive: () => setActive(null),
}
diff --git a/packages/app/src/context/server.tsx b/packages/app/src/context/server.tsx
index 107657092..4a3f3c6d1 100644
--- a/packages/app/src/context/server.tsx
+++ b/packages/app/src/context/server.tsx
@@ -1,6 +1,6 @@
import { createOpencodeClient } from "@opencode-ai/sdk/v2/client"
import { createSimpleContext } from "@opencode-ai/ui/context"
-import { batch, createEffect, createMemo, createSignal, onCleanup } from "solid-js"
+import { batch, createEffect, createMemo, onCleanup } from "solid-js"
import { createStore } from "solid-js/store"
import { usePlatform } from "@/context/platform"
import { Persist, persisted } from "@/utils/persist"
@@ -40,12 +40,17 @@ export const { use: useServer, provider: ServerProvider } = createSimpleContext(
}),
)
- const [active, setActiveRaw] = createSignal("")
+ const [state, setState] = createStore({
+ active: "",
+ healthy: undefined as boolean | undefined,
+ })
+
+ const healthy = () => state.healthy
function setActive(input: string) {
const url = normalizeServerUrl(input)
if (!url) return
- setActiveRaw(url)
+ setState("active", url)
}
function add(input: string) {
@@ -54,7 +59,7 @@ export const { use: useServer, provider: ServerProvider } = createSimpleContext(
const fallback = normalizeServerUrl(props.defaultUrl)
if (fallback && url === fallback) {
- setActiveRaw(url)
+ setState("active", url)
return
}
@@ -62,7 +67,7 @@ export const { use: useServer, provider: ServerProvider } = createSimpleContext(
if (!store.list.includes(url)) {
setStore("list", store.list.length, url)
}
- setActiveRaw(url)
+ setState("active", url)
})
}
@@ -71,25 +76,23 @@ export const { use: useServer, provider: ServerProvider } = createSimpleContext(
if (!url) return
const list = store.list.filter((x) => x !== url)
- const next = active() === url ? (list[0] ?? normalizeServerUrl(props.defaultUrl) ?? "") : active()
+ const next = state.active === url ? (list[0] ?? normalizeServerUrl(props.defaultUrl) ?? "") : state.active
batch(() => {
setStore("list", list)
- setActiveRaw(next)
+ setState("active", next)
})
}
createEffect(() => {
if (!ready()) return
- if (active()) return
+ if (state.active) return
const url = normalizeServerUrl(props.defaultUrl)
if (!url) return
- setActiveRaw(url)
+ setState("active", url)
})
- const isReady = createMemo(() => ready() && !!active())
-
- const [healthy, setHealthy] = createSignal<boolean | undefined>(undefined)
+ const isReady = createMemo(() => ready() && !!state.active)
const check = (url: string) => {
const sdk = createOpencodeClient({
@@ -104,10 +107,10 @@ export const { use: useServer, provider: ServerProvider } = createSimpleContext(
}
createEffect(() => {
- const url = active()
+ const url = state.active
if (!url) return
- setHealthy(undefined)
+ setState("healthy", undefined)
let alive = true
let busy = false
@@ -118,7 +121,7 @@ export const { use: useServer, provider: ServerProvider } = createSimpleContext(
void check(url)
.then((next) => {
if (!alive) return
- setHealthy(next)
+ setState("healthy", next)
})
.finally(() => {
busy = false
@@ -134,7 +137,7 @@ export const { use: useServer, provider: ServerProvider } = createSimpleContext(
})
})
- const origin = createMemo(() => projectsKey(active()))
+ const origin = createMemo(() => projectsKey(state.active))
const projectsList = createMemo(() => store.projects[origin()] ?? [])
const isLocal = createMemo(() => origin() === "local")
@@ -143,10 +146,10 @@ export const { use: useServer, provider: ServerProvider } = createSimpleContext(
healthy,
isLocal,
get url() {
- return active()
+ return state.active
},
get name() {
- return serverDisplayName(active())
+ return serverDisplayName(state.active)
},
get list() {
return store.list