diff --git a/frontend/src/components/misc/CreateEdit.vue b/frontend/src/components/misc/CreateEdit.vue index 846b2f4bd..8031b114f 100644 --- a/frontend/src/components/misc/CreateEdit.vue +++ b/frontend/src/components/misc/CreateEdit.vue @@ -9,7 +9,7 @@ :shadow="false" :padding="false" class="has-text-start" - :loading="loading" + :loading="currentLoading" :show-close="true" @close="$router.back()" > @@ -37,8 +37,9 @@ v-if="hasPrimaryAction" variant="primary" :icon="primaryIcon" - :disabled="primaryDisabled || loading" + :disabled="isBusy" class="mis-2" + :loading="currentLoading" @click.prevent.stop="primary" > {{ primaryLabel || $t('misc.create') }} @@ -52,7 +53,9 @@ diff --git a/frontend/src/views/filters/FilterEdit.vue b/frontend/src/views/filters/FilterEdit.vue index 8ab6ab81c..330806b61 100644 --- a/frontend/src/views/filters/FilterEdit.vue +++ b/frontend/src/views/filters/FilterEdit.vue @@ -1,13 +1,14 @@ - + diff --git a/frontend/src/views/labels/NewLabel.vue b/frontend/src/views/labels/NewLabel.vue index 0ef4cb924..6c5dcd1cd 100644 --- a/frontend/src/views/labels/NewLabel.vue +++ b/frontend/src/views/labels/NewLabel.vue @@ -1,5 +1,6 @@ label.value.hexColor = getRandomColorHex()) const showError = ref(false) const loading = computed(() => labelStore.isLoading) +const isSubmitting = ref(false) + +const loadingModel = computed({ + get: () => isSubmitting.value || loading.value, + set(value: boolean) { + isSubmitting.value = value + }, +}) async function newLabel() { if (label.value.title === '') { @@ -74,11 +83,21 @@ async function newLabel() { } showError.value = false - const newLabel = await labelStore.createLabel(label.value) - router.push({ - name: 'labels.index', - params: {id: newLabel.id}, - }) - success({message: t('label.create.success')}) + if (isSubmitting.value) { + return + } + + isSubmitting.value = true + + try { + const newLabel = await labelStore.createLabel(label.value) + router.push({ + name: 'labels.index', + params: {id: newLabel.id}, + }) + success({message: t('label.create.success')}) + } finally { + isSubmitting.value = false + } } diff --git a/frontend/src/views/project/NewProject.vue b/frontend/src/views/project/NewProject.vue index 54529e956..f75b2b053 100644 --- a/frontend/src/views/project/NewProject.vue +++ b/frontend/src/views/project/NewProject.vue @@ -1,8 +1,9 @@ @@ -78,6 +79,7 @@ const project = reactive(new ProjectModel()) const projectService = shallowReactive(new ProjectService()) const projectStore = useProjectStore() const parentProject = ref(null) +const isSubmitting = ref(false) watch( () => props.parentProjectId, @@ -85,18 +87,28 @@ watch( {immediate: true}, ) -async function createNewProject() { +async function createProject() { if (project.title === '') { showError.value = true return } showError.value = false + if (isSubmitting.value) { + return + } + + isSubmitting.value = true + if (parentProject.value) { project.parentProjectId = parentProject.value.id } - await projectStore.createProject(project) - success({message: t('project.create.createdSuccess')}) + try { + await projectStore.createProject(project) + success({message: t('project.create.createdSuccess')}) + } finally { + isSubmitting.value = false + } } diff --git a/frontend/src/views/project/settings/ProjectSettingsDuplicate.vue b/frontend/src/views/project/settings/ProjectSettingsDuplicate.vue index aa35f809d..764a44803 100644 --- a/frontend/src/views/project/settings/ProjectSettingsDuplicate.vue +++ b/frontend/src/views/project/settings/ProjectSettingsDuplicate.vue @@ -1,9 +1,9 @@ {{ $t('project.duplicate.text') }} @@ -12,7 +12,7 @@ diff --git a/frontend/src/views/project/settings/ProjectSettingsEdit.vue b/frontend/src/views/project/settings/ProjectSettingsEdit.vue index 3946f34ae..1e43fc15a 100644 --- a/frontend/src/views/project/settings/ProjectSettingsEdit.vue +++ b/frontend/src/views/project/settings/ProjectSettingsEdit.vue @@ -1,5 +1,6 @@ diff --git a/frontend/src/views/teams/NewTeam.vue b/frontend/src/views/teams/NewTeam.vue index c6aa47cc8..5794815e1 100644 --- a/frontend/src/views/teams/NewTeam.vue +++ b/frontend/src/views/teams/NewTeam.vue @@ -1,8 +1,9 @@ @@ -55,7 +56,7 @@
{{ $t('project.duplicate.text') }}