diff --git a/src/fullcalendar/eventSources/eventSource.js b/src/fullcalendar/eventSources/eventSource.js index 797c9d3ab..2cff8cadd 100644 --- a/src/fullcalendar/eventSources/eventSource.js +++ b/src/fullcalendar/eventSources/eventSource.js @@ -49,6 +49,10 @@ export default function(store) { logger.error(`EventSource: Timezone ${timeZone} not found, falling back to UTC.`) } + // This code assumes that once a time range has been fetched it won't be changed + // outside of the vuex store. Triggering a refetch will just update all known + // calendar objects inside this time range. New events that were added to a cached + // time range externally will not be fetched and have to be added manually. const timeRange = store.getters.getTimeRangeForCalendarCoveringRange(calendar.id, getUnixTimestampFromDate(start), getUnixTimestampFromDate(end)) if (!timeRange) { let timeRangeId diff --git a/src/store/calendars.js b/src/store/calendars.js index 5df99c93f..d1c3a7f35 100644 --- a/src/store/calendars.js +++ b/src/store/calendars.js @@ -688,13 +688,31 @@ const actions = { commit('removeDeletedCalendar', { calendar }) }, - async restoreCalendarObject({ commit, state, dispatch }, { vobject }) { + async restoreCalendarObject({ commit, state, getters }, { vobject }) { await state.trashBin.restore(vobject.uri) // Clean up the data locally commit('removeDeletedCalendarObject', { vobject }) - // Make sure the affected calendar is refreshed + // Delete cached time range that includes the restored event + const calendarObject = mapCDavObjectToCalendarObject(vobject.dav, undefined) + const component = calendarObject.calendarComponent.getFirstComponent(vobject.objectType) + const timeRange = getters.getTimeRangeForCalendarCoveringRange( + vobject.calendar.id, + component.startDate.unixTime, + component.endDate.unixTime, + ) + if (timeRange) { + commit('deleteFetchedTimeRangeFromCalendar', { + calendar: vobject.calendar, + fetchedTimeRangeId: timeRange.id, + }) + commit('removeTimeRange', { + timeRangeId: timeRange.id, + }) + } + + // Trigger calendar refresh commit('incrementModificationCount') },