This commit is contained in:
syuilo 2025-05-10 14:56:27 +09:00
parent 5a84789229
commit b21b287bc5
2 changed files with 15 additions and 57 deletions

View File

@ -142,8 +142,6 @@ const emit = defineEmits<{
(ev: 'open-folder', v: Misskey.entities.DriveFolder): void; (ev: 'open-folder', v: Misskey.entities.DriveFolder): void;
}>(); }>();
const loadMoreFiles = useTemplateRef('loadMoreFiles');
const filesPaginator = usePagination({ const filesPaginator = usePagination({
ctx: { ctx: {
endpoint: 'drive/files', endpoint: 'drive/files',
@ -154,6 +152,7 @@ const filesPaginator = usePagination({
sort: sortModeSelect.value, sort: sortModeSelect.value,
})), })),
}, },
autoInit: false,
}); });
const foldersPaginator = usePagination({ const foldersPaginator = usePagination({
@ -164,6 +163,7 @@ const foldersPaginator = usePagination({
folderId: folder.value ? folder.value.id : null, folderId: folder.value ? folder.value.id : null,
})), })),
}, },
autoInit: false,
}); });
const folder = ref<Misskey.entities.DriveFolder | null>(null); const folder = ref<Misskey.entities.DriveFolder | null>(null);
@ -181,10 +181,6 @@ const isDragSource = ref(false);
const fetching = ref(true); const fetching = ref(true);
const ilFilesObserver = new IntersectionObserver(
(entries) => entries.some((entry) => entry.isIntersecting) && !fetching.value && moreFiles.value && fetchMoreFiles(),
);
const sortModeSelect = ref<NonNullable<Misskey.entities.DriveFilesRequest['sort']>>('+createdAt'); const sortModeSelect = ref<NonNullable<Misskey.entities.DriveFilesRequest['sort']>>('+createdAt');
watch(folder, () => emit('cd', folder.value)); watch(folder, () => emit('cd', folder.value));
@ -192,43 +188,19 @@ watch(sortModeSelect, () => {
initialize(); initialize();
}); });
function initialize() { async function initialize() {
fetching.value = true;
await Promise.all([
foldersPaginator.init(),
filesPaginator.init(),
]);
fetching.value = false;
} }
function onStreamDriveFileCreated(file: Misskey.entities.DriveFile) { function onStreamDriveFileCreated(file: Misskey.entities.DriveFile) {
addFile(file, true); addFile(file, true);
} }
function onStreamDriveFileUpdated(file: Misskey.entities.DriveFile) {
const current = folder.value ? folder.value.id : null;
if (current !== file.folderId) {
removeFile(file);
} else {
addFile(file, true);
}
}
function onStreamDriveFileDeleted(fileId: string) {
removeFile(fileId);
}
function onStreamDriveFolderCreated(createdFolder: Misskey.entities.DriveFolder) {
addFolder(createdFolder, true);
}
function onStreamDriveFolderUpdated(updatedFolder: Misskey.entities.DriveFolder) {
const current = folder.value ? folder.value.id : null;
if (current !== updatedFolder.parentId) {
removeFolder(updatedFolder);
} else {
addFolder(updatedFolder, true);
}
}
function onStreamDriveFolderDeleted(folderId: string) {
removeFolder(folderId);
}
function onDragover(ev: DragEvent) { function onDragover(ev: DragEvent) {
if (!ev.dataTransfer) return; if (!ev.dataTransfer) return;
@ -656,18 +628,7 @@ function closeTip() {
} }
onMounted(() => { onMounted(() => {
if (prefer.s.enableInfiniteScroll && loadMoreFiles.value) {
nextTick(() => {
ilFilesObserver.observe(loadMoreFiles.value?.$el);
});
}
connection.on('fileCreated', onStreamDriveFileCreated); connection.on('fileCreated', onStreamDriveFileCreated);
connection.on('fileUpdated', onStreamDriveFileUpdated);
connection.on('fileDeleted', onStreamDriveFileDeleted);
connection.on('folderCreated', onStreamDriveFolderCreated);
connection.on('folderUpdated', onStreamDriveFolderUpdated);
connection.on('folderDeleted', onStreamDriveFolderDeleted);
if (props.initialFolder) { if (props.initialFolder) {
move(props.initialFolder); move(props.initialFolder);
@ -677,16 +638,10 @@ onMounted(() => {
}); });
onActivated(() => { onActivated(() => {
if (prefer.s.enableInfiniteScroll) {
nextTick(() => {
ilFilesObserver.observe(loadMoreFiles.value?.$el);
});
}
}); });
onBeforeUnmount(() => { onBeforeUnmount(() => {
connection.dispose(); connection.dispose();
ilFilesObserver.disconnect();
}); });
</script> </script>

View File

@ -39,6 +39,7 @@ export type PagingCtx<E extends keyof Misskey.Endpoints = keyof Misskey.Endpoint
export function usePagination<Endpoint extends keyof Misskey.Endpoints, T = Misskey.Endpoints[Endpoint]['res'] extends (infer I)[] ? I : never>(props: { export function usePagination<Endpoint extends keyof Misskey.Endpoints, T = Misskey.Endpoints[Endpoint]['res'] extends (infer I)[] ? I : never>(props: {
ctx: PagingCtx<Endpoint>; ctx: PagingCtx<Endpoint>;
autoInit?: boolean;
useShallowRef?: boolean; useShallowRef?: boolean;
}) { }) {
const items = props.useShallowRef ? shallowRef<T[]>([]) : ref<T[]>([]); const items = props.useShallowRef ? shallowRef<T[]>([]) : ref<T[]>([]);
@ -232,9 +233,11 @@ export function usePagination<Endpoint extends keyof Misskey.Endpoints, T = Miss
} }
} }
if (props.autoInit !== false) {
onMounted(() => { onMounted(() => {
init(); init();
}); });
}
return { return {
items: items as DeepReadonly<ShallowRef<T[]>>, items: items as DeepReadonly<ShallowRef<T[]>>,