Reverted to original eventLoader

This commit is contained in:
Ivymaster
2026-09-09 13:09:48 +02:00
parent ed02955b49
commit c91a6c6376
+2 -45
View File
@@ -1,6 +1,6 @@
// TODO(chris): load events that are longer than the interval without doubling it
export function useEventLoader(rangeInterval, getPromiseFunc, preserveRequestedRange = false, cacheMultiplier = 1) {
export function useEventLoader(rangeInterval, getPromiseFunc) {
let loading_id = 0;
const events = Vue.ref([]);
const loadingEvents = Vue.ref([]);
@@ -14,23 +14,6 @@ export function useEventLoader(rangeInterval, getPromiseFunc, preserveRequestedR
return o.push(n), o;
};
const filterEventsOutsideRange = validRange => {
events.value = events.value.filter(event => {
const start = luxon.DateTime.fromISO(event.isostart).ts;
const end = luxon.DateTime.fromISO(event.isoend).ts;
return start <= validRange.end.ts && end >= validRange.start.ts;
});
const loadedRanges = [];
for (let i = 0; i < eventsLoaded.length; i += 2) {
const start = Math.max(eventsLoaded[i], validRange.start.ts);
const end = Math.min(eventsLoaded[i + 1], validRange.end.ts);
if (start < end)
loadedRanges.push(start, end);
}
eventsLoaded.splice(0, eventsLoaded.length, ...loadedRanges);
};
const markEventsLoaded = (start, end) => {
let result = [];
if (!eventsLoaded.length) {
@@ -100,23 +83,6 @@ export function useEventLoader(rangeInterval, getPromiseFunc, preserveRequestedR
// load the rest
let rStart = eventsLoaded[index + 1] + 1;
result = mergePromiseArr(markEventsLoaded(start.plus(rStart - start.ts), end), result);
} else if (
Vue.toValue(preserveRequestedRange)
&& end.ts < eventsLoaded[index]
) {
// requested range is entirely inside the gap
// between the previous and next loaded chunks
const touchesPrevious = eventsLoaded[index - 1] + 1 == start.ts;
const touchesNext = end.ts + 1 == eventsLoaded[index];
if (touchesPrevious && touchesNext)
eventsLoaded.splice(index - 1, 2);
else if (touchesPrevious)
eventsLoaded[index - 1] = end.ts;
else if (touchesNext)
eventsLoaded[index] = start.ts;
else
eventsLoaded.splice(index, 0, start.ts, end.ts);
} else {
// extend an existing chunk
// and load the rest if necessary
@@ -149,13 +115,6 @@ export function useEventLoader(rangeInterval, getPromiseFunc, preserveRequestedR
const range = Vue.toValue(rangeInterval);
if (!(range instanceof luxon.Interval))
return;
const cacheSize = Math.max(Vue.toValue(cacheMultiplier), 0);
const cachePadding = Math.round(range.length() * cacheSize);
const validRange = luxon.Interval.fromDateTimes(
range.start.minus(cachePadding ?? 0),
range.end.plus(cachePadding ?? 0)
);
const promises = markEventsLoaded(range.start, range.end);
Promise
.allSettled(promises)
@@ -169,8 +128,6 @@ export function useEventLoader(rangeInterval, getPromiseFunc, preserveRequestedR
lv.value = res.value.meta.lv;
events.value = events.value.concat(res.value.data);
filterEventsOutsideRange(validRange);
loadingEvents.value = [];
}
})
@@ -189,4 +146,4 @@ export function useEventLoader(rangeInterval, getPromiseFunc, preserveRequestedR
}
return { events: allEvents, lv, reset }
}
}