diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/absences/AbsenceCreationForm.vue b/aleksis/apps/alsijil/frontend/components/coursebook/absences/AbsenceCreationForm.vue index 74f07cc4dcc9c24ccd42c0c8345182e5e60c6a9b..6da4703e4855f19291bc45914d5be97804204260 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/absences/AbsenceCreationForm.vue +++ b/aleksis/apps/alsijil/frontend/components/coursebook/absences/AbsenceCreationForm.vue @@ -30,9 +30,10 @@ :label="$t('forms.labels.start')" :max-date="endDate" :max-time="maxStartTime" + :limit-selectable-range="false" :rules="$rules().required.build()" :value="startDate" - @input="$emit('start-date', $event)" + @input="handleStartDate" /> </div> </v-col> @@ -42,9 +43,10 @@ :label="$t('forms.labels.end')" :min-date="startDate" :min-time="minEndTime" + :limit-selectable-range="false" :rules="$rules().required.build()" :value="endDate" - @input="$emit('end-date', $event)" + @input="handleEndDate" /> </div> </v-col> @@ -141,5 +143,23 @@ export default { return start.plus({ minutes: 5 }).toFormat("HH:mm"); }, }, + methods: { + handleStartDate(startDate) { + const parsedStart = DateTime.fromISO(startDate); + const parsedEnd = DateTime.fromISO(this.endDate); + if (parsedStart >= parsedEnd) { + this.$emit('end-date', parsedStart.plus({ minutes: 5 }).toISO({ suppressSeconds: true })); + } + this.$emit('start-date', startDate); + }, + handleEndDate(endDate) { + const parsedStart = DateTime.fromISO(this.startDate); + const parsedEnd = DateTime.fromISO(endDate); + if (parsedEnd <= parsedStart) { + this.$emit('start-date', parsedEnd.minus({ minutes: 5 }).toISO({ suppressSeconds: true })); + } + this.$emit('end-date', endDate); + }, + }, }; </script>