wip
This commit is contained in:
parent
5a84789229
commit
b21b287bc5
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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[]>>,
|
||||||
|
|
Loading…
Reference in New Issue