@@ -2,6 +2,7 @@ import { Button } from "@opencode-ai/ui/button"
22import { useDialog } from "@opencode-ai/ui/context/dialog"
33import { Dialog } from "@opencode-ai/ui/dialog"
44import { TextField } from "@opencode-ai/ui/text-field"
5+ import { useMutation } from "@tanstack/solid-query"
56import { Icon } from "@opencode-ai/ui/icon"
67import { createMemo , For , Show } from "solid-js"
78import { createStore } from "solid-js/store"
@@ -28,7 +29,6 @@ export function DialogEditProject(props: { project: LocalProject }) {
2829 color : props . project . icon ?. color || "pink" ,
2930 iconUrl : props . project . icon ?. override || "" ,
3031 startup : props . project . commands ?. start ?? "" ,
31- saving : false ,
3232 dragOver : false ,
3333 iconHover : false ,
3434 } )
@@ -71,38 +71,37 @@ export function DialogEditProject(props: { project: LocalProject }) {
7171 setStore ( "iconUrl" , "" )
7272 }
7373
74- async function handleSubmit ( e : SubmitEvent ) {
75- e . preventDefault ( )
76-
77- await Promise . resolve ( )
78- . then ( async ( ) => {
79- setStore ( "saving" , true )
80- const name = store . name . trim ( ) === folderName ( ) ? "" : store . name . trim ( )
81- const start = store . startup . trim ( )
74+ const saveMutation = useMutation ( ( ) => ( {
75+ mutationFn : async ( ) => {
76+ const name = store . name . trim ( ) === folderName ( ) ? "" : store . name . trim ( )
77+ const start = store . startup . trim ( )
8278
83- if ( props . project . id && props . project . id !== "global" ) {
84- await globalSDK . client . project . update ( {
85- projectID : props . project . id ,
86- directory : props . project . worktree ,
87- name,
88- icon : { color : store . color , override : store . iconUrl } ,
89- commands : { start } ,
90- } )
91- globalSync . project . icon ( props . project . worktree , store . iconUrl || undefined )
92- dialog . close ( )
93- return
94- }
95-
96- globalSync . project . meta ( props . project . worktree , {
79+ if ( props . project . id && props . project . id !== "global" ) {
80+ await globalSDK . client . project . update ( {
81+ projectID : props . project . id ,
82+ directory : props . project . worktree ,
9783 name,
98- icon : { color : store . color , override : store . iconUrl || undefined } ,
99- commands : { start : start || undefined } ,
84+ icon : { color : store . color , override : store . iconUrl } ,
85+ commands : { start } ,
10086 } )
87+ globalSync . project . icon ( props . project . worktree , store . iconUrl || undefined )
10188 dialog . close ( )
89+ return
90+ }
91+
92+ globalSync . project . meta ( props . project . worktree , {
93+ name,
94+ icon : { color : store . color , override : store . iconUrl || undefined } ,
95+ commands : { start : start || undefined } ,
10296 } )
103- . finally ( ( ) => {
104- setStore ( "saving" , false )
105- } )
97+ dialog . close ( )
98+ } ,
99+ } ) )
100+
101+ function handleSubmit ( e : SubmitEvent ) {
102+ e . preventDefault ( )
103+ if ( saveMutation . isPending ) return
104+ saveMutation . mutate ( )
106105 }
107106
108107 return (
@@ -246,8 +245,8 @@ export function DialogEditProject(props: { project: LocalProject }) {
246245 < Button type = "button" variant = "ghost" size = "large" onClick = { ( ) => dialog . close ( ) } >
247246 { language . t ( "common.cancel" ) }
248247 </ Button >
249- < Button type = "submit" variant = "primary" size = "large" disabled = { store . saving } >
250- { store . saving ? language . t ( "common.saving" ) : language . t ( "common.save" ) }
248+ < Button type = "submit" variant = "primary" size = "large" disabled = { saveMutation . isPending } >
249+ { saveMutation . isPending ? language . t ( "common.saving" ) : language . t ( "common.save" ) }
251250 </ Button >
252251 </ div >
253252 </ form >
0 commit comments