Skip to content

Commit 88c5f6b

Browse files
authored
fix: consolidate project avatar source logic (#23819)
1 parent 6aa475f commit 88c5f6b

2 files changed

Lines changed: 23 additions & 13 deletions

File tree

packages/app/src/components/dialog-edit-project.tsx

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { type LocalProject, getAvatarColors } from "@/context/layout"
1212
import { getFilename } from "@opencode-ai/shared/util/path"
1313
import { Avatar } from "@opencode-ai/ui/avatar"
1414
import { useLanguage } from "@/context/language"
15+
import { getProjectAvatarSource } from "@/pages/layout/sidebar-items"
1516

1617
const AVATAR_COLOR_KEYS = ["pink", "mint", "orange", "purple", "cyan", "lime"] as const
1718

@@ -144,7 +145,11 @@ export function DialogEditProject(props: { project: LocalProject }) {
144145
}}
145146
>
146147
<Show
147-
when={store.iconOverride || (!store.color && props.project.icon?.url)}
148+
when={getProjectAvatarSource(props.project.id, {
149+
color: store.color,
150+
url: props.project.icon?.url,
151+
override: store.iconOverride,
152+
})}
148153
fallback={
149154
<div class="size-full flex items-center justify-center">
150155
<Avatar
@@ -155,11 +160,13 @@ export function DialogEditProject(props: { project: LocalProject }) {
155160
</div>
156161
}
157162
>
158-
<img
159-
src={store.iconOverride || props.project.icon?.url}
160-
alt={language.t("dialog.project.edit.icon.alt")}
161-
class="size-full object-cover"
162-
/>
163+
{(src) => (
164+
<img
165+
src={src()}
166+
alt={language.t("dialog.project.edit.icon.alt")}
167+
class="size-full object-cover"
168+
/>
169+
)}
163170
</Show>
164171
</div>
165172
<div
@@ -216,6 +223,7 @@ export function DialogEditProject(props: { project: LocalProject }) {
216223
store.color !== color,
217224
}}
218225
onClick={() => {
226+
if (store.color === color && !props.project.icon?.url) return
219227
setStore("color", store.color === color ? undefined : color)
220228
}}
221229
>

packages/app/src/pages/layout/sidebar-items.tsx

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,14 @@ import { childSessionOnPath, hasProjectPermissions } from "./helpers"
1919

2020
const OPENCODE_PROJECT_ID = "4b0ea68d7af9a6031a7ffda7ad66e0cb83315750"
2121

22+
export function getProjectAvatarSource(id?: string, icon?: { color?: string; url?: string; override?: string }) {
23+
return id === OPENCODE_PROJECT_ID
24+
? "https://opencode.ai/favicon.svg"
25+
: icon?.color
26+
? undefined
27+
: icon?.override || icon?.url
28+
}
29+
2230
export const ProjectIcon = (props: { project: LocalProject; class?: string; notify?: boolean }): JSX.Element => {
2331
const globalSync = useGlobalSync()
2432
const notification = useNotification()
@@ -42,13 +50,7 @@ export const ProjectIcon = (props: { project: LocalProject; class?: string; noti
4250
<div class="size-full rounded overflow-clip">
4351
<Avatar
4452
fallback={name()}
45-
src={
46-
props.project.id === OPENCODE_PROJECT_ID
47-
? "https://opencode.ai/favicon.svg"
48-
: props.project.icon?.color
49-
? undefined
50-
: props.project.icon?.override || props.project.icon?.url
51-
}
53+
src={getProjectAvatarSource(props.project.id, props.project.icon)}
5254
{...getAvatarColors(props.project.icon?.color)}
5355
class="size-full rounded"
5456
classList={{ "badge-mask": notify() }}

0 commit comments

Comments
 (0)