diff --git a/packages/app/src/context/file.tsx b/packages/app/src/context/file.tsx index d05e1ee2ad2..3ed1b1ae4b6 100644 --- a/packages/app/src/context/file.tsx +++ b/packages/app/src/context/file.tsx @@ -1,5 +1,5 @@ -import { createEffect, createMemo, createRoot, onCleanup } from "solid-js" -import { createStore, produce } from "solid-js/store" +import { batch, createEffect, createMemo, createRoot, onCleanup } from "solid-js" +import { createStore, produce, reconcile } from "solid-js/store" import { createSimpleContext } from "@opencode-ai/ui/context" import type { FileContent, FileNode } from "@opencode-ai/sdk/v2" import { showToast } from "@opencode-ai/ui/toast" @@ -8,7 +8,6 @@ import { getFilename } from "@opencode-ai/util/path" import { useSDK } from "./sdk" import { useSync } from "./sync" import { useLanguage } from "@/context/language" -import { decode64 } from "@/utils/base64" import { Persist, persisted } from "@/utils/persist" export type FileSelection = { @@ -276,12 +275,10 @@ export const { use: useFile, provider: FileProvider } = createSimpleContext({ const params = useParams() const language = useLanguage() - const directory = createMemo(() => decode64(params.dir) ?? sdk.directory) - - const scope = createMemo(() => directory()) + const scope = createMemo(() => sdk.directory) function normalize(input: string) { - const root = directory() + const root = scope() const prefix = root.endsWith("/") ? root : root + "/" let path = unquoteGitPath(stripQueryAndHash(stripFileProtocol(input))) @@ -372,9 +369,13 @@ export const { use: useFile, provider: FileProvider } = createSimpleContext({ inflight.clear() treeInflight.clear() contentLru.clear() - setStore("file", {}) - setTree("node", {}) - setTree("dir", { "": { expanded: true } }) + + batch(() => { + setStore("file", reconcile({})) + setTree("node", reconcile({})) + setTree("dir", reconcile({})) + setTree("dir", "", { expanded: true }) + }) }) const viewCache = new Map() @@ -415,7 +416,7 @@ export const { use: useFile, provider: FileProvider } = createSimpleContext({ return entry.value } - const view = createMemo(() => loadView(directory(), params.id)) + const view = createMemo(() => loadView(scope(), params.id)) function ensure(path: string) { if (!path) return diff --git a/packages/app/src/context/sdk.tsx b/packages/app/src/context/sdk.tsx index 123aa4e73e5..3a404ec93a1 100644 --- a/packages/app/src/context/sdk.tsx +++ b/packages/app/src/context/sdk.tsx @@ -1,17 +1,17 @@ import { createOpencodeClient, type Event } from "@opencode-ai/sdk/v2/client" import { createSimpleContext } from "@opencode-ai/ui/context" import { createGlobalEmitter } from "@solid-primitives/event-bus" -import { createEffect, createMemo, onCleanup } from "solid-js" +import { createEffect, createMemo, onCleanup, type Accessor } from "solid-js" import { useGlobalSDK } from "./global-sdk" import { usePlatform } from "./platform" export const { use: useSDK, provider: SDKProvider } = createSimpleContext({ name: "SDK", - init: (props: { directory: string }) => { + init: (props: { directory: Accessor }) => { const platform = usePlatform() const globalSDK = useGlobalSDK() - const directory = createMemo(() => props.directory) + const directory = createMemo(props.directory) const client = createMemo(() => createOpencodeClient({ baseUrl: globalSDK.url, diff --git a/packages/app/src/pages/directory-layout.tsx b/packages/app/src/pages/directory-layout.tsx index 037b08c723a..da4667a827b 100644 --- a/packages/app/src/pages/directory-layout.tsx +++ b/packages/app/src/pages/directory-layout.tsx @@ -31,7 +31,7 @@ export default function Layout(props: ParentProps) { }) return ( - + {iife(() => { const sync = useSync() diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index 3fa71244bfb..636d406791b 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -490,7 +490,7 @@ export default function Page() { createEffect( on( - () => params.id, + sessionKey, () => setTitle({ draft: "", editing: false, saving: false, menuOpen: false, pendingRename: false }), { defer: true }, ), @@ -1672,7 +1672,7 @@ export default function Page() { createEffect( on( - () => params.dir, + () => sdk.directory, () => { void file.tree.list("")