diff --git a/website/client/components/challenges/challengeModal.vue b/website/client/components/challenges/challengeModal.vue index a6c22ea321..c82b4bf22b 100644 --- a/website/client/components/challenges/challengeModal.vue +++ b/website/client/components/challenges/challengeModal.vue @@ -57,8 +57,8 @@ You do not have enough gems to create a Tavern challenge // @TODO if buy gems button is added, add analytics tracking to it // see https://github.com/HabitRPG/habitica/blob/develop/website/views/options/social/challenges.jade#L134 - button.btn.btn-primary(v-once, v-if='creating && !cloning', @click='createChallenge()') {{$t('createChallengeAddTasks')}} - button.btn.btn-primary(v-once, v-if='cloning', @click='createChallenge()') {{$t('createChallengeCloneTasks')}} + button.btn.btn-primary(v-if='creating && !cloning', @click='createChallenge()', :disabled='loading') {{$t('createChallengeAddTasks')}} + button.btn.btn-primary(v-once, v-if='cloning', @click='createChallenge()', :disabled='loading') {{$t('createChallengeCloneTasks')}} button.btn.btn-primary(v-once, v-if='!creating && !cloning', @click='updateChallenge()') {{$t('updateChallenge')}} .col-12.text-center p(v-once) {{$t('challengeMinimum')}} @@ -228,6 +228,7 @@ export default { showCategorySelect: false, categoryOptions, categoriesHashByKey, + loading: false, groups: [], }; }, @@ -354,6 +355,7 @@ export default { this.$store.state.workingChallenge = {}; }, async createChallenge () { + this.loading = true; // @TODO: improve error handling, add it to updateChallenge, make errors translatable. Suggestion: `<% fieldName %> is required` where possible, where `fieldName` is inserted as the translatable string that's used for the field header. let errors = []; @@ -367,6 +369,7 @@ export default { if (errors.length > 0) { alert(errors.join('\n')); + this.loading = false; return; }