diff --git a/src/content/admin/WorshipManagement.vue b/src/content/admin/WorshipManagement.vue index a702989..e095c72 100644 --- a/src/content/admin/WorshipManagement.vue +++ b/src/content/admin/WorshipManagement.vue @@ -136,6 +136,7 @@ export default { selectedYear: currentYear, availableYears: [currentYear, currentYear + 1, currentYear + 2], isLoading: false, + isUpdatingFromDate: false, worshipData: { eventPlaceId: null, date: '', @@ -196,6 +197,14 @@ export default { return filtered; } }, + watch: { + selectedDayName(newValue, oldValue) { + // Nur wenn sich der Wert wirklich ändert und nicht beim initialen Laden + if (newValue && newValue !== oldValue && !this.isUpdatingFromDate) { + this.updateDateFromDayName(); + } + } + }, async created() { await this.fetchEventPlaces(); await this.fetchWorships(); @@ -271,6 +280,9 @@ export default { return; } + // Setze Flag, um Endlosschleife zu vermeiden + this.isUpdatingFromDate = true; + // Normalisiere das Datum (HTML input gibt YYYY-MM-DD zurück) const selectedDate = this.worshipData.date; @@ -288,6 +300,53 @@ export default { } else { console.log('Kein liturgischer Tag gefunden für:', selectedDate); } + + // Reset Flag nach kurzer Verzögerung + this.$nextTick(() => { + this.isUpdatingFromDate = false; + }); + }, + updateDateFromDayName() { + if (!this.selectedDayName || !this.selectedDayName.name) { + return; + } + + // Finde liturgischen Tag mit diesem Namen + // Wenn es mehrere gibt (z.B. mehrere Sonntage), nimm den nächsten in der Zukunft + const today = new Date(); + today.setHours(0, 0, 0, 0); + + const matchingDays = this.liturgicalDays.filter(day => + day.dayName === this.selectedDayName.name + ); + + if (matchingDays.length > 0) { + // Sortiere nach Datum + matchingDays.sort((a, b) => new Date(a.date) - new Date(b.date)); + + // Finde den nächsten Tag in der Zukunft oder heute + let selectedDay = matchingDays.find(day => { + const dayDate = new Date(day.date); + dayDate.setHours(0, 0, 0, 0); + return dayDate >= today; + }); + + // Wenn keiner in der Zukunft, nimm den letzten vergangenen + if (!selectedDay) { + selectedDay = matchingDays[matchingDays.length - 1]; + } + + // Setze das Datum + const dayDate = typeof selectedDay.date === 'string' + ? selectedDay.date + : selectedDay.date.split('T')[0]; + + this.worshipData.date = dayDate; + this.worshipData.dayName = selectedDay.dayName; + console.log('Datum gesetzt auf:', dayDate, 'für', selectedDay.dayName); + } else { + console.log('Kein Datum gefunden für Tag:', this.selectedDayName.name); + } }, async saveWorship() { try {