feat(label): migrate AlbumCard → AlbumCardLite
LabelView (2 callsites: New Releases + Critics' Picks horizontal rows) and LabelReleasesView (2 callsites: grouped + flat grids) swap to Discovery V2's AlbumCardLite. Same `makeArtistClickHandler` pattern as SearchView so the per-album artist id closes correctly into the zero-arg `onArtistClick`. Critics' Picks block in LabelView didn't pass the download/ isAlbumFullyDownloaded set originally — kept that gap (it's a read-only editorial section, no offline-cache UX expected). Same prop drops as the other Profile B migrations: `size`, `releaseDate` → parsed `releaseYear`, `onOpenContainingFolder`, `downloadStateVersion`. Renames: `onAddAlbumToPlaylist` → `onAddToPlaylist`, `onclick` → `onClick`. cc
This commit is contained in:
2 files changed
+37
-36
No files matched your search
@@ -3,7 +3,7 @@
|
||||
import { onMount } from 'svelte';
|
||||
import { t } from 'svelte-i18n';
|
||||
import { ArrowLeft, Search, X, Disc3, LoaderCircle, ArrowUpDown, Funnel, ChevronDown, Users } from 'lucide-svelte';
|
||||
import AlbumCard from '../AlbumCard.svelte';
|
||||
import AlbumCard from '$lib/discovery-v2/AlbumCardLite.svelte';
|
||||
import type { QobuzAlbum, LabelDetail, LabelPageData } from '$lib/types';
|
||||
import type { OfflineCacheStatus } from '$lib/stores/offlineCacheState';
|
||||
|
||||
@@ -234,6 +234,15 @@
|
||||
await Promise.all(albumList.map(album => loadAlbumOfflineCacheStatus(album.id)));
|
||||
}
|
||||
|
||||
/** AlbumCardLite's `onArtistClick: () => void` doesn't take args.
|
||||
* This helper closes over the album's artist id so the right one
|
||||
* is captured per iteration. Returns undefined when there's no
|
||||
* artist id or no parent handler. */
|
||||
function makeArtistClickHandler(artistId: number | undefined): (() => void) | undefined {
|
||||
if (artistId === undefined || !onArtistClick) return undefined;
|
||||
return () => onArtistClick(artistId);
|
||||
}
|
||||
|
||||
function isAlbumDownloaded(albumId: string): boolean {
|
||||
void downloadStateVersion;
|
||||
return albumOfflineCacheStatuses.get(albumId) || false;
|
||||
@@ -491,24 +500,20 @@
|
||||
artwork={album.image?.small || album.image?.thumbnail || ''}
|
||||
title={album.title}
|
||||
artist={album.artist?.name || 'Unknown Artist'}
|
||||
artistId={album.artist?.id}
|
||||
onArtistClick={onArtistClick}
|
||||
genre={getGenreLabel(album)}
|
||||
releaseDate={album.release_date_original}
|
||||
releaseYear={Number(album.release_date_original?.slice(0, 4)) || undefined}
|
||||
quality={getQualityLabel(album)}
|
||||
size="large"
|
||||
onclick={() => onAlbumClick?.(album.id)}
|
||||
isAlbumFullyDownloaded={isAlbumDownloaded(album.id)}
|
||||
onArtistClick={makeArtistClickHandler(album.artist?.id)}
|
||||
onClick={() => onAlbumClick?.(album.id)}
|
||||
onPlay={onAlbumPlay ? () => onAlbumPlay(album.id) : undefined}
|
||||
onPlayNext={onAlbumPlayNext ? () => onAlbumPlayNext(album.id) : undefined}
|
||||
onPlayLater={onAlbumPlayLater ? () => onAlbumPlayLater(album.id) : undefined}
|
||||
onAddAlbumToPlaylist={onAddAlbumToPlaylist ? () => onAddAlbumToPlaylist(album.id) : undefined}
|
||||
onAddToPlaylist={onAddAlbumToPlaylist ? () => onAddAlbumToPlaylist(album.id) : undefined}
|
||||
onShareQobuz={onAlbumShareQobuz ? () => onAlbumShareQobuz(album.id) : undefined}
|
||||
onShareSonglink={onAlbumShareSonglink ? () => onAlbumShareSonglink(album.id) : undefined}
|
||||
onDownload={onAlbumDownload ? () => onAlbumDownload(album.id) : undefined}
|
||||
isAlbumFullyDownloaded={isAlbumDownloaded(album.id)}
|
||||
onOpenContainingFolder={onOpenAlbumFolder ? () => onOpenAlbumFolder(album.id) : undefined}
|
||||
onReDownloadAlbum={onReDownloadAlbum ? () => onReDownloadAlbum(album.id) : undefined}
|
||||
{downloadStateVersion}
|
||||
/>
|
||||
{/each}
|
||||
</div>
|
||||
@@ -522,24 +527,20 @@
|
||||
artwork={album.image?.small || album.image?.thumbnail || ''}
|
||||
title={album.title}
|
||||
artist={album.artist?.name || 'Unknown Artist'}
|
||||
artistId={album.artist?.id}
|
||||
onArtistClick={onArtistClick}
|
||||
genre={getGenreLabel(album)}
|
||||
releaseDate={album.release_date_original}
|
||||
releaseYear={Number(album.release_date_original?.slice(0, 4)) || undefined}
|
||||
quality={getQualityLabel(album)}
|
||||
size="large"
|
||||
onclick={() => onAlbumClick?.(album.id)}
|
||||
isAlbumFullyDownloaded={isAlbumDownloaded(album.id)}
|
||||
onArtistClick={makeArtistClickHandler(album.artist?.id)}
|
||||
onClick={() => onAlbumClick?.(album.id)}
|
||||
onPlay={onAlbumPlay ? () => onAlbumPlay(album.id) : undefined}
|
||||
onPlayNext={onAlbumPlayNext ? () => onAlbumPlayNext(album.id) : undefined}
|
||||
onPlayLater={onAlbumPlayLater ? () => onAlbumPlayLater(album.id) : undefined}
|
||||
onAddAlbumToPlaylist={onAddAlbumToPlaylist ? () => onAddAlbumToPlaylist(album.id) : undefined}
|
||||
onAddToPlaylist={onAddAlbumToPlaylist ? () => onAddAlbumToPlaylist(album.id) : undefined}
|
||||
onShareQobuz={onAlbumShareQobuz ? () => onAlbumShareQobuz(album.id) : undefined}
|
||||
onShareSonglink={onAlbumShareSonglink ? () => onAlbumShareSonglink(album.id) : undefined}
|
||||
onDownload={onAlbumDownload ? () => onAlbumDownload(album.id) : undefined}
|
||||
isAlbumFullyDownloaded={isAlbumDownloaded(album.id)}
|
||||
onOpenContainingFolder={onOpenAlbumFolder ? () => onOpenAlbumFolder(album.id) : undefined}
|
||||
onReDownloadAlbum={onReDownloadAlbum ? () => onReDownloadAlbum(album.id) : undefined}
|
||||
{downloadStateVersion}
|
||||
/>
|
||||
{/each}
|
||||
</div>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
import BulkActionBar from '../BulkActionBar.svelte';
|
||||
import { openAddToMixtape } from '$lib/stores/addToMixtapeModalStore';
|
||||
import { t } from '$lib/i18n';
|
||||
import AlbumCard from '../AlbumCard.svelte';
|
||||
import AlbumCard from '$lib/discovery-v2/AlbumCardLite.svelte';
|
||||
import HorizontalScrollRow from '../HorizontalScrollRow.svelte';
|
||||
import QobuzPlaylistCard from '../QobuzPlaylistCard.svelte';
|
||||
import TrackMenu from '../TrackMenu.svelte';
|
||||
@@ -699,6 +699,13 @@
|
||||
await Promise.all(albumList.map(album => loadAlbumOfflineCacheStatus(album.id)));
|
||||
}
|
||||
|
||||
/** Bind an album's artistId into a no-arg callback for
|
||||
* AlbumCardLite's `onArtistClick: () => void`. */
|
||||
function makeArtistClickHandler(artistId: number | undefined): (() => void) | undefined {
|
||||
if (artistId === undefined || !onArtistClick) return undefined;
|
||||
return () => onArtistClick(artistId);
|
||||
}
|
||||
|
||||
function isAlbumDownloaded(albumId: string): boolean {
|
||||
void downloadStateVersion;
|
||||
return albumOfflineCacheStatuses.get(albumId) || false;
|
||||
@@ -1164,22 +1171,18 @@
|
||||
artwork={album.image?.small || album.image?.thumbnail || ''}
|
||||
title={album.title}
|
||||
artist={album.artist?.name || ''}
|
||||
artistId={album.artist?.id}
|
||||
onArtistClick={onArtistClick}
|
||||
releaseDate={album.release_date_original}
|
||||
size="large"
|
||||
onclick={() => onAlbumClick?.(album.id)}
|
||||
releaseYear={Number(album.release_date_original?.slice(0, 4)) || undefined}
|
||||
isAlbumFullyDownloaded={isAlbumDownloaded(album.id)}
|
||||
onArtistClick={makeArtistClickHandler(album.artist?.id)}
|
||||
onClick={() => onAlbumClick?.(album.id)}
|
||||
onPlay={onAlbumPlay ? () => onAlbumPlay(album.id) : undefined}
|
||||
onPlayNext={onAlbumPlayNext ? () => onAlbumPlayNext(album.id) : undefined}
|
||||
onPlayLater={onAlbumPlayLater ? () => onAlbumPlayLater(album.id) : undefined}
|
||||
onAddAlbumToPlaylist={onAddAlbumToPlaylist ? () => onAddAlbumToPlaylist(album.id) : undefined}
|
||||
onAddToPlaylist={onAddAlbumToPlaylist ? () => onAddAlbumToPlaylist(album.id) : undefined}
|
||||
onShareQobuz={onAlbumShareQobuz ? () => onAlbumShareQobuz(album.id) : undefined}
|
||||
onShareSonglink={onAlbumShareSonglink ? () => onAlbumShareSonglink(album.id) : undefined}
|
||||
onDownload={onAlbumDownload ? () => onAlbumDownload(album.id) : undefined}
|
||||
isAlbumFullyDownloaded={isAlbumDownloaded(album.id)}
|
||||
onOpenContainingFolder={onOpenAlbumFolder ? () => onOpenAlbumFolder(album.id) : undefined}
|
||||
onReDownloadAlbum={onReDownloadAlbum ? () => onReDownloadAlbum(album.id) : undefined}
|
||||
{downloadStateVersion}
|
||||
/>
|
||||
{/each}
|
||||
<div class="spacer"></div>
|
||||
@@ -1199,18 +1202,15 @@
|
||||
artwork={album.image?.small || album.image?.thumbnail || ''}
|
||||
title={album.title}
|
||||
artist={album.artist?.name || ''}
|
||||
artistId={album.artist?.id}
|
||||
onArtistClick={onArtistClick}
|
||||
releaseDate={album.release_date_original}
|
||||
size="large"
|
||||
onclick={() => onAlbumClick?.(album.id)}
|
||||
releaseYear={Number(album.release_date_original?.slice(0, 4)) || undefined}
|
||||
onArtistClick={makeArtistClickHandler(album.artist?.id)}
|
||||
onClick={() => onAlbumClick?.(album.id)}
|
||||
onPlay={onAlbumPlay ? () => onAlbumPlay(album.id) : undefined}
|
||||
onPlayNext={onAlbumPlayNext ? () => onAlbumPlayNext(album.id) : undefined}
|
||||
onPlayLater={onAlbumPlayLater ? () => onAlbumPlayLater(album.id) : undefined}
|
||||
onAddAlbumToPlaylist={onAddAlbumToPlaylist ? () => onAddAlbumToPlaylist(album.id) : undefined}
|
||||
onAddToPlaylist={onAddAlbumToPlaylist ? () => onAddAlbumToPlaylist(album.id) : undefined}
|
||||
onShareQobuz={onAlbumShareQobuz ? () => onAlbumShareQobuz(album.id) : undefined}
|
||||
onShareSonglink={onAlbumShareSonglink ? () => onAlbumShareSonglink(album.id) : undefined}
|
||||
{downloadStateVersion}
|
||||
/>
|
||||
{/each}
|
||||
<div class="spacer"></div>
|
||||
|
||||
Reference in new issue
Block a user