mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-09 20:29:36 +02:00
fix list loader query keys
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user