From 295fe859d86f720546691b87661ff63303595fd9 Mon Sep 17 00:00:00 2001
From: syuilo <4439005+syuilo@users.noreply.github.com>
Date: Fri, 2 May 2025 09:37:51 +0900
Subject: [PATCH] wip
---
.../frontend/src/components/MkTimeline.vue | 48 +++++++++++++------
packages/frontend/src/use/use-pagination.ts | 31 ++++++++----
2 files changed, 55 insertions(+), 24 deletions(-)
diff --git a/packages/frontend/src/components/MkTimeline.vue b/packages/frontend/src/components/MkTimeline.vue
index aa50934225..06bff715bf 100644
--- a/packages/frontend/src/components/MkTimeline.vue
+++ b/packages/frontend/src/components/MkTimeline.vue
@@ -19,12 +19,10 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
-
-
-
+
(props: {
useShallowRef?: boolean;
}) {
const items = props.useShallowRef ? shallowRef([]) : ref([]);
- const queue = props.useShallowRef ? shallowRef([]) : ref([]);
+ let aheadQueue: T[] = [];
+ const queuedAheadItemsCount = ref(0);
const fetching = ref(true);
const moreFetching = ref(false);
const canFetchMore = ref(false);
@@ -54,6 +56,9 @@ export function usePagination(props: {
function getNewestId() {
// 様々な要因により並び順は保証されないのでソートが必要
+ if (aheadQueue.length > 0) {
+ return aheadQueue.map(x => x.id).sort().at(-1);
+ }
return items.value.map(x => x.id).sort().at(-1);
}
@@ -64,7 +69,8 @@ export function usePagination(props: {
async function init(): Promise {
items.value = [];
- queue.value = [];
+ aheadQueue = [];
+ queuedAheadItemsCount.value = 0;
fetching.value = true;
const params = props.ctx.params ? isRef(props.ctx.params) ? props.ctx.params.value : props.ctx.params : {};
await misskeyApi(props.ctx.endpoint, {
@@ -143,8 +149,11 @@ export function usePagination(props: {
}),
}).then(res => {
if (options.toQueue) {
- queue.value.unshift(...res.toReversed());
- if (props.useShallowRef) triggerRef(queue);
+ aheadQueue.unshift(...res.toReversed());
+ if (aheadQueue.length > MAX_QUEUE_ITEMS) {
+ aheadQueue = aheadQueue.slice(0, MAX_QUEUE_ITEMS);
+ }
+ queuedAheadItemsCount.value = aheadQueue.length;
} else {
items.value.unshift(...res.toReversed());
if (props.useShallowRef) triggerRef(items);
@@ -173,13 +182,17 @@ export function usePagination(props: {
}
function enqueue(item: T) {
- queue.value.unshift(item);
- if (props.useShallowRef) triggerRef(queue);
+ aheadQueue.unshift(item);
+ if (aheadQueue.length > MAX_QUEUE_ITEMS) {
+ aheadQueue.pop();
+ }
+ queuedAheadItemsCount.value = aheadQueue.length;
}
function releaseQueue() {
- unshiftItems(queue.value);
- queue.value = [];
+ unshiftItems(aheadQueue);
+ aheadQueue = [];
+ queuedAheadItemsCount.value = 0;
}
onMounted(() => {
@@ -188,7 +201,7 @@ export function usePagination(props: {
return {
items,
- queue,
+ queuedAheadItemsCount,
fetching,
moreFetching,
canFetchMore,