mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-01 12:19:28 +00:00
106 lines
2.2 KiB
JavaScript
106 lines
2.2 KiB
JavaScript
import FhcCalendar from "./Base.js";
|
|
|
|
import { useEventLoader } from '../../composables/EventLoader.js';
|
|
import { useRenderers } from '../../composables/Renderers.js';
|
|
|
|
import ModeList from '../Calendar/Mode/List.js';
|
|
|
|
export default {
|
|
name: "CalendarWidget",
|
|
components: {
|
|
FhcCalendar
|
|
},
|
|
props: {
|
|
getPromiseFunc: {
|
|
type: Function,
|
|
required: true
|
|
}
|
|
},
|
|
data() {
|
|
const timezone = FHC_JS_DATA_STORAGE_OBJECT.timezone;
|
|
return {
|
|
timezone,
|
|
now: luxon.DateTime.now().setZone(timezone),
|
|
modes: {
|
|
list: Vue.markRaw(ModeList)
|
|
},
|
|
modeOptions: {
|
|
list: {
|
|
length: 7
|
|
}
|
|
}
|
|
};
|
|
},
|
|
methods: {
|
|
eventStyle(event) {
|
|
const styles = {};
|
|
if (event.farbe)
|
|
styles['--event-bg'] = '#' + event.farbe;
|
|
else if (event.type == 'reservierung')
|
|
styles['--event-bg'] = '#ffffff';
|
|
else
|
|
styles['--event-bg'] = '#cccccc';
|
|
|
|
const eventEnd = luxon.DateTime.fromISO(event.isoend, { zone: this.timezone });
|
|
if (eventEnd < this.now)
|
|
styles['opacity'] = .5;
|
|
|
|
return styles;
|
|
},
|
|
updateRange(rangeInterval) {
|
|
this.rangeInterval = rangeInterval;
|
|
}
|
|
},
|
|
setup(props) {
|
|
const rangeInterval = Vue.ref(null);
|
|
|
|
const { events } = useEventLoader(rangeInterval, props.getPromiseFunc);
|
|
const { renderers } = useRenderers();
|
|
|
|
return {
|
|
rangeInterval,
|
|
events,
|
|
renderers
|
|
};
|
|
},
|
|
template: /* html */`
|
|
<fhc-calendar
|
|
:modes="modes"
|
|
:mode-options="modeOptions"
|
|
:timezone="timezone"
|
|
:locale="$p.user_locale.value"
|
|
:events="events || []"
|
|
@update:range="updateRange"
|
|
>
|
|
<template v-slot="{ event, mode }">
|
|
<div
|
|
v-if="!event"
|
|
class="h-100 d-flex justify-content-center align-items-center"
|
|
>
|
|
{{ $p.t('lehre/noLvFound') }}
|
|
</div>
|
|
<component
|
|
v-else-if="mode == 'eventheader'"
|
|
:is="renderers[event.type]?.modalTitle"
|
|
:event="event"
|
|
></component>
|
|
<component
|
|
v-else-if="mode == 'event'"
|
|
:is="renderers[event.type]?.modalContent"
|
|
:event="event"
|
|
></component>
|
|
<div
|
|
v-else
|
|
:class="'event-type-' + event.type + ' ' + mode + 'PageContainer'"
|
|
:style="eventStyle(event)"
|
|
>
|
|
<component
|
|
:is="renderers[event.type]?.calendarEvent"
|
|
:event="event"
|
|
:timeSlotDisplayBehavior="'always'"
|
|
></component>
|
|
</div>
|
|
</template>
|
|
</fhc-calendar>`
|
|
}
|