diff --git a/src/renderer/components/item-list/helpers/item-list-infinite-loader.ts b/src/renderer/components/item-list/helpers/item-list-infinite-loader.ts index d9b24824b..819585352 100644 --- a/src/renderer/components/item-list/helpers/item-list-infinite-loader.ts +++ b/src/renderer/components/item-list/helpers/item-list-infinite-loader.ts @@ -14,6 +14,25 @@ import { UserFavoriteEventPayload, UserRatingEventPayload } from '/@/renderer/ev import { getServerById } from '/@/renderer/store'; import { LibraryItem } from '/@/shared/types/domain-types'; +const getQueryKeyName = (itemType: LibraryItem): string => { + switch (itemType) { + case LibraryItem.ALBUM: + return 'albums'; + case LibraryItem.ALBUM_ARTIST: + return 'albumArtists'; + case LibraryItem.ARTIST: + return 'artists'; + case LibraryItem.GENRE: + return 'genres'; + case LibraryItem.PLAYLIST: + return 'playlists'; + case LibraryItem.SONG: + return 'songs'; + default: + return 'albums'; + } +}; + interface UseItemListInfiniteLoaderProps { eventKey: string; itemsPerPage: number; @@ -110,7 +129,7 @@ export const useItemListInfiniteLoader = ({ return result.items; }, - queryKey: queryKeys.albums.list(serverId, queryParams), + queryKey: queryKeys[getQueryKeyName(itemType)].list(serverId, queryParams), staleTime: 1000 * 15, }); @@ -120,7 +139,7 @@ export const useItemListInfiniteLoader = ({ pagesLoaded.current[pageNumber] = true; }, 500); - }, [itemsPerPage, query, queryClient, serverId, dataQueryKey, listQueryFn]); + }, [itemsPerPage, query, queryClient, serverId, dataQueryKey, listQueryFn, itemType]); const refresh = useCallback( async (force?: boolean) => { diff --git a/src/renderer/components/item-list/helpers/item-list-paginated-loader.ts b/src/renderer/components/item-list/helpers/item-list-paginated-loader.ts index d89752978..ed68c4e4e 100644 --- a/src/renderer/components/item-list/helpers/item-list-paginated-loader.ts +++ b/src/renderer/components/item-list/helpers/item-list-paginated-loader.ts @@ -11,11 +11,32 @@ import { useListContext } from '/@/renderer/context/list-context'; import { eventEmitter } from '/@/renderer/events/event-emitter'; import { UserFavoriteEventPayload, UserRatingEventPayload } from '/@/renderer/events/events'; import { getServerById } from '/@/renderer/store'; +import { LibraryItem } from '/@/shared/types/domain-types'; + +const getQueryKeyName = (itemType: LibraryItem): string => { + switch (itemType) { + case LibraryItem.ALBUM: + return 'albums'; + case LibraryItem.ALBUM_ARTIST: + return 'albumArtists'; + case LibraryItem.ARTIST: + return 'artists'; + case LibraryItem.GENRE: + return 'genres'; + case LibraryItem.PLAYLIST: + return 'playlists'; + case LibraryItem.SONG: + return 'songs'; + default: + return 'albums'; // fallback + } +}; interface UseItemListPaginatedLoaderProps { currentPage: number; eventKey?: string; itemsPerPage: number; + itemType: LibraryItem; listCountQuery: UseSuspenseQueryOptions; listQueryFn: (args: { apiClientProps: any; query: any }) => Promise<{ items: unknown[] }>; query: Record; @@ -30,6 +51,7 @@ export const useItemListPaginatedLoader = ({ currentPage, eventKey, itemsPerPage = 100, + itemType, listCountQuery, listQueryFn, query = {}, @@ -73,7 +95,7 @@ export const useItemListPaginatedLoader = ({ return result.items; }, - queryKey: queryKeys.albums.list(serverId, queryParams), + queryKey: queryKeys[getQueryKeyName(itemType)].list(serverId, queryParams), staleTime: 1000 * 15, }); @@ -84,7 +106,7 @@ export const useItemListPaginatedLoader = ({ const updateItems = useCallback( (indexes: number[], value: object) => { return queryClient.setQueryData( - queryKeys.albums.list(serverId, queryParams), + queryKeys[getQueryKeyName(itemType)].list(serverId, queryParams), (prev: undefined | unknown[]) => { if (!prev) { return prev; @@ -107,7 +129,7 @@ export const useItemListPaginatedLoader = ({ }, ); }, - [queryClient, queryParams, serverId], + [queryClient, queryParams, serverId, itemType], ); useEffect(() => { diff --git a/src/renderer/features/albums/components/album-list-paginated-grid.tsx b/src/renderer/features/albums/components/album-list-paginated-grid.tsx index 88e342e13..93c3d2327 100644 --- a/src/renderer/features/albums/components/album-list-paginated-grid.tsx +++ b/src/renderer/features/albums/components/album-list-paginated-grid.tsx @@ -44,6 +44,7 @@ export const AlbumListPaginatedGrid = forwardRef const { data, pageCount, totalItemCount } = useItemListPaginatedLoader({ currentPage, itemsPerPage, + itemType: LibraryItem.SONG, listCountQuery, listQueryFn, query, diff --git a/src/renderer/features/songs/components/song-list-paginated-table.tsx b/src/renderer/features/songs/components/song-list-paginated-table.tsx index ea9784ad3..1b10b1ad8 100644 --- a/src/renderer/features/songs/components/song-list-paginated-table.tsx +++ b/src/renderer/features/songs/components/song-list-paginated-table.tsx @@ -45,6 +45,7 @@ export const SongListPaginatedTable = forwardRef