Events renderable

This commit is contained in:
Torsten Schulz
2024-06-20 13:31:20 +02:00
parent d78bc26e30
commit 240409d52a
10 changed files with 493 additions and 28 deletions

View File

@@ -0,0 +1,97 @@
<template>
<div>
<table v-if="events.length > 1" class="event-table">
<tr v-for="event in events" :key="event.id">
<td>
<div v-if="shouldDisplay('name')" class="event-name">{{ event.name }}</div>
<div>{{ formatDateOrDay(event.date, event.dayOfWeek) }}</div>
<div v-if="shouldDisplay('time')">{{ event.time }} <span v-if="event.endTime"> - {{ event.endTime }}</span> Uhr</div>
<div v-if="shouldDisplay('place')">{{ event.eventPlace?.name }}</div>
<div v-if="shouldDisplay('description')" class="description">{{ event.description }}</div>
<div v-if="shouldDisplay('contactPerson')">{{ event.contactPersons.map(cp => cp.name).join(', ') }}</div>
<div v-if="shouldDisplay('institution')">{{ event.institution?.name }}</div>
<div v-if="shouldDisplay('type')">{{ event.eventType?.caption }}</div>
</td>
</tr>
</table>
<div v-else-if="events.length === 1" :class="events[0].alsoOnHomepage && config.id === 'home' ? 'homepage' : ''">
<div v-if="shouldDisplay('name')" class="event-name">{{ events[0].name }}</div>
<div>{{ formatDateOrDay(events[0].date, events[0].dayOfWeek) }}</div>
<div v-if="shouldDisplay('time')">{{ events[0].time }} <span v-if="events[0].endTime"> - {{ events[0].endTime }}</span> Uhr</div>
<div v-if="shouldDisplay('place')">{{ events[0].eventPlace?.name }}</div>
<div v-if="shouldDisplay('description')" class="description">{{ events[0].description }}</div>
<div v-if="shouldDisplay('contactPerson')">{{ events[0].contactPersons.map(cp => cp.name).join(', ') }}</div>
<div v-if="shouldDisplay('institution')">{{ events[0].institution?.name }}</div>
<div v-if="shouldDisplay('type')">{{ events[0].eventType?.caption }}</div>
</div>
</div>
</template>
<script>
import axios from '@/axios';
import { format } from 'date-fns'; // Importiere date-fns für die Datumsformatierung
export default {
name: 'EventRender',
props: {
config: {
type: Object,
required: true,
}
},
data() {
return {
events: [],
};
},
async created() {
await this.fetchEvents();
},
methods: {
async fetchEvents() {
try {
const response = await axios.get('/events/filter', {
params: this.config
});
console.log('Fetched events:', response.data.events);
this.events = response.data.events;
} catch (error) {
console.error('Fehler beim Abrufen der Events', error);
}
},
shouldDisplay(field) {
const displayFields = this.config.display.split('|');
return displayFields.includes(field);
},
formatDateOrDay(date, dayOfWeek) {
if (date) {
return format(new Date(date), 'dd.MM.yyyy');
} else if (dayOfWeek !== null && dayOfWeek !== undefined) {
const daysOfWeek = ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'];
return daysOfWeek[dayOfWeek];
}
return '';
}
}
};
</script>
<style scoped>
.event-name {
font-weight: bold;
}
.event-table {
border-collapse: collapse;
}
.event-table td {
border: 1px solid black;
}
.homepage {
border: 1px solid #9400ff;
padding: 0.5em;
text-align: center;
}
.description {
padding: 0.5em 0;
}
</style>