diff options
| author | adamelmore <[email protected]> | 2026-01-24 06:57:13 -0600 |
|---|---|---|
| committer | Adam <[email protected]> | 2026-01-24 07:00:41 -0600 |
| commit | 09f45320b7c92581e833cdfda046eb39ae7e89d9 (patch) | |
| tree | 2b1f5af08a6c7ce439de5a0191446a682c08fdae /packages/app/src/context/layout.tsx | |
| parent | 962ab3bc8cf0b051e9858db0c6c3e4b96a42bf1b (diff) | |
| download | opencode-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.tsx | 40 |
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) + }) } }) |
