summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/components/dialog-edit-project.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'packages/app/src/components/dialog-edit-project.tsx')
-rw-r--r--packages/app/src/components/dialog-edit-project.tsx67
1 files changed, 41 insertions, 26 deletions
diff --git a/packages/app/src/components/dialog-edit-project.tsx b/packages/app/src/components/dialog-edit-project.tsx
index dbad81798..ec0793c54 100644
--- a/packages/app/src/components/dialog-edit-project.tsx
+++ b/packages/app/src/components/dialog-edit-project.tsx
@@ -33,6 +33,8 @@ export function DialogEditProject(props: { project: LocalProject }) {
iconHover: false,
})
+ let iconInput: HTMLInputElement | undefined
+
function handleFileSelect(file: File) {
if (!file.type.startsWith("image/")) return
const reader = new FileReader()
@@ -72,31 +74,35 @@ export function DialogEditProject(props: { project: LocalProject }) {
async function handleSubmit(e: SubmitEvent) {
e.preventDefault()
- setStore("saving", true)
- const name = store.name.trim() === folderName() ? "" : store.name.trim()
- const start = store.startup.trim()
-
- if (props.project.id && props.project.id !== "global") {
- await globalSDK.client.project.update({
- projectID: props.project.id,
- directory: props.project.worktree,
- name,
- icon: { color: store.color, override: store.iconUrl },
- commands: { start },
- })
- globalSync.project.icon(props.project.worktree, store.iconUrl || undefined)
- setStore("saving", false)
- dialog.close()
- return
- }
+ await Promise.resolve()
+ .then(async () => {
+ setStore("saving", true)
+ const name = store.name.trim() === folderName() ? "" : store.name.trim()
+ const start = store.startup.trim()
- globalSync.project.meta(props.project.worktree, {
- name,
- icon: { color: store.color, override: store.iconUrl || undefined },
- commands: { start: start || undefined },
- })
- setStore("saving", false)
- dialog.close()
+ if (props.project.id && props.project.id !== "global") {
+ await globalSDK.client.project.update({
+ projectID: props.project.id,
+ directory: props.project.worktree,
+ name,
+ icon: { color: store.color, override: store.iconUrl },
+ commands: { start },
+ })
+ globalSync.project.icon(props.project.worktree, store.iconUrl || undefined)
+ dialog.close()
+ return
+ }
+
+ globalSync.project.meta(props.project.worktree, {
+ name,
+ icon: { color: store.color, override: store.iconUrl || undefined },
+ commands: { start: start || undefined },
+ })
+ dialog.close()
+ })
+ .finally(() => {
+ setStore("saving", false)
+ })
}
return (
@@ -134,7 +140,7 @@ export function DialogEditProject(props: { project: LocalProject }) {
if (store.iconUrl && store.iconHover) {
clearIcon()
} else {
- document.getElementById("icon-upload")?.click()
+ iconInput?.click()
}
}}
>
@@ -176,7 +182,16 @@ export function DialogEditProject(props: { project: LocalProject }) {
<Icon name="trash" size="large" class="text-icon-on-interactive-base drop-shadow-sm" />
</div>
</div>
- <input id="icon-upload" type="file" accept="image/*" class="hidden" onChange={handleInputChange} />
+ <input
+ id="icon-upload"
+ ref={(el) => {
+ iconInput = el
+ }}
+ type="file"
+ accept="image/*"
+ class="hidden"
+ onChange={handleInputChange}
+ />
<div class="flex flex-col gap-1.5 text-12-regular text-text-weak self-center">
<span>{language.t("dialog.project.edit.icon.hint")}</span>
<span>{language.t("dialog.project.edit.icon.recommended")}</span>