mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-10-12 06:54:04 +00:00
Reverted to original eventLoader
This commit is contained in:
@@ -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 }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user