Merge pull request 'Fix #147 prevent double clicking submit button' (#154) from #147-Training-Report-Double-Posting into main
All checks were successful
Continuous Integration / Update Development (push) Successful in 2m29s
Continuous Deployment / Update Deployment (push) Successful in 2m53s

Reviewed-on: #154
This commit was merged in pull request #154.
This commit is contained in:
2026-01-17 10:13:26 -06:00

View File

@@ -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>