@@ -26,8 +26,8 @@ export function DialogEditProject(props: { project: LocalProject }) {
2626
2727 const [ store , setStore ] = createStore ( {
2828 name : defaultName ( ) ,
29- color : props . project . icon ?. color || "pink" ,
30- iconUrl : props . project . icon ?. override || "" ,
29+ color : props . project . icon ?. color ,
30+ iconOverride : props . project . icon ?. override ,
3131 startup : props . project . commands ?. start ?? "" ,
3232 dragOver : false ,
3333 iconHover : false ,
@@ -39,7 +39,7 @@ export function DialogEditProject(props: { project: LocalProject }) {
3939 if ( ! file . type . startsWith ( "image/" ) ) return
4040 const reader = new FileReader ( )
4141 reader . onload = ( e ) => {
42- setStore ( "iconUrl " , e . target ?. result as string )
42+ setStore ( "iconOverride " , e . target ?. result as string )
4343 setStore ( "iconHover" , false )
4444 }
4545 reader . readAsDataURL ( file )
@@ -68,7 +68,7 @@ export function DialogEditProject(props: { project: LocalProject }) {
6868 }
6969
7070 function clearIcon ( ) {
71- setStore ( "iconUrl " , "" )
71+ setStore ( "iconOverride " , "" )
7272 }
7373
7474 const saveMutation = useMutation ( ( ) => ( {
@@ -81,17 +81,17 @@ export function DialogEditProject(props: { project: LocalProject }) {
8181 projectID : props . project . id ,
8282 directory : props . project . worktree ,
8383 name,
84- icon : { color : store . color , override : store . iconUrl } ,
84+ icon : { color : store . color || "" , override : store . iconOverride || "" } ,
8585 commands : { start } ,
8686 } )
87- globalSync . project . icon ( props . project . worktree , store . iconUrl || undefined )
87+ globalSync . project . icon ( props . project . worktree , store . iconOverride || undefined )
8888 dialog . close ( )
8989 return
9090 }
9191
9292 globalSync . project . meta ( props . project . worktree , {
9393 name,
94- icon : { color : store . color , override : store . iconUrl || undefined } ,
94+ icon : { color : store . color || undefined , override : store . iconOverride || undefined } ,
9595 commands : { start : start || undefined } ,
9696 } )
9797 dialog . close ( )
@@ -130,21 +130,21 @@ export function DialogEditProject(props: { project: LocalProject }) {
130130 classList = { {
131131 "border-text-interactive-base bg-surface-info-base/20" : store . dragOver ,
132132 "border-border-base hover:border-border-strong" : ! store . dragOver ,
133- "overflow-hidden" : ! ! store . iconUrl ,
133+ "overflow-hidden" : ! ! store . iconOverride ,
134134 } }
135135 onDrop = { handleDrop }
136136 onDragOver = { handleDragOver }
137137 onDragLeave = { handleDragLeave }
138138 onClick = { ( ) => {
139- if ( store . iconUrl && store . iconHover ) {
139+ if ( store . iconOverride && store . iconHover ) {
140140 clearIcon ( )
141141 } else {
142142 iconInput ?. click ( )
143143 }
144144 } }
145145 >
146146 < Show
147- when = { store . iconUrl }
147+ when = { store . iconOverride || ( ! store . color && props . project . icon ?. url ) }
148148 fallback = {
149149 < div class = "size-full flex items-center justify-center" >
150150 < Avatar
@@ -156,7 +156,7 @@ export function DialogEditProject(props: { project: LocalProject }) {
156156 }
157157 >
158158 < img
159- src = { store . iconUrl }
159+ src = { store . iconOverride || props . project . icon ?. url }
160160 alt = { language . t ( "dialog.project.edit.icon.alt" ) }
161161 class = "size-full object-cover"
162162 />
@@ -165,17 +165,17 @@ export function DialogEditProject(props: { project: LocalProject }) {
165165 < div
166166 class = "absolute inset-0 size-16 bg-surface-raised-stronger-non-alpha/90 rounded-[6px] z-10 pointer-events-none flex items-center justify-center transition-opacity"
167167 classList = { {
168- "opacity-100" : store . iconHover && ! store . iconUrl ,
169- "opacity-0" : ! ( store . iconHover && ! store . iconUrl ) ,
168+ "opacity-100" : store . iconHover && ! store . iconOverride ,
169+ "opacity-0" : ! ( store . iconHover && ! store . iconOverride ) ,
170170 } }
171171 >
172172 < Icon name = "cloud-upload" size = "large" class = "text-icon-on-interactive-base drop-shadow-sm" />
173173 </ div >
174174 < div
175175 class = "absolute inset-0 size-16 bg-surface-raised-stronger-non-alpha/90 rounded-[6px] z-10 pointer-events-none flex items-center justify-center transition-opacity"
176176 classList = { {
177- "opacity-100" : store . iconHover && ! ! store . iconUrl ,
178- "opacity-0" : ! ( store . iconHover && ! ! store . iconUrl ) ,
177+ "opacity-100" : store . iconHover && ! ! store . iconOverride ,
178+ "opacity-0" : ! ( store . iconHover && ! ! store . iconOverride ) ,
179179 } }
180180 >
181181 < Icon name = "trash" size = "large" class = "text-icon-on-interactive-base drop-shadow-sm" />
@@ -198,7 +198,7 @@ export function DialogEditProject(props: { project: LocalProject }) {
198198 </ div >
199199 </ div >
200200
201- < Show when = { ! store . iconUrl } >
201+ < Show when = { ! store . iconOverride } >
202202 < div class = "flex flex-col gap-2" >
203203 < label class = "text-12-medium text-text-weak" > { language . t ( "dialog.project.edit.color" ) } </ label >
204204 < div class = "flex gap-1.5" >
@@ -215,7 +215,9 @@ export function DialogEditProject(props: { project: LocalProject }) {
215215 "bg-transparent border border-transparent hover:bg-surface-base-hover hover:border-border-weak-base" :
216216 store . color !== color ,
217217 } }
218- onClick = { ( ) => setStore ( "color" , color ) }
218+ onClick = { ( ) => {
219+ setStore ( "color" , store . color === color ? undefined : color )
220+ } }
219221 >
220222 < Avatar
221223 fallback = { store . name || defaultName ( ) }
0 commit comments