summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/context/layout.tsx
diff options
context:
space:
mode:
authoradamelmore <[email protected]>2026-01-24 06:57:13 -0600
committerAdam <[email protected]>2026-01-24 07:00:41 -0600
commit09f45320b7c92581e833cdfda046eb39ae7e89d9 (patch)
tree2b1f5af08a6c7ce439de5a0191446a682c08fdae /packages/app/src/context/layout.tsx
parent962ab3bc8cf0b051e9858db0c6c3e4b96a42bf1b (diff)
downloadopencode-09f45320b7c92581e833cdfda046eb39ae7e89d9.tar.gz
opencode-09f45320b7c92581e833cdfda046eb39ae7e89d9.zip
chore: cleanup
Diffstat (limited to 'packages/app/src/context/layout.tsx')
-rw-r--r--packages/app/src/context/layout.tsx40
1 files changed, 30 insertions, 10 deletions
diff --git a/packages/app/src/context/layout.tsx b/packages/app/src/context/layout.tsx
index c24e433d1..1023d8df3 100644
--- a/packages/app/src/context/layout.tsx
+++ b/packages/app/src/context/layout.tsx
@@ -209,6 +209,7 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
})
const [colors, setColors] = createStore<Record<string, AvatarColorKey>>({})
+ const colorRequested = new Map<string, AvatarColorKey>()
function pickAvailableColor(used: Set<string>): AvatarColorKey {
const available = AVATAR_COLOR_KEYS.filter((c) => !used.has(c))
@@ -324,13 +325,21 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
createEffect(() => {
const projects = enriched()
if (projects.length === 0) return
+ if (!globalSync.ready) return
- if (globalSync.ready) {
- for (const project of projects) {
- if (!project.id) continue
- if (project.id === "global") continue
- globalSync.project.icon(project.worktree, project.icon?.override)
- }
+ for (const project of projects) {
+ if (!project.id) continue
+ if (project.id === "global") continue
+ globalSync.project.icon(project.worktree, project.icon?.override)
+ }
+ })
+
+ createEffect(() => {
+ const projects = enriched()
+ if (projects.length === 0) return
+
+ for (const project of projects) {
+ if (project.icon?.color) colorRequested.delete(project.worktree)
}
const used = new Set<string>()
@@ -341,18 +350,29 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
for (const project of projects) {
if (project.icon?.color) continue
- const existing = colors[project.worktree]
+ const worktree = project.worktree
+ const existing = colors[worktree]
const color = existing ?? pickAvailableColor(used)
if (!existing) {
used.add(color)
- setColors(project.worktree, color)
+ setColors(worktree, color)
}
if (!project.id) continue
+
+ const requested = colorRequested.get(worktree)
+ if (requested === color) continue
+ colorRequested.set(worktree, color)
+
if (project.id === "global") {
- globalSync.project.meta(project.worktree, { icon: { color } })
+ globalSync.project.meta(worktree, { icon: { color } })
continue
}
- void globalSdk.client.project.update({ projectID: project.id, directory: project.worktree, icon: { color } })
+
+ void globalSdk.client.project
+ .update({ projectID: project.id, directory: worktree, icon: { color } })
+ .catch(() => {
+ if (colorRequested.get(worktree) === color) colorRequested.delete(worktree)
+ })
}
})