From 4ecd4b5a656e082ca0095ad65d403dbd8566436e Mon Sep 17 00:00:00 2001 From: Ivymaster Date: Wed, 9 Sep 2026 12:21:46 +0200 Subject: [PATCH] BUG: Fixed issue witd drag drop animation --- public/js/components/Calendar/Tempus.js | 8 +++- public/js/components/Tempus/Tempus.js | 64 +++++++++++++++++++++---- 2 files changed, 61 insertions(+), 11 deletions(-) diff --git a/public/js/components/Calendar/Tempus.js b/public/js/components/Calendar/Tempus.js index 998b73886..3bd593797 100644 --- a/public/js/components/Calendar/Tempus.js +++ b/public/js/components/Calendar/Tempus.js @@ -76,7 +76,8 @@ export default { "resize", "event-hover", "event-unhover", - "open-reservierung" + "open-reservierung", + "events-reloaded", ], data() { @@ -101,6 +102,11 @@ export default { showRaster: true, }; }, + watch: { + events() { + this.$emit('events-reloaded'); + } + }, computed: { backgrounds() { let now = luxon.DateTime.now().setZone(this.timezone); diff --git a/public/js/components/Tempus/Tempus.js b/public/js/components/Tempus/Tempus.js index 32fe0bf13..0bb92c77d 100644 --- a/public/js/components/Tempus/Tempus.js +++ b/public/js/components/Tempus/Tempus.js @@ -438,15 +438,24 @@ export default { return this.$api.call(ApiSearchbar.search(params)); }, getPromiseFunc(start, end) { - const hasRoom = !!this.ort_kurzbz; + const hasRooms = this.rooms.length > 0; const hasLektoren = this.lecturers.length > 0; - const hasStg = !!this.stg; + const hasStg = this.studiengaenge.length > 0; const filter = {}; - if (hasRoom) filter.ort = this.ort_kurzbz; - if (hasStg) filter.stg = this.stg; - if (hasLektoren) filter.uid = this.lecturers.map((l) => l.uid); + if (hasRooms) filter.ort = this.rooms.map((room) => room.ort_kurzbz); + if (hasStg) { + filter.stg = this.studiengaenge.map( + ({ stg_kz, semester, orgform_kurzbz }) => ({ + stg_kz, + semester, + orgform_kurzbz, + }), + ); + } + if (hasLektoren) + filter.uid = this.lecturers.map((lecture) => lecture.uid); let response = null; if (this.previewRole === 'lektor') @@ -532,7 +541,7 @@ export default { const { item, start, end } = payload; const obj = item[0]; if (!obj?.orig?.kalender_id) - return alert('Kein gültiges Kalender-Event zum Resizen'); + return; const dates = this._parseDates(start, end); @@ -967,18 +976,42 @@ export default { }, updateKalenderEventElementDisplay(calendarGruppenId, startDT, endDT) { if (!calendarGruppenId) - return alert('Kein gültiges Kalender-Event zum Resizen'); + return; let startOfDay = startDT.startOf('day'); let newPotentialStart = startDT.diff(startOfDay).toMillis() ?? 1; let newPotentialEnd = endDT.diff(startOfDay).toMillis(); - let element = document.querySelector( + const calendar = this.$refs.calendar?.$el; + let element = calendar?.querySelector( `[data-group-id="event-group-${calendarGruppenId}"]`, ); - if (!element) return alert('Kein gültiges Kalender-Event zum Resizen'); + if (!element) return; + + const targetGridLine = [...calendar.querySelectorAll( + '.fhc-calendar-base-grid-line', + )].find((gridLine) => { + const [rowStart, columnStart, rowEnd] = getComputedStyle( + gridLine, + ).gridArea.split(' / '); + + return ( + rowStart === '1' && + columnStart === String(startDT.weekday) && + rowEnd === '-1' + ); + }); + const changedDay = + targetGridLine && element.parentElement !== targetGridLine; setTimeout(() => { + if (!calendar.contains(element)) return; + + + if (changedDay) { + targetGridLine.insertBefore(element, null); + element.classList.add('tempus-temporary-calendar-event'); + } element.style.gridRowEnd = 't_' + newPotentialEnd; element.style.gridRowStart = 't_' + newPotentialStart; }, 100); @@ -993,7 +1026,6 @@ export default { element.appendChild(outerDiv); - const calendar = document.querySelector('.fhc-calendar-base-grid'); const eventRect = element.getBoundingClientRect(); const offset = 300; @@ -1013,6 +1045,17 @@ export default { }); } }, + clearTemporaryEvents() { + const calendar = this.$refs.calendar?.$el; + if (!calendar) return; + + const tempEvents = calendar.querySelectorAll( + '.tempus-temporary-calendar-event', + ); + tempEvents.forEach((event) => { + event.remove(); + }); + } }, watch: { lecturers: { @@ -1162,6 +1205,7 @@ export default { @open-reservierung="openReservierung" :extra-backgrounds="extraBackgrounds" @update:range="handleRange" + @events-reloaded="clearTemporaryEvents" class="responsive-calendar" />