Skip to content

Commit 5d9017b

Browse files
authored
fix: fetching more should only allow for one and abort if one is already in progress. fixes #3113 (#3118)
1 parent aa6556b commit 5d9017b

File tree

3 files changed

+19
-8
lines changed

3 files changed

+19
-8
lines changed

assets/components/InfiniteLoader.vue

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ const isLoading = ref(false);
1414
const root = ref<HTMLElement>();
1515
1616
const observer = new IntersectionObserver(async (entries) => {
17-
// console.log(entries, entries[0].intersectionRatio);
1817
if (entries[0].intersectionRatio <= 0) return;
1918
if (onLoadMore && enabled) {
2019
const scrollingParent = root.value?.closest("[data-scrolling]") || document.documentElement;

assets/components/LogViewer/EventSource.vue

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<InfiniteLoader :onLoadMore="fetchMore" :enabled="messages.length > 50"></InfiniteLoader>
2+
<InfiniteLoader :onLoadMore="fetchMore" :enabled="enabled && messages.length > 50" />
33
<slot :messages="messages"></slot>
44
</template>
55

@@ -13,18 +13,23 @@ const { entity, streamSource } = $defineProps<{
1313
entity: T;
1414
}>();
1515
16-
const { messages, loadOlderLogs } = streamSource($$(entity));
16+
const { messages, loadOlderLogs, isLoadingMore } = streamSource($$(entity));
1717
1818
const beforeLoading = () => loadingMore(true);
1919
const afterLoading = () => loadingMore(false);
20+
const enabled = ref(true);
2021
2122
defineExpose({
2223
clear: () => (messages.value = []),
2324
});
2425
2526
const fetchMore = async () => {
26-
beforeLoading();
27-
await loadOlderLogs();
28-
afterLoading();
27+
if (!isLoadingMore()) {
28+
beforeLoading();
29+
enabled.value = false;
30+
await loadOlderLogs();
31+
afterLoading();
32+
enabled.value = true;
33+
}
2934
};
3035
</script>

assets/composable/eventStreams.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,8 +186,11 @@ function useLogStream(url: Ref<string>, loadMoreUrl?: Ref<string>) {
186186

187187
watch(url, () => connect(), { immediate: true });
188188

189+
let fetchingInProgress = false;
190+
189191
async function loadOlderLogs() {
190192
if (!loadMoreUrl) return;
193+
if (fetchingInProgress) return;
191194

192195
const to = messages[0].date;
193196
const last = messages[Math.min(messages.length - 1, 300)].date;
@@ -196,7 +199,7 @@ function useLogStream(url: Ref<string>, loadMoreUrl?: Ref<string>) {
196199

197200
const abortController = new AbortController();
198201
const signal = abortController.signal;
199-
202+
fetchingInProgress = true;
200203
try {
201204
const stopWatcher = watchOnce(url, () => abortController.abort("stream changed"));
202205
const logs = await (
@@ -216,10 +219,14 @@ function useLogStream(url: Ref<string>, loadMoreUrl?: Ref<string>) {
216219
}
217220
} catch (e) {
218221
console.error("Error loading older logs", e);
222+
} finally {
223+
fetchingInProgress = false;
219224
}
220225
}
221226

222227
onScopeDispose(() => close());
223228

224-
return { ...$$({ messages }), loadOlderLogs };
229+
const isLoadingMore = () => fetchingInProgress;
230+
231+
return { ...$$({ messages }), loadOlderLogs, isLoadingMore };
225232
}

0 commit comments

Comments
 (0)