fix list loader query keys

This commit is contained in:
jeffvli
2025-10-22 18:43:40 -07:00
parent 821e57e27f
commit e92bc3dfcf
6 changed files with 50 additions and 5 deletions
@@ -14,6 +14,25 @@ import { UserFavoriteEventPayload, UserRatingEventPayload } from '/@/renderer/ev
import { getServerById } from '/@/renderer/store'; import { getServerById } from '/@/renderer/store';
import { LibraryItem } from '/@/shared/types/domain-types'; 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 { interface UseItemListInfiniteLoaderProps {
eventKey: string; eventKey: string;
itemsPerPage: number; itemsPerPage: number;
@@ -110,7 +129,7 @@ export const useItemListInfiniteLoader = ({
return result.items; return result.items;
}, },
queryKey: queryKeys.albums.list(serverId, queryParams), queryKey: queryKeys[getQueryKeyName(itemType)].list(serverId, queryParams),
staleTime: 1000 * 15, staleTime: 1000 * 15,
}); });
@@ -120,7 +139,7 @@ export const useItemListInfiniteLoader = ({
pagesLoaded.current[pageNumber] = true; pagesLoaded.current[pageNumber] = true;
}, 500); }, 500);
}, [itemsPerPage, query, queryClient, serverId, dataQueryKey, listQueryFn]); }, [itemsPerPage, query, queryClient, serverId, dataQueryKey, listQueryFn, itemType]);
const refresh = useCallback( const refresh = useCallback(
async (force?: boolean) => { async (force?: boolean) => {
@@ -11,11 +11,32 @@ import { useListContext } from '/@/renderer/context/list-context';
import { eventEmitter } from '/@/renderer/events/event-emitter'; import { eventEmitter } from '/@/renderer/events/event-emitter';
import { UserFavoriteEventPayload, UserRatingEventPayload } from '/@/renderer/events/events'; import { UserFavoriteEventPayload, UserRatingEventPayload } from '/@/renderer/events/events';
import { getServerById } from '/@/renderer/store'; 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 { interface UseItemListPaginatedLoaderProps {
currentPage: number; currentPage: number;
eventKey?: string; eventKey?: string;
itemsPerPage: number; itemsPerPage: number;
itemType: LibraryItem;
listCountQuery: UseSuspenseQueryOptions<number, Error, number, readonly unknown[]>; listCountQuery: UseSuspenseQueryOptions<number, Error, number, readonly unknown[]>;
listQueryFn: (args: { apiClientProps: any; query: any }) => Promise<{ items: unknown[] }>; listQueryFn: (args: { apiClientProps: any; query: any }) => Promise<{ items: unknown[] }>;
query: Record<string, any>; query: Record<string, any>;
@@ -30,6 +51,7 @@ export const useItemListPaginatedLoader = ({
currentPage, currentPage,
eventKey, eventKey,
itemsPerPage = 100, itemsPerPage = 100,
itemType,
listCountQuery, listCountQuery,
listQueryFn, listQueryFn,
query = {}, query = {},
@@ -73,7 +95,7 @@ export const useItemListPaginatedLoader = ({
return result.items; return result.items;
}, },
queryKey: queryKeys.albums.list(serverId, queryParams), queryKey: queryKeys[getQueryKeyName(itemType)].list(serverId, queryParams),
staleTime: 1000 * 15, staleTime: 1000 * 15,
}); });
@@ -84,7 +106,7 @@ export const useItemListPaginatedLoader = ({
const updateItems = useCallback( const updateItems = useCallback(
(indexes: number[], value: object) => { (indexes: number[], value: object) => {
return queryClient.setQueryData( return queryClient.setQueryData(
queryKeys.albums.list(serverId, queryParams), queryKeys[getQueryKeyName(itemType)].list(serverId, queryParams),
(prev: undefined | unknown[]) => { (prev: undefined | unknown[]) => {
if (!prev) { if (!prev) {
return prev; return prev;
@@ -107,7 +129,7 @@ export const useItemListPaginatedLoader = ({
}, },
); );
}, },
[queryClient, queryParams, serverId], [queryClient, queryParams, serverId, itemType],
); );
useEffect(() => { useEffect(() => {
@@ -44,6 +44,7 @@ export const AlbumListPaginatedGrid = forwardRef<any, AlbumListPaginatedGridProp
const { data, pageCount, totalItemCount } = useItemListPaginatedLoader({ const { data, pageCount, totalItemCount } = useItemListPaginatedLoader({
currentPage, currentPage,
itemsPerPage, itemsPerPage,
itemType: LibraryItem.ALBUM,
listCountQuery, listCountQuery,
listQueryFn, listQueryFn,
query, query,
@@ -50,6 +50,7 @@ export const AlbumListPaginatedTable = forwardRef<any, AlbumListPaginatedTablePr
const { data, pageCount, totalItemCount } = useItemListPaginatedLoader({ const { data, pageCount, totalItemCount } = useItemListPaginatedLoader({
currentPage, currentPage,
itemsPerPage, itemsPerPage,
itemType: LibraryItem.ALBUM,
listCountQuery, listCountQuery,
listQueryFn, listQueryFn,
query, query,
@@ -37,6 +37,7 @@ export const SongListPaginatedGrid = forwardRef<any, SongListPaginatedGridProps>
const { data, pageCount, totalItemCount } = useItemListPaginatedLoader({ const { data, pageCount, totalItemCount } = useItemListPaginatedLoader({
currentPage, currentPage,
itemsPerPage, itemsPerPage,
itemType: LibraryItem.SONG,
listCountQuery, listCountQuery,
listQueryFn, listQueryFn,
query, query,
@@ -45,6 +45,7 @@ export const SongListPaginatedTable = forwardRef<any, SongListPaginatedTableProp
const { data, pageCount, totalItemCount } = useItemListPaginatedLoader({ const { data, pageCount, totalItemCount } = useItemListPaginatedLoader({
currentPage, currentPage,
itemsPerPage, itemsPerPage,
itemType: LibraryItem.SONG,
listCountQuery, listCountQuery,
listQueryFn, listQueryFn,
query, query,