mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-07 04:20:12 +02:00
enable refresh for all home carousels, and fix favorite/rating on home
This commit is contained in:
@@ -46,6 +46,7 @@ const HomeRoute = () => {
|
||||
|
||||
const carousels = {
|
||||
[HomeItem.MOST_PLAYED]: {
|
||||
enableRefresh: true,
|
||||
itemType: isJellyfin ? LibraryItem.SONG : LibraryItem.ALBUM,
|
||||
sortBy: isJellyfin ? SongListSort.PLAY_COUNT : AlbumListSort.PLAY_COUNT,
|
||||
sortOrder: SortOrder.DESC,
|
||||
@@ -59,18 +60,21 @@ const HomeRoute = () => {
|
||||
title: t('page.home.explore', { postProcess: 'sentenceCase' }),
|
||||
},
|
||||
[HomeItem.RECENTLY_ADDED]: {
|
||||
enableRefresh: true,
|
||||
itemType: LibraryItem.ALBUM,
|
||||
sortBy: AlbumListSort.RECENTLY_ADDED,
|
||||
sortOrder: SortOrder.DESC,
|
||||
title: t('page.home.newlyAdded', { postProcess: 'sentenceCase' }),
|
||||
},
|
||||
[HomeItem.RECENTLY_PLAYED]: {
|
||||
enableRefresh: true,
|
||||
itemType: isJellyfin ? LibraryItem.SONG : LibraryItem.ALBUM,
|
||||
sortBy: isJellyfin ? SongListSort.RECENTLY_PLAYED : AlbumListSort.RECENTLY_PLAYED,
|
||||
sortOrder: SortOrder.DESC,
|
||||
title: t('page.home.recentlyPlayed', { postProcess: 'sentenceCase' }),
|
||||
},
|
||||
[HomeItem.RECENTLY_RELEASED]: {
|
||||
enableRefresh: true,
|
||||
itemType: LibraryItem.ALBUM,
|
||||
sortBy: AlbumListSort.RELEASE_DATE,
|
||||
sortOrder: SortOrder.DESC,
|
||||
@@ -142,7 +146,7 @@ const HomeRoute = () => {
|
||||
containerQuery={containerQuery}
|
||||
enableRefresh={carousel.enableRefresh}
|
||||
key={`carousel-${carousel.uniqueId}`}
|
||||
queryKey={['home', carousel.uniqueId] as const}
|
||||
queryKey={['home', 'album', carousel.uniqueId] as const}
|
||||
rowCount={1}
|
||||
sortBy={carousel.sortBy as AlbumListSort}
|
||||
sortOrder={carousel.sortOrder}
|
||||
@@ -157,7 +161,7 @@ const HomeRoute = () => {
|
||||
containerQuery={containerQuery}
|
||||
enableRefresh={carousel.enableRefresh}
|
||||
key={`carousel-${carousel.uniqueId}`}
|
||||
queryKey={['home', carousel.uniqueId] as const}
|
||||
queryKey={['home', 'song', carousel.uniqueId] as const}
|
||||
rowCount={1}
|
||||
sortBy={carousel.sortBy as SongListSort}
|
||||
sortOrder={carousel.sortOrder}
|
||||
|
||||
@@ -15,6 +15,7 @@ import {
|
||||
PlaylistSongListResponse,
|
||||
Song,
|
||||
SongDetailResponse,
|
||||
SongListResponse,
|
||||
TopSongListResponse,
|
||||
} from '/@/shared/types/domain-types';
|
||||
|
||||
@@ -155,7 +156,12 @@ export const applyFavoriteOptimisticUpdates = (
|
||||
queryKey: infiniteListQueryKey,
|
||||
});
|
||||
|
||||
infiniteListQueries.forEach(([queryKey, data]) => {
|
||||
const homeQueries = queryClient.getQueriesData({
|
||||
exact: false,
|
||||
queryKey: ['home', 'album'],
|
||||
});
|
||||
|
||||
infiniteListQueries.concat(homeQueries).forEach(([queryKey, data]) => {
|
||||
if (data) {
|
||||
pendingUpdates.push({
|
||||
previousData: data,
|
||||
@@ -538,6 +544,33 @@ export const applyFavoriteOptimisticUpdates = (
|
||||
}
|
||||
});
|
||||
|
||||
const homeQueries = queryClient.getQueriesData({
|
||||
exact: false,
|
||||
queryKey: ['home', 'song'],
|
||||
});
|
||||
|
||||
homeQueries.concat(homeQueries).forEach(([queryKey, data]) => {
|
||||
if (data) {
|
||||
pendingUpdates.push({
|
||||
previousData: data,
|
||||
queryKey,
|
||||
updater: (
|
||||
current:
|
||||
| undefined
|
||||
| { pageParams: string[]; pages: SongListResponse[] },
|
||||
) => {
|
||||
if (!current) return current;
|
||||
const updatedPages = updateItemsInPages<Song, SongListResponse>(
|
||||
current.pages.filter((p): p is SongListResponse => !!p),
|
||||
itemIdSet,
|
||||
(item) => createFavoriteUpdater<Song>(item),
|
||||
);
|
||||
return updatedPages ? { ...current, pages: updatedPages } : current;
|
||||
},
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -149,7 +149,12 @@ export const applyRatingOptimisticUpdates = (
|
||||
queryKey: infiniteListQueryKey,
|
||||
});
|
||||
|
||||
infiniteListQueries.forEach(([queryKey, data]) => {
|
||||
const homeQueries = queryClient.getQueriesData({
|
||||
exact: false,
|
||||
queryKey: ['home', 'album'],
|
||||
});
|
||||
|
||||
infiniteListQueries.concat(homeQueries).forEach(([queryKey, data]) => {
|
||||
if (data) {
|
||||
pendingUpdates.push({
|
||||
previousData: data,
|
||||
|
||||
Reference in New Issue
Block a user