enable refresh for all home carousels, and fix favorite/rating on home

This commit is contained in:
Kendall Garner
2026-01-24 14:54:29 -08:00
parent 974313c30b
commit 6e4cd6912b
3 changed files with 46 additions and 4 deletions
@@ -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,