From a99730b3697efe8dab6bb1514080ceff7eb2d05e Mon Sep 17 00:00:00 2001 From: Ivymaster Date: Fri, 11 Sep 2026 09:58:47 +0200 Subject: [PATCH] BUG: Fixed issue with reverting failed updated events --- public/js/components/Calendar/Base.js | 7 ++++++- public/js/components/Calendar/Tempus.js | 12 ++++++++++++ public/js/components/Tempus/Tempus.js | 8 ++++++++ public/js/composables/Tempus/TempusEventLoader.js | 3 +++ 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/public/js/components/Calendar/Base.js b/public/js/components/Calendar/Base.js index 360c9afa2..b9124c17b 100644 --- a/public/js/components/Calendar/Base.js +++ b/public/js/components/Calendar/Base.js @@ -123,6 +123,10 @@ export default { draggableEvents: [Boolean, Array, Function], dropableEvents: [Boolean, Array, Function], resizableEvents: [Boolean, Array, Function], + eventReloadKey: { + type: Number, + default: 0, + }, onDragover: Function, onDrop: Function, onResize: Function @@ -321,6 +325,7 @@ export default { ` -} \ No newline at end of file +} diff --git a/public/js/components/Calendar/Tempus.js b/public/js/components/Calendar/Tempus.js index 3feefbd97..4ecde52a6 100644 --- a/public/js/components/Calendar/Tempus.js +++ b/public/js/components/Calendar/Tempus.js @@ -86,6 +86,8 @@ export default { data() { return { + eventReloadKey: 0, + refreshEventsAfterReload: false, modes: { week: Vue.markRaw(ModeWeek), month: Vue.markRaw(ModeMonth), @@ -108,6 +110,11 @@ export default { }, watch: { events() { + if (this.refreshEventsAfterReload) { + this.eventReloadKey += 1; + this.refreshEventsAfterReload = false; + } + this.$emit('events-reloaded'); } }, @@ -186,6 +193,10 @@ export default { resetEventLoader(arePreviousEventsCleared = true) { this.reset(arePreviousEventsCleared); }, + reloadEvents() { + this.refreshEventsAfterReload = true; + this.resetEventLoader(false); + }, navigatePrev() { this.$refs.calendar.clickPrev(); }, @@ -259,6 +270,7 @@ export default { :timezone="timezone" :locale="$p.user_locale.value" :events="visibleEvents || []" + :event-reload-key="eventReloadKey" :backgrounds="backgrounds" :time-grid="showRaster ? teachingunits : null" :hours-plan="hoursplan" diff --git a/public/js/components/Tempus/Tempus.js b/public/js/components/Tempus/Tempus.js index ddd13d2e9..918614712 100644 --- a/public/js/components/Tempus/Tempus.js +++ b/public/js/components/Tempus/Tempus.js @@ -551,6 +551,14 @@ export default { this.$refs.calendar.$refs.calendar.$refs.mode.$refs.view.$refs.grid.disableAutoScroll(); this.currentlyUpdatedEvent = obj.orig; } + }) + .catch((error) => { + this.currentlyUpdatedEvent = null; + this.$refs.calendar.clearOutCalendarEventEmphasis(); + this.$nextTick(() => { + this.$refs.calendar.reloadEvents(); + }); + throw error; }); }, diff --git a/public/js/composables/Tempus/TempusEventLoader.js b/public/js/composables/Tempus/TempusEventLoader.js index ff107d31a..79fca1cb0 100644 --- a/public/js/composables/Tempus/TempusEventLoader.js +++ b/public/js/composables/Tempus/TempusEventLoader.js @@ -122,6 +122,8 @@ export function useEventLoader( allEvents.value = removeVisualForEventsLoading( ensureEventsAreInValidCacheRange(tempAllEvents), ); + + hasFirstLoadOccurred = true; }); }; @@ -130,6 +132,7 @@ export function useEventLoader( const reset = (arePreviousEventsCleared = true) => { if (arePreviousEventsCleared) { allEvents.value = []; + hasFirstLoadOccurred = false; } reload(false); };