Refactor event form handling: Normalize event data for form submission by extracting day of the week value and improving date mode determination logic. Introduce helper methods for better data management and clarity.
All checks were successful
Deploy miriamgemeinde / deploy (push) Successful in 6s

This commit is contained in:
Torsten Schulz (local)
2026-04-29 16:12:58 +02:00
parent eb6f1e19a4
commit 8bd5da35a9

View File

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