import React, { memo } from 'react'; import { useNavigate } from 'react-router-dom'; import { Play, HardDriveDownload, Check } from 'lucide-react'; import { SubsonicAlbum, buildCoverArtUrl, coverArtCacheKey } from '../api/subsonic'; import { usePlayerStore } from '../store/playerStore'; import { useOfflineStore } from '../store/offlineStore'; import { useAuthStore } from '../store/authStore'; import CachedImage from './CachedImage'; import { playAlbum } from '../utils/playAlbum'; import { useDragDrop } from '../contexts/DragDropContext'; interface AlbumCardProps { album: SubsonicAlbum; selected?: boolean; selectionMode?: boolean; onToggleSelect?: (id: string) => void; } function AlbumCard({ album, selected, selectionMode, onToggleSelect }: AlbumCardProps) { const navigate = useNavigate(); const openContextMenu = usePlayerStore(s => s.openContextMenu); const serverId = useAuthStore(s => s.activeServerId ?? ''); const isOffline = useOfflineStore(s => { const meta = s.albums[`${serverId}:${album.id}`]; if (!meta || meta.trackIds.length === 0) return false; return meta.trackIds.every(tid => !!s.tracks[`${serverId}:${tid}`]); }); const coverUrl = album.coverArt ? buildCoverArtUrl(album.coverArt, 300) : ''; const psyDrag = useDragDrop(); const handleClick = () => { if (selectionMode) { onToggleSelect?.(album.id); return; } navigate(`/album/${album.id}`); }; return (
{album.name}
{ if (album.artistId) { e.stopPropagation(); navigate(`/artist/${album.artistId}`); } }} >{album.artist}
{album.year &&{album.year}
}