diff --git a/src/components/EventForm.vue b/src/components/EventForm.vue index e35c9dc..00a6c5f 100644 --- a/src/components/EventForm.vue +++ b/src/components/EventForm.vue @@ -167,7 +167,7 @@ export default { }, watch: { event(newVal) { - this.eventData = { ...newVal }; + this.eventData = this.normalizeEventForForm(newVal); this.determineDateMode(); if (newVal && typeof newVal.__newsletterDateMode === 'string') { this.dateMode = newVal.__newsletterDateMode; @@ -226,13 +226,14 @@ export default { formatTime, async saveEvent() { try { + const dayOfWeekValue = this.extractDayOfWeekValue(this.eventData.dayOfWeek); const basePayload = { ...this.eventData, eventTypeId: this.selectedEventType ? this.selectedEventType.id : null, institution_id: this.selectedInstitution ? this.selectedInstitution.id : null, event_place_id: this.selectedEventPlace ? this.selectedEventPlace.id : null, contactPersonIds: this.selectedContactPersons.map(person => person.id), - dayOfWeek: this.eventData.dayOfWeek ? this.eventData.dayOfWeek.value ?? -1 : -1, + dayOfWeek: dayOfWeekValue, relatedImage: this.assignedImage, alsoOnHomepage: this.onHomepage ? 1 : 0 }; @@ -295,16 +296,44 @@ export default { } }, determineDateMode() { - if (this.eventData.date && this.eventData.dayOfWeek) { - this.dateMode = 'interval'; - } else if (this.eventData.date) { + // Bei bestehenden Events hat dayOfWeek oft einen Wert, obwohl "Datum" gemeint ist. + // Deshalb hat fixes Datum Vorrang vor Intervall. + if (this.eventData.date) { this.dateMode = 'date'; - } else if (this.eventData.dayOfWeek) { + } else if (this.extractDayOfWeekValue(this.eventData.dayOfWeek) > -1) { this.dateMode = 'weekday'; } else { this.dateMode = 'date'; } }, + normalizeEventForForm(event) { + const normalized = { ...(event || {}) }; + if (typeof normalized.date === 'string') { + normalized.date = normalized.date.split('T')[0]; + } + const dayValue = this.extractDayOfWeekValue(normalized.dayOfWeek); + if (dayValue > -1) { + const mappedValue = dayValue === 0 ? 7 : dayValue; + normalized.dayOfWeek = + this.weekdays.find((d) => d.value === mappedValue) || null; + } else { + normalized.dayOfWeek = null; + } + return normalized; + }, + extractDayOfWeekValue(dayOfWeek) { + if (dayOfWeek === null || dayOfWeek === undefined || dayOfWeek === '') { + return -1; + } + if (typeof dayOfWeek === 'object') { + if (dayOfWeek.value === null || dayOfWeek.value === undefined || dayOfWeek.value === '') { + return -1; + } + return Number(dayOfWeek.value); + } + const parsed = Number(dayOfWeek); + return Number.isFinite(parsed) ? parsed : -1; + }, async fetchImageFilename() { try { const response = await axios.get('/image/' + this.assignedImage);