$emit('delete-event', event)"
diff --git a/public/js/components/Calendar/Widget.js b/public/js/components/Calendar/Widget.js
index 2266ce422..57ee43f7c 100644
--- a/public/js/components/Calendar/Widget.js
+++ b/public/js/components/Calendar/Widget.js
@@ -5,6 +5,8 @@ import { useRenderers } from '../../composables/Renderers.js';
import ModeList from '../Calendar/Mode/List.js';
+import ApiRoomPlan from '../../api/factory/calendar/roomPlan.js';
+
export default {
name: "CalendarWidget",
components: {
@@ -49,17 +51,36 @@ export default {
},
updateRange(rangeInterval) {
this.rangeInterval = rangeInterval;
- }
+ },
+ deleteEvent(event) {
+ if (event.type === "reservierung") {
+ this.deleteReservation(event);
+ }
+ },
+ async deleteReservation(event) {
+ if (
+ luxon.DateTime.fromISO(`${event.datum}T${event.beginn}`) <
+ luxon.DateTime.now()
+ )
+ return;
+
+ await this.$api.call(
+ ApiRoomPlan.deleteRoomReservation(event.reservierung_id),
+ );
+
+ this.reset();
+ },
},
setup(props) {
const rangeInterval = Vue.ref(null);
- const { events } = useEventLoader(rangeInterval, props.getPromiseFunc);
+ const { events, reset } = useEventLoader(rangeInterval, props.getPromiseFunc);
const { renderers } = useRenderers();
return {
rangeInterval,
events,
+ reset,
renderers
};
},
@@ -80,17 +101,17 @@ export default {
{{ $p.t('lehre/noLvFound') }}
@@ -98,6 +119,7 @@ export default {
:is="renderers[event.type]?.calendarEvent"
:event="event"
:timeSlotDisplayBehavior="'always'"
+ @delete-event="(event) => deleteEvent(event)"
>
diff --git a/public/js/components/Cis/LvPlan/MyLvPlan.js b/public/js/components/Cis/LvPlan/MyLvPlan.js
index cb43a06d9..3fab090a3 100644
--- a/public/js/components/Cis/LvPlan/MyLvPlan.js
+++ b/public/js/components/Cis/LvPlan/MyLvPlan.js
@@ -2,6 +2,7 @@ import FhcCalendar from "../../Calendar/LvPlan.js";
import ApiLvPlan from '../../../api/factory/lvPlan.js';
import ApiAuthinfo from '../../../api/factory/authinfo.js';
+import ApiRoomPlan from '../../../api/factory/calendar/roomPlan.js';
export const DEFAULT_MODE_LVPLAN_DESKTOP = "Week";
export const DEFAULT_MODE_LVPLAN_MOBILE = "List";
@@ -134,6 +135,24 @@ export default {
this.isMitarbeiter = authInfo.isMitarbeiter;
this.isStudent = authInfo.isStudent;
},
+ deleteEvent(event) {
+ if (event.type === "reservierung") {
+ this.deleteReservation(event);
+ }
+ },
+ async deleteReservation(event) {
+ if (
+ luxon.DateTime.fromISO(`${event.datum}T${event.beginn}`) <
+ luxon.DateTime.now()
+ )
+ return;
+
+ await this.$api.call(
+ ApiRoomPlan.deleteRoomReservation(event.reservierung_id),
+ );
+
+ this.$refs.calendar.reset();
+ },
},
async created() {
await this.fetchAuthInfo();
@@ -157,6 +176,7 @@ export default {
@update:date="handleChangeDate"
@update:mode="handleChangeMode"
@update:range="updateRange"
+ @delete-event="(event) => deleteEvent(event)"
class="responsive-calendar"
>