refactor(Stundenplan): uses named slots for week-view template

This commit is contained in:
SimonGschnell
2024-11-08 10:53:02 +01:00
parent f4176b86ee
commit b9690988e5
5 changed files with 23 additions and 17 deletions
+8 -6
View File
@@ -100,12 +100,14 @@ const app = Vue.createApp({
<h2>Stundenplan</h2>
<hr>
<lv-modal v-if="currentlySelectedEvent" :event="currentlySelectedEvent" ref="lvmodal" />
<fhc-calendar @change:range="updateRange" v-slot="{event, day}" :events="events" initial-mode="week" show-weeks>
<div @click="showModal(event?.orig)" type="button" class="d-flex flex-column align-items-center justify-content-evenly h-100">
<span>{{event?.orig.topic}}</span>
<span v-for="lektor in event?.orig.lektor">{{lektor.kurzbz}}</span>
<span>{{event?.orig.ort_kurzbz}}</span>
</div>
<fhc-calendar @change:range="updateRange" :events="events" initial-mode="week" show-weeks >
<template #weekPage="{event,day}">
<div @click="showModal(event?.orig)" type="button" class="d-flex flex-column align-items-center justify-content-evenly h-100">
<span>{{event?.orig.topic}}</span>
<span v-for="lektor in event?.orig.lektor">{{lektor.kurzbz}}</span>
<span>{{event?.orig.ort_kurzbz}}</span>
</div>
</template>
</fhc-calendar>
`
});
+5 -3
View File
@@ -104,6 +104,7 @@ export default {
},
methods: {
handleInput(day) {
console.log(day[0], "first",day[1],"second")
this.$emit(day[0], day[1]);
}
},
@@ -137,9 +138,10 @@ export default {
},
template: /*html*/`
<div ref="container" class="fhc-calendar card" :class="sizeClass">
<component v-slot="{event,day}" :is="'calendar-' + mode" @updateMode="mode = $event" @change:range="$emit('change:range',$event)" @input="handleInput" >
<!--Week Page layout-->
<slot :event="event" :day="day"></slot>
<component :is="'calendar-' + mode" @updateMode="mode = $event" @change:range="$emit('change:range',$event)" @input="handleInput" >
<template #weekPage="{event,day}">
<slot name="weekPage" :event="event" :day="day"></slot>
</template>
</component>
</div>`
}
+3 -3
View File
@@ -69,11 +69,11 @@ export default {
return this.noWeekView ? day == this.highlightedDay : week.no == this.highlightedWeek;
},
clickEvent(day,week) {
if(this.noWeekView){
this.selectDay(day);
}else{
if(!this.noWeekView)
{
this.changeToWeek(week);
}
this.selectDay(day);
}
},
template: `
+5 -3
View File
@@ -38,12 +38,14 @@ export default {
created() {
this.emitRangeChanged();
},
template: `
template: /*html*/`
<div class="fhc-calendar-week">
<calendar-header :title="title" @prev="prev" @next="next" @updateMode="$emit('updateMode', $event)" @click="$emit('updateMode', 'weeks')"/>
<calendar-pane ref="pane" v-slot="slot" @slid="paneChanged">
<calendar-week-page v-slot="{event,day}" :year="focusDate.y" :week="focusDate.w+slot.offset" @updateMode="$emit('updateMode', $event)" @page:back="prev" @page:forward="next" @input="selectEvent" >
<slot :event="event" :day="day" ></slot>
<calendar-week-page :year="focusDate.y" :week="focusDate.w+slot.offset" @updateMode="$emit('updateMode', $event)" @page:back="prev" @page:forward="next" @input="selectEvent" >
<template #weekPage="{event,day}">
<slot name="weekPage" :event="event" :day="day" ></slot>
</template>
</calendar-week-page>
</calendar-pane>
</div>`
+2 -2
View File
@@ -145,8 +145,8 @@ export default {
<div v-for="hour in hours" style="min-height:100px" :key="hour" class="text-muted text-end small" :ref="'hour' + hour">{{hour}}:00</div>
</div>
<div v-for="day in eventsPerDayAndHour" :key="day" class=" day border-start" :style="{'grid-template-columns': 'repeat(' + day.lanes + ', 1fr)', 'grid-template-rows': 'repeat(' + (hours.length * 60 / smallestTimeFrame) + ', 1fr)'}">
<div :style="{'background-color':event.orig.color}" class="mx-2 border border-dark border-2 small rounded overflow-hidden " @click.prevent="$emit('input', event.orig)" :style="{'z-index':1,'grid-column-start': 1+(event.lane-1)*day.lanes/event.maxLane, 'grid-column-end': 1+event.lane*day.lanes/event.maxLane, 'grid-row-start': dateToMinutesOfDay(event.start), 'grid-row-end': dateToMinutesOfDay(event.end) ,'--test': dateToMinutesOfDay(event.end)}" v-for="event in day.events" :key="event">
<slot :event="event" :day="day">
<div :style="{'background-color':event.orig.color}" class="mx-2 border border-dark border-2 small rounded overflow-hidden " @click.prevent="$emit('input', event.orig)" :style="{'z-index':1,'grid-column-start': 1+(event.lane-1)*day.lanes/event.maxLane, 'grid-column-end': 1+event.lane*day.lanes/event.maxLane, 'grid-row-start': dateToMinutesOfDay(event.start), 'grid-row-end': dateToMinutesOfDay(event.end) ,'--test': dateToMinutesOfDay(event.end)}" v-for="event in day.events" :key="event">
<slot name="weekPage" :event="event" :day="day">
<p>this is a placeholder which means that no template was passed to the Calendar Page slot</p>
</slot>
</div>