summaryrefslogtreecommitdiffhomepage
path: root/packages/desktop/src/context/layout.tsx
diff options
context:
space:
mode:
authorDavid Hill <[email protected]>2025-12-11 13:10:46 +0000
committerDavid Hill <[email protected]>2025-12-11 13:10:46 +0000
commiteb6596cb97b83e161adf50d96306836eaad4a02c (patch)
tree20dd2213a95e52f95aae8019f6008b526370c536 /packages/desktop/src/context/layout.tsx
parent8fcd31f3538253a9fa2055e0738d496eabc85e93 (diff)
parentdfdd1c9b20eda2fbac08505523832eca1bb8927e (diff)
downloadopencode-eb6596cb97b83e161adf50d96306836eaad4a02c.tar.gz
opencode-eb6596cb97b83e161adf50d96306836eaad4a02c.zip
Merge branch 'dev' of https://github.com/sst/opencode into dev
Diffstat (limited to 'packages/desktop/src/context/layout.tsx')
-rw-r--r--packages/desktop/src/context/layout.tsx50
1 files changed, 45 insertions, 5 deletions
diff --git a/packages/desktop/src/context/layout.tsx b/packages/desktop/src/context/layout.tsx
index 5530ad28f..24ba55a53 100644
--- a/packages/desktop/src/context/layout.tsx
+++ b/packages/desktop/src/context/layout.tsx
@@ -1,5 +1,5 @@
-import { createStore } from "solid-js/store"
-import { createMemo, onMount } from "solid-js"
+import { createStore, produce } from "solid-js/store"
+import { batch, createMemo, onMount } from "solid-js"
import { createSimpleContext } from "@opencode-ai/ui/context"
import { makePersisted } from "@solid-primitives/storage"
import { useGlobalSync } from "./global-sync"
@@ -19,6 +19,8 @@ const PASTEL_COLORS = [
"#C1E1C1", // pastel mint
]
+type Dialog = "provider" | "model" | "connect"
+
export const { use: useLayout, provider: LayoutProvider } = createSimpleContext({
name: "Layout",
init: () => {
@@ -44,8 +46,13 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
},
)
const [ephemeral, setEphemeral] = createStore({
+ connect: {
+ provider: undefined as undefined | string,
+ state: undefined as undefined | "pending" | "complete" | "error",
+ error: undefined as undefined | string,
+ },
dialog: {
- open: undefined as undefined | "provider" | "model",
+ open: undefined as undefined | Dialog,
},
})
const usedColors = new Set<string>()
@@ -169,14 +176,47 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
},
dialog: {
opened: createMemo(() => ephemeral.dialog?.open),
- open(dialog: "provider" | "model") {
+ open(dialog: Dialog) {
setEphemeral("dialog", "open", dialog)
+ if (dialog !== "connect") {
+ setEphemeral("connect", {})
+ }
},
- close(dialog: "provider" | "model") {
+ close(dialog: Dialog) {
if (ephemeral.dialog?.open === dialog) {
setEphemeral("dialog", "open", undefined)
+ setEphemeral("connect", {})
}
},
+ connect(provider: string) {
+ batch(() => {
+ setEphemeral("dialog", "open", "connect")
+ setEphemeral("connect", { provider, state: "pending" })
+ })
+ },
+ },
+ connect: {
+ provider: createMemo(() => ephemeral.connect.provider),
+ state: createMemo(() => ephemeral.connect.state),
+ complete() {
+ setEphemeral(
+ produce((state) => {
+ state.dialog.open = "model"
+ state.connect.state = "complete"
+ }),
+ )
+ },
+ error(message: string) {
+ setEphemeral(
+ produce((state) => {
+ state.connect.state = "error"
+ state.connect.error = message
+ }),
+ )
+ },
+ clear() {
+ setEphemeral("connect", {})
+ },
},
}
},