diff --git a/src/renderer/features/albums/queries/album-list-query.ts b/src/renderer/features/albums/queries/album-list-query.ts index 0246332d..77be7722 100644 --- a/src/renderer/features/albums/queries/album-list-query.ts +++ b/src/renderer/features/albums/queries/album-list-query.ts @@ -1,7 +1,8 @@ -import { useQuery } from '@tanstack/react-query'; +import { useInfiniteQuery, useQuery } from '@tanstack/react-query'; +import { api } from '/@/renderer/api'; import { controller } from '/@/renderer/api/controller'; import { queryKeys } from '/@/renderer/api/query-keys'; -import type { AlbumListQuery } from '/@/renderer/api/types'; +import type { AlbumListQuery, AlbumListResponse } from '/@/renderer/api/types'; import type { QueryHookArgs } from '/@/renderer/lib/react-query'; import { getServerById } from '/@/renderer/store'; @@ -26,19 +27,35 @@ export const useAlbumList = (args: QueryHookArgs) => { }); }; -// export const useAlbumListInfinite = (params: AlbumListParams, options?: QueryOptions) => { -// const serverId = useAuthStore((state) => state.currentServer?.id) || ''; +export const useAlbumListInfinite = (args: QueryHookArgs) => { + const { options, query, serverId } = args; + const server = getServerById(serverId); -// return useInfiniteQuery({ -// enabled: !!serverId, -// getNextPageParam: (lastPage: AlbumListResponse) => { -// return !!lastPage.pagination.nextPage; -// }, -// getPreviousPageParam: (firstPage: AlbumListResponse) => { -// return !!firstPage.pagination.prevPage; -// }, -// queryFn: ({ pageParam }) => api.albums.getAlbumList({ serverId }, { ...(pageParam || params) }), -// queryKey: queryKeys.albums.list(serverId, params), -// ...options, -// }); -// }; + return useInfiniteQuery({ + enabled: !!serverId, + getNextPageParam: (lastPage: AlbumListResponse | undefined, pages) => { + if (!lastPage?.items) return undefined; + if (lastPage?.items?.length >= (query?.limit || 50)) { + return pages?.length; + } + + return undefined; + }, + queryFn: ({ pageParam = 0, signal }) => { + if (!server) throw new Error('Server not found'); + return api.controller.getAlbumList({ + apiClientProps: { + server, + signal, + }, + query: { + ...query, + limit: query.limit || 50, + startIndex: pageParam * (query.limit || 50), + }, + }); + }, + queryKey: queryKeys.albums.list(server?.id || '', query), + ...options, + }); +};