summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/context
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-12-30 09:28:12 -0600
committerAdam <[email protected]>2025-12-30 09:28:19 -0600
commitbbc8678164e4504cbdd81cda36835c1f1f0fd880 (patch)
tree21313a67683a549e681ca65026697f1b4ea7bb05 /packages/app/src/context
parenta1d54475feb7899d6ef60303c801358f5a64989d (diff)
downloadopencode-bbc8678164e4504cbdd81cda36835c1f1f0fd880.tar.gz
opencode-bbc8678164e4504cbdd81cda36835c1f1f0fd880.zip
fix(desktop): share projects across all local servers
Diffstat (limited to 'packages/app/src/context')
-rw-r--r--packages/app/src/context/server.tsx50
1 files changed, 29 insertions, 21 deletions
diff --git a/packages/app/src/context/server.tsx b/packages/app/src/context/server.tsx
index 991fa7aaf..8edbc0f61 100644
--- a/packages/app/src/context/server.tsx
+++ b/packages/app/src/context/server.tsx
@@ -23,6 +23,13 @@ export function serverDisplayName(url: string) {
.split("/")[0]
}
+function projectsKey(url: string) {
+ if (!url) return ""
+ const host = url.replace(/^https?:\/\//, "").split(":")[0]
+ if (host === "localhost" || host === "127.0.0.1") return "local"
+ return url
+}
+
export const { use: useServer, provider: ServerProvider } = createSimpleContext({
name: "Server",
init: (props: { defaultUrl: string }) => {
@@ -100,7 +107,8 @@ export const { use: useServer, provider: ServerProvider } = createSimpleContext(
onCleanup(() => clearInterval(interval))
})
- const projectsList = createMemo(() => store.projects[active()] ?? [])
+ const origin = createMemo(() => projectsKey(active()))
+ const projectsList = createMemo(() => store.projects[origin()] ?? [])
return {
ready: isReady,
@@ -120,46 +128,46 @@ export const { use: useServer, provider: ServerProvider } = createSimpleContext(
projects: {
list: projectsList,
open(directory: string) {
- const url = active()
- if (!url) return
- const current = store.projects[url] ?? []
+ const key = origin()
+ if (!key) return
+ const current = store.projects[key] ?? []
if (current.find((x) => x.worktree === directory)) return
- setStore("projects", url, [{ worktree: directory, expanded: true }, ...current])
+ setStore("projects", key, [{ worktree: directory, expanded: true }, ...current])
},
close(directory: string) {
- const url = active()
- if (!url) return
- const current = store.projects[url] ?? []
+ const key = origin()
+ if (!key) return
+ const current = store.projects[key] ?? []
setStore(
"projects",
- url,
+ key,
current.filter((x) => x.worktree !== directory),
)
},
expand(directory: string) {
- const url = active()
- if (!url) return
- const current = store.projects[url] ?? []
+ const key = origin()
+ if (!key) return
+ const current = store.projects[key] ?? []
const index = current.findIndex((x) => x.worktree === directory)
- if (index !== -1) setStore("projects", url, index, "expanded", true)
+ if (index !== -1) setStore("projects", key, index, "expanded", true)
},
collapse(directory: string) {
- const url = active()
- if (!url) return
- const current = store.projects[url] ?? []
+ const key = origin()
+ if (!key) return
+ const current = store.projects[key] ?? []
const index = current.findIndex((x) => x.worktree === directory)
- if (index !== -1) setStore("projects", url, index, "expanded", false)
+ if (index !== -1) setStore("projects", key, index, "expanded", false)
},
move(directory: string, toIndex: number) {
- const url = active()
- if (!url) return
- const current = store.projects[url] ?? []
+ const key = origin()
+ if (!key) return
+ const current = store.projects[key] ?? []
const fromIndex = current.findIndex((x) => x.worktree === directory)
if (fromIndex === -1 || fromIndex === toIndex) return
const result = [...current]
const [item] = result.splice(fromIndex, 1)
result.splice(toIndex, 0, item)
- setStore("projects", url, result)
+ setStore("projects", key, result)
},
},
}