mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-13 20:10:07 +02:00
handle favorite/update in similarArtists
This commit is contained in:
@@ -279,11 +279,11 @@ export const SubsonicController: InternalControllerEndpoint = {
|
||||
}
|
||||
|
||||
return {
|
||||
...ssNormalize.albumArtist(artist, apiClientProps.server, 300),
|
||||
...ssNormalize.albumArtist(artist, apiClientProps.server),
|
||||
albums: artist.album?.map((album) => ssNormalize.album(album, apiClientProps.server)),
|
||||
similarArtists:
|
||||
artistInfo?.similarArtist?.map((artist) =>
|
||||
ssNormalize.albumArtist(artist, apiClientProps.server, 300),
|
||||
ssNormalize.albumArtist(artist, apiClientProps.server),
|
||||
) || null,
|
||||
};
|
||||
},
|
||||
@@ -303,7 +303,7 @@ export const SubsonicController: InternalControllerEndpoint = {
|
||||
const artists = (res.body.artists?.index || []).flatMap((index) => index.artist);
|
||||
|
||||
let results = artists.map((artist) =>
|
||||
ssNormalize.albumArtist(artist, apiClientProps.server, 300),
|
||||
ssNormalize.albumArtist(artist, apiClientProps.server),
|
||||
);
|
||||
|
||||
if (query.searchTerm) {
|
||||
@@ -488,7 +488,7 @@ export const SubsonicController: InternalControllerEndpoint = {
|
||||
return {
|
||||
items:
|
||||
res.body.albumList2.album?.map((album) =>
|
||||
ssNormalize.album(album, apiClientProps.server, 300),
|
||||
ssNormalize.album(album, apiClientProps.server),
|
||||
) || [],
|
||||
startIndex: query.startIndex,
|
||||
totalRecordCount: null,
|
||||
@@ -658,7 +658,7 @@ export const SubsonicController: InternalControllerEndpoint = {
|
||||
}
|
||||
|
||||
let results = artists.map((artist) =>
|
||||
ssNormalize.albumArtist(artist, apiClientProps.server, 300),
|
||||
ssNormalize.albumArtist(artist, apiClientProps.server),
|
||||
);
|
||||
|
||||
if (query.searchTerm) {
|
||||
|
||||
@@ -506,8 +506,8 @@ const AlbumArtistMetadataSimilarArtists = ({
|
||||
playCount: null,
|
||||
similarArtists: null,
|
||||
songCount: null,
|
||||
userFavorite: false,
|
||||
userRating: null,
|
||||
userFavorite: relatedArtist.userFavorite,
|
||||
userRating: relatedArtist.userRating,
|
||||
}),
|
||||
);
|
||||
}, [detailQuery.data?.similarArtists, server?.type, serverId]);
|
||||
|
||||
@@ -215,13 +215,36 @@ export const applyFavoriteOptimisticUpdates = (
|
||||
queryClient.setQueryData(
|
||||
queryKey,
|
||||
(prev: AlbumArtistDetailResponse | undefined) => {
|
||||
if (prev && itemIdSet.has(prev.id)) {
|
||||
if (!prev) {
|
||||
return prev;
|
||||
}
|
||||
|
||||
// Update the main artist if it matches
|
||||
if (itemIdSet.has(prev.id)) {
|
||||
return {
|
||||
...prev,
|
||||
userFavorite: isFavorite,
|
||||
};
|
||||
}
|
||||
|
||||
// Update similar artists if any match
|
||||
if (prev.similarArtists && prev.similarArtists.length > 0) {
|
||||
const hasMatchingSimilarArtist = prev.similarArtists.some(
|
||||
(artist) => itemIdSet.has(artist.id),
|
||||
);
|
||||
|
||||
if (hasMatchingSimilarArtist) {
|
||||
return {
|
||||
...prev,
|
||||
similarArtists: prev.similarArtists.map((artist) =>
|
||||
itemIdSet.has(artist.id)
|
||||
? { ...artist, userFavorite: isFavorite }
|
||||
: artist,
|
||||
),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
return prev;
|
||||
},
|
||||
);
|
||||
|
||||
@@ -184,9 +184,33 @@ export const applyRatingOptimisticUpdates = (
|
||||
queryClient.setQueryData(
|
||||
queryKey,
|
||||
(prev: AlbumArtistDetailResponse | undefined) => {
|
||||
if (prev && itemIdSet.has(prev.id)) {
|
||||
if (!prev) {
|
||||
return prev;
|
||||
}
|
||||
|
||||
// Update the main artist if it matches
|
||||
if (itemIdSet.has(prev.id)) {
|
||||
return { ...prev, userRating: rating };
|
||||
}
|
||||
|
||||
// Update similar artists if any match
|
||||
if (prev.similarArtists && prev.similarArtists.length > 0) {
|
||||
const hasMatchingSimilarArtist = prev.similarArtists.some(
|
||||
(artist) => itemIdSet.has(artist.id),
|
||||
);
|
||||
|
||||
if (hasMatchingSimilarArtist) {
|
||||
return {
|
||||
...prev,
|
||||
similarArtists: prev.similarArtists.map((artist) =>
|
||||
itemIdSet.has(artist.id)
|
||||
? { ...artist, userRating: rating }
|
||||
: artist,
|
||||
),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
return prev;
|
||||
},
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user