Merge pull request 'Fix #147 prevent double clicking submit button' (#154) from #147-Training-Report-Double-Posting into main
Reviewed-on: #154
This commit was merged in pull request #154.
This commit is contained in:
@@ -26,6 +26,7 @@ import PopoverTrigger from "@/components/ui/popover/PopoverTrigger.vue";
|
|||||||
import PopoverContent from "@/components/ui/popover/PopoverContent.vue";
|
import PopoverContent from "@/components/ui/popover/PopoverContent.vue";
|
||||||
import Combobox from '../ui/combobox/Combobox.vue'
|
import Combobox from '../ui/combobox/Combobox.vue'
|
||||||
import Tooltip from '../tooltip/Tooltip.vue'
|
import Tooltip from '../tooltip/Tooltip.vue'
|
||||||
|
import Spinner from '../ui/spinner/Spinner.vue'
|
||||||
|
|
||||||
|
|
||||||
const { handleSubmit, resetForm, errors, values, setFieldValue } = useForm({
|
const { handleSubmit, resetForm, errors, values, setFieldValue } = useForm({
|
||||||
@@ -67,19 +68,24 @@ function toMySQLDateTime(date: Date): string {
|
|||||||
.replace("T", " ") + "000"; // becomes → 2025-11-19 00:00:00.000000
|
.replace("T", " ") + "000"; // becomes → 2025-11-19 00:00:00.000000
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const submitting = ref(false);
|
||||||
function onSubmit(vals) {
|
async function onSubmit(vals) {
|
||||||
|
//catch double submit
|
||||||
|
if (submitting.value) return;
|
||||||
|
submitting.value = true;
|
||||||
try {
|
try {
|
||||||
const clean: CourseEventDetails = {
|
const clean: CourseEventDetails = {
|
||||||
...vals,
|
...vals,
|
||||||
event_date: new Date(vals.event_date),
|
event_date: new Date(vals.event_date),
|
||||||
}
|
}
|
||||||
|
|
||||||
postTrainingReport(clean).then((newID) => {
|
await postTrainingReport(clean).then((newID) => {
|
||||||
emit("submit", newID);
|
emit("submit", newID);
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error("There was an error submitting the training report", err);
|
console.error("There was an error submitting the training report", err);
|
||||||
|
} finally {
|
||||||
|
submitting.value = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -402,7 +408,12 @@ const filteredMembers = computed(() => {
|
|||||||
</FieldGroup>
|
</FieldGroup>
|
||||||
<div class="flex gap-3 justify-end">
|
<div class="flex gap-3 justify-end">
|
||||||
<Button type="button" variant="outline" @click="resetForm">Reset</Button>
|
<Button type="button" variant="outline" @click="resetForm">Reset</Button>
|
||||||
<Button type="submit" form="trainingForm">Submit</Button>
|
<Button type="submit" form="trainingForm" :disabled="submitting" class="w-35">
|
||||||
|
<span class="flex items-center gap-2" v-if="submitting">
|
||||||
|
<Spinner></Spinner> Submitting…
|
||||||
|
</span>
|
||||||
|
<span v-else>Submit</span>
|
||||||
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
Reference in New Issue
Block a user