mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-08 13:00:13 +02:00
decouple AlbumArtistInfo from AlbumArtistDetail (#1809)
This commit is contained in:
@@ -6,6 +6,7 @@ import {
|
||||
Album,
|
||||
AlbumArtist,
|
||||
AlbumArtistDetailResponse,
|
||||
AlbumArtistInfoResponse,
|
||||
AlbumArtistListResponse,
|
||||
AlbumDetailResponse,
|
||||
AlbumListResponse,
|
||||
@@ -240,29 +241,44 @@ export const applyFavoriteOptimisticUpdates = (
|
||||
return { ...prev, userFavorite: isFavorite };
|
||||
}
|
||||
|
||||
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;
|
||||
},
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
const infoQueryKey = queryKeys.albumArtists.info(variables.apiClientProps.serverId);
|
||||
const infoQueries = queryClient.getQueriesData({
|
||||
exact: false,
|
||||
queryKey: infoQueryKey,
|
||||
});
|
||||
|
||||
infoQueries.forEach(([queryKey, data]) => {
|
||||
if (data) {
|
||||
pendingUpdates.push({
|
||||
previousData: data,
|
||||
queryKey,
|
||||
updater: (prev: AlbumArtistInfoResponse | null | undefined) => {
|
||||
if (!prev?.similarArtists?.length) return prev;
|
||||
|
||||
const hasMatching = prev.similarArtists.some((artist) =>
|
||||
itemIdSet.has(artist.id),
|
||||
);
|
||||
if (!hasMatching) return prev;
|
||||
|
||||
return {
|
||||
...prev,
|
||||
similarArtists: prev.similarArtists.map((artist) =>
|
||||
itemIdSet.has(artist.id)
|
||||
? { ...artist, userFavorite: isFavorite }
|
||||
: artist,
|
||||
),
|
||||
};
|
||||
},
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
const listQueryKey = queryKeys.albumArtists.list(variables.apiClientProps.serverId);
|
||||
const listQueries = queryClient.getQueriesData({
|
||||
exact: false,
|
||||
@@ -654,6 +670,10 @@ export const applyFavoriteOptimisticUpdatesDeferred = (
|
||||
queryKeys.albumArtists.detail(variables.apiClientProps.serverId),
|
||||
'album-artist-detail',
|
||||
);
|
||||
collectQueries(
|
||||
queryKeys.albumArtists.info(variables.apiClientProps.serverId),
|
||||
'album-artist-info',
|
||||
);
|
||||
collectQueries(
|
||||
queryKeys.albumArtists.list(variables.apiClientProps.serverId),
|
||||
'album-artist-list',
|
||||
|
||||
@@ -7,6 +7,7 @@ import {
|
||||
Album,
|
||||
AlbumArtist,
|
||||
AlbumArtistDetailResponse,
|
||||
AlbumArtistInfoResponse,
|
||||
AlbumArtistListResponse,
|
||||
AlbumDetailResponse,
|
||||
AlbumListResponse,
|
||||
@@ -235,29 +236,44 @@ export const applyRatingOptimisticUpdates = (
|
||||
return { ...prev, userRating: rating };
|
||||
}
|
||||
|
||||
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;
|
||||
},
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
const infoQueryKey = queryKeys.albumArtists.info(variables.apiClientProps.serverId);
|
||||
const infoQueries = queryClient.getQueriesData({
|
||||
exact: false,
|
||||
queryKey: infoQueryKey,
|
||||
});
|
||||
|
||||
infoQueries.forEach(([queryKey, data]) => {
|
||||
if (data) {
|
||||
pendingUpdates.push({
|
||||
previousData: data,
|
||||
queryKey,
|
||||
updater: (prev: AlbumArtistInfoResponse | null | undefined) => {
|
||||
if (!prev?.similarArtists?.length) return prev;
|
||||
|
||||
const hasMatching = prev.similarArtists.some((artist) =>
|
||||
itemIdSet.has(artist.id),
|
||||
);
|
||||
if (!hasMatching) return prev;
|
||||
|
||||
return {
|
||||
...prev,
|
||||
similarArtists: prev.similarArtists.map((artist) =>
|
||||
itemIdSet.has(artist.id)
|
||||
? { ...artist, userRating: rating }
|
||||
: artist,
|
||||
),
|
||||
};
|
||||
},
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
const listQueryKey = queryKeys.albumArtists.list(variables.apiClientProps.serverId);
|
||||
const listQueries = queryClient.getQueriesData({
|
||||
exact: false,
|
||||
@@ -626,6 +642,10 @@ export const applyRatingOptimisticUpdatesDeferred = (
|
||||
queryKeys.albumArtists.detail(variables.apiClientProps.serverId),
|
||||
'album-artist-detail',
|
||||
);
|
||||
collectQueries(
|
||||
queryKeys.albumArtists.info(variables.apiClientProps.serverId),
|
||||
'album-artist-info',
|
||||
);
|
||||
collectQueries(
|
||||
queryKeys.albumArtists.list(variables.apiClientProps.serverId),
|
||||
'album-artist-list',
|
||||
@@ -695,19 +715,6 @@ export const applyRatingOptimisticUpdatesDeferred = (
|
||||
if (itemIdSet.has(prev.id)) {
|
||||
return { ...prev, userRating: rating };
|
||||
}
|
||||
if (prev.similarArtists) {
|
||||
const hasMatch = prev.similarArtists.some((a: any) =>
|
||||
itemIdSet.has(a.id),
|
||||
);
|
||||
if (hasMatch) {
|
||||
return {
|
||||
...prev,
|
||||
similarArtists: prev.similarArtists.map((a: any) =>
|
||||
itemIdSet.has(a.id) ? { ...a, userRating: rating } : a,
|
||||
),
|
||||
};
|
||||
}
|
||||
}
|
||||
return prev;
|
||||
}
|
||||
case 'album-artist-infinite-list':
|
||||
@@ -732,6 +739,17 @@ export const applyRatingOptimisticUpdatesDeferred = (
|
||||
}
|
||||
return prev;
|
||||
}
|
||||
case 'album-artist-info': {
|
||||
if (!prev?.similarArtists?.length) return prev;
|
||||
const hasMatch = prev.similarArtists.some((a: any) => itemIdSet.has(a.id));
|
||||
if (!hasMatch) return prev;
|
||||
return {
|
||||
...prev,
|
||||
similarArtists: prev.similarArtists.map((a: any) =>
|
||||
itemIdSet.has(a.id) ? { ...a, userRating: rating } : a,
|
||||
),
|
||||
};
|
||||
}
|
||||
case 'album-artist-list':
|
||||
case 'album-list':
|
||||
case 'artist-list':
|
||||
|
||||
Reference in New Issue
Block a user