diff options
| author | Adam <[email protected]> | 2025-11-14 12:38:52 -0600 |
|---|---|---|
| committer | opencode <[email protected]> | 2025-11-18 17:07:34 +0000 |
| commit | 4069999b782cc00d4e707f5eca32082bdfad45bc (patch) | |
| tree | d5c13cdd361fc79b14250b4b426a0a1195f7a01c /packages/desktop/src/context | |
| parent | 5ba9b47b3c87dfb044c30857e56959c8eff0c8c1 (diff) | |
| download | opencode-4069999b782cc00d4e707f5eca32082bdfad45bc.tar.gz opencode-4069999b782cc00d4e707f5eca32082bdfad45bc.zip | |
wip(desktop): new layout work
Diffstat (limited to 'packages/desktop/src/context')
| -rw-r--r-- | packages/desktop/src/context/layout.tsx | 52 | ||||
| -rw-r--r-- | packages/desktop/src/context/local.tsx | 47 | ||||
| -rw-r--r-- | packages/desktop/src/context/sdk.tsx | 15 | ||||
| -rw-r--r-- | packages/desktop/src/context/session.tsx | 6 | ||||
| -rw-r--r-- | packages/desktop/src/context/sync.tsx | 2 |
5 files changed, 64 insertions, 58 deletions
diff --git a/packages/desktop/src/context/layout.tsx b/packages/desktop/src/context/layout.tsx new file mode 100644 index 000000000..9e4af90aa --- /dev/null +++ b/packages/desktop/src/context/layout.tsx @@ -0,0 +1,52 @@ +import { createStore } from "solid-js/store" +import { createMemo } from "solid-js" +import { createSimpleContext } from "./helper" +import { makePersisted } from "@solid-primitives/storage" + +export const { use: useLayout, provider: LayoutProvider } = createSimpleContext({ + name: "Layout", + init: () => { + const [store, setStore] = makePersisted( + createStore({ + sidebar: { + opened: true, + width: 280, + }, + review: { + state: "pane" as "pane" | "tab", + }, + }), + { + name: "__default-layout", + }, + ) + + return { + sidebar: { + opened: createMemo(() => store.sidebar.opened), + open() { + setStore("sidebar", "opened", true) + }, + close() { + setStore("sidebar", "opened", false) + }, + toggle() { + setStore("sidebar", "opened", (x) => !x) + }, + width: createMemo(() => store.sidebar.width), + resize(width: number) { + setStore("sidebar", "width", width) + }, + }, + review: { + state: createMemo(() => store.review?.state ?? "closed"), + pane() { + setStore("review", "state", "pane") + }, + tab() { + setStore("review", "state", "tab") + }, + }, + } + }, +}) diff --git a/packages/desktop/src/context/local.tsx b/packages/desktop/src/context/local.tsx index 1cef1c9f1..cef6c5555 100644 --- a/packages/desktop/src/context/local.tsx +++ b/packages/desktop/src/context/local.tsx @@ -5,7 +5,6 @@ import type { FileContent, FileNode, Model, Provider, File as FileStatus } from import { createSimpleContext } from "./helper" import { useSDK } from "./sdk" import { useSync } from "./sync" -import { makePersisted } from "@solid-primitives/storage" export type LocalFile = FileNode & Partial<{ @@ -457,57 +456,11 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ } })() - const layout = (() => { - const [store, setStore] = makePersisted( - createStore({ - sidebar: { - opened: true, - width: 240, - }, - review: { - state: "pane" as "pane" | "tab", - }, - }), - { - name: "_default-layout", - }, - ) - - return { - sidebar: { - opened: createMemo(() => store.sidebar.opened), - open() { - setStore("sidebar", "opened", true) - }, - close() { - setStore("sidebar", "opened", false) - }, - toggle() { - setStore("sidebar", "opened", (x) => !x) - }, - width: createMemo(() => store.sidebar.width), - resize(width: number) { - setStore("sidebar", "width", width) - }, - }, - review: { - state: createMemo(() => store.review?.state ?? "closed"), - pane() { - setStore("review", "state", "pane") - }, - tab() { - setStore("review", "state", "tab") - }, - }, - } - })() - const result = { model, agent, file, context, - layout, } return result }, diff --git a/packages/desktop/src/context/sdk.tsx b/packages/desktop/src/context/sdk.tsx index 8d0cace65..b7b753dbc 100644 --- a/packages/desktop/src/context/sdk.tsx +++ b/packages/desktop/src/context/sdk.tsx @@ -5,12 +5,15 @@ import { onCleanup } from "solid-js" export const { use: useSDK, provider: SDKProvider } = createSimpleContext({ name: "SDK", - init: (props: { url: string }) => { + init: (props: { url: string; directory?: string }) => { const abort = new AbortController() - const sdk = createOpencodeClient({ - baseUrl: props.url, - signal: abort.signal, - }) + const sdk = createOpencodeClient( + { + baseUrl: props.url, + signal: abort.signal, + }, + { directory: props.directory }, + ) const emitter = createGlobalEmitter<{ [key in Event["type"]]: Extract<Event, { type: key }> @@ -27,6 +30,6 @@ export const { use: useSDK, provider: SDKProvider } = createSimpleContext({ abort.abort() }) - return { client: sdk, event: emitter } + return { url: props.url, directory: props.directory, client: sdk, event: emitter } }, }) diff --git a/packages/desktop/src/context/session.tsx b/packages/desktop/src/context/session.tsx index b2e15a42c..a468f4673 100644 --- a/packages/desktop/src/context/session.tsx +++ b/packages/desktop/src/context/session.tsx @@ -3,7 +3,7 @@ import { createSimpleContext } from "./helper" import { batch, createEffect, createMemo } from "solid-js" import { useSync } from "./sync" import { makePersisted } from "@solid-primitives/storage" -import { TextSelection, useLocal } from "./local" +import { TextSelection } from "./local" import { pipe, sumBy } from "remeda" import { AssistantMessage } from "@opencode-ai/sdk" @@ -11,7 +11,6 @@ export const { use: useSession, provider: SessionProvider } = createSimpleContex name: "Session", init: (props: { sessionId?: string }) => { const sync = useSync() - const local = useLocal() const [store, setStore] = makePersisted( createStore<{ @@ -140,9 +139,6 @@ export const { use: useSession, provider: SessionProvider } = createSimpleContex setStore("tabs", "active", undefined) return } - if (tab.startsWith("file://")) { - await local.file.open(tab.replace("file://", "")) - } if (tab !== "review") { if (!store.tabs.opened.includes(tab)) { setStore("tabs", "opened", [...store.tabs.opened, tab]) diff --git a/packages/desktop/src/context/sync.tsx b/packages/desktop/src/context/sync.tsx index 3626cf54f..11b2c36b8 100644 --- a/packages/desktop/src/context/sync.tsx +++ b/packages/desktop/src/context/sync.tsx @@ -63,6 +63,8 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ const sdk = useSDK() sdk.event.listen((e) => { + // fetch the child store + // make a set store function that always rights to the child store const event = e.details switch (event.type) { case "session.updated": { |
