Browse Source

fix(desktop): Refresh file contents when changing workspaces to not have stale contents (#11728)

Parker Smith 3 weeks ago
parent
commit
41bc4ec7f0
2 changed files with 20 additions and 3 deletions
  1. 4 3
      packages/app/src/context/file.tsx
  2. 16 0
      packages/app/src/pages/session.tsx

+ 4 - 3
packages/app/src/context/file.tsx

@@ -8,6 +8,7 @@ import { getFilename } from "@opencode-ai/util/path"
 import { useSDK } from "./sdk"
 import { useSDK } from "./sdk"
 import { useSync } from "./sync"
 import { useSync } from "./sync"
 import { useLanguage } from "@/context/language"
 import { useLanguage } from "@/context/language"
+import { decode64 } from "@/utils/base64"
 import { Persist, persisted } from "@/utils/persist"
 import { Persist, persisted } from "@/utils/persist"
 
 
 export type FileSelection = {
 export type FileSelection = {
@@ -275,9 +276,9 @@ export const { use: useFile, provider: FileProvider } = createSimpleContext({
     const params = useParams()
     const params = useParams()
     const language = useLanguage()
     const language = useLanguage()
 
 
-    const scope = createMemo(() => sdk.directory)
+    const directory = createMemo(() => decode64(params.dir) ?? sdk.directory)
 
 
-    const directory = createMemo(() => sync.data.path.directory)
+    const scope = createMemo(() => directory())
 
 
     function normalize(input: string) {
     function normalize(input: string) {
       const root = directory()
       const root = directory()
@@ -414,7 +415,7 @@ export const { use: useFile, provider: FileProvider } = createSimpleContext({
       return entry.value
       return entry.value
     }
     }
 
 
-    const view = createMemo(() => loadView(params.dir!, params.id))
+    const view = createMemo(() => loadView(directory(), params.id))
 
 
     function ensure(path: string) {
     function ensure(path: string) {
       if (!path) return
       if (!path) return

+ 16 - 0
packages/app/src/pages/session.tsx

@@ -1670,6 +1670,22 @@ export default function Page() {
     void (refresh ? file.tree.refresh("") : file.tree.list(""))
     void (refresh ? file.tree.refresh("") : file.tree.list(""))
   })
   })
 
 
+  createEffect(
+    on(
+      () => params.dir,
+      () => {
+        void file.tree.list("")
+
+        const active = tabs().active()
+        if (!active) return
+        const path = file.pathFromTab(active)
+        if (!path) return
+        void file.load(path, { force: true })
+      },
+      { defer: true },
+    ),
+  )
+
   const autoScroll = createAutoScroll({
   const autoScroll = createAutoScroll({
     working: () => true,
     working: () => true,
     overflowAnchor: "dynamic",
     overflowAnchor: "dynamic",