"use client"; import { Play, Pause } from "lucide-react"; import Image from "next/image"; import Link from "next/link"; import { useAudio } from "@/lib/audio-context"; import { api } from "@/lib/api"; import { cn } from "@/utils/cn"; import { formatTime } from "@/utils/formatTime"; import type { LibraryTrack } from "../types"; interface LibraryTracksListProps { tracks: LibraryTrack[]; } export function LibraryTracksList({ tracks }: LibraryTracksListProps) { const { currentTrack, isPlaying, playTracks, pause, resume } = useAudio(); if (!tracks || tracks.length === 0) { return null; } const handlePlayTrack = (track: LibraryTrack, index: number) => { // Format tracks for playback const formattedTracks = tracks.map((t) => ({ id: t.id, title: t.title, duration: t.duration, artist: { id: t.album.artist.id, name: t.album.artist.name, }, album: { id: t.album.id, title: t.album.title, coverArt: t.album.coverUrl, }, })); if (currentTrack?.id === track.id) { // Toggle play/pause if clicking the same track if (isPlaying) { pause(); } else { resume(); } } else { // Play from this track playTracks(formattedTracks, index); } }; return (
{tracks.slice(0, 10).map((track, index) => { const isCurrentTrack = currentTrack?.id === track.id; const isPlayingThis = isCurrentTrack && isPlaying; const coverUrl = track.album.coverUrl ? api.getCoverArtUrl(track.album.coverUrl, 48) : null; return (
{/* Play Button / Track Number */} {/* Cover Art */}
{coverUrl ? ( {track.album.title} ) : (
)}
{/* Track Info */}

{track.title}

e.stopPropagation()} > {track.album.artist.name} e.stopPropagation()} > {track.album.title}

{/* Duration */} {formatTime(track.duration)}
); })}
); }