summaryrefslogtreecommitdiffhomepage
path: root/packages/desktop/src/context/layout.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'packages/desktop/src/context/layout.tsx')
-rw-r--r--packages/desktop/src/context/layout.tsx22
1 files changed, 18 insertions, 4 deletions
diff --git a/packages/desktop/src/context/layout.tsx b/packages/desktop/src/context/layout.tsx
index 5530ad28f..d00e101b8 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 { 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,11 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
},
)
const [ephemeral, setEphemeral] = createStore({
+ connect: {
+ provider: undefined as undefined | string,
+ },
dialog: {
- open: undefined as undefined | "provider" | "model",
+ open: undefined as undefined | Dialog,
},
})
const usedColors = new Set<string>()
@@ -169,14 +174,23 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
},
dialog: {
opened: createMemo(() => ephemeral.dialog?.open),
- open(dialog: "provider" | "model") {
+ open(dialog: Dialog) {
setEphemeral("dialog", "open", dialog)
},
- close(dialog: "provider" | "model") {
+ close(dialog: Dialog) {
if (ephemeral.dialog?.open === dialog) {
setEphemeral("dialog", "open", undefined)
}
},
+ connect(provider: string) {
+ batch(() => {
+ setEphemeral("dialog", "open", "connect")
+ setEphemeral("connect", "provider", provider)
+ })
+ },
+ },
+ connect: {
+ provider: createMemo(() => ephemeral.connect.provider),
},
}
},