"use client"; import Image from "next/image"; import { SimilarArtist } from "../types"; import { Music, Library } from "lucide-react"; import { api } from "@/lib/api"; interface SimilarArtistsProps { similarArtists: SimilarArtist[]; onNavigate: (artistId: string) => void; } export function SimilarArtists({ similarArtists, onNavigate, }: SimilarArtistsProps) { if (!similarArtists || similarArtists.length === 0) { return null; } return (

Fans Also Like

{similarArtists.map((artist, index) => { const rawImage = artist.coverArt || artist.image; const imageUrl = rawImage ? api.getCoverArtUrl(rawImage, 300) : null; const matchPercentage = artist.weight ? Math.round(artist.weight * 100) : null; // For library artists, use the library ID; otherwise use mbid or name const navigationId = artist.inLibrary ? artist.id : artist.mbid || artist.id; return (
onNavigate(navigationId)} onKeyDown={(e) => { if (e.key === "Enter") { e.preventDefault(); onNavigate(navigationId); } }} className="bg-transparent hover:bg-white/5 transition-all p-3 rounded-md cursor-pointer group" > {/* Circular Artist Image */}
{imageUrl ? ( {artist.name} ) : (
)} {/* Library indicator badge */} {artist.inLibrary && (
)}
{/* Artist Name */}

{artist.name}

{/* Album Count - show owned count if in library */}

{artist.ownedAlbumCount && artist.ownedAlbumCount > 0 ? `${artist.ownedAlbumCount} album${ artist.ownedAlbumCount > 1 ? "s" : "" } in library` : "Artist"}

{/* Match Percentage */} {matchPercentage !== null && (

{matchPercentage}% match

)}
); })}
); }