import { useState, useMemo } from 'react'; import { useParams, useNavigate, Link } from 'react-router-dom'; import { useQuery } from '@tanstack/react-query'; import { motion } from 'framer-motion'; import { Clock, User, Music, Mic2, Play, ExternalLink, ChevronRight } from 'lucide-react'; import { getTrack } from '../../../api/public/albums'; import { formatDate } from '../../../utils/date'; // PC 곡 상세 페이지 function TrackDetail() { const { name: albumName, trackTitle } = useParams(); const navigate = useNavigate(); // useQuery로 트랙 데이터 로드 const { data: track, isLoading: loading, error } = useQuery({ queryKey: ['track', albumName, trackTitle], queryFn: () => getTrack(albumName, trackTitle), enabled: !!albumName && !!trackTitle, }); if (loading) { return (
); } if (error || !track) { return (

트랙을 찾을 수 없습니다.

); } return (
{/* 브레드크럼 네비게이션 */}
앨범 / {track.album?.title} / {track.title}
{/* 트랙 정보 헤더 */}
{/* 앨범 커버 */} navigate(`/album/${encodeURIComponent(track.album?.title || albumName)}`)} > {track.album?.title} {/* 트랙 정보 */}
{track.is_title_track === 1 && ( TITLE )} Track {String(track.track_number).padStart(2, '0')}

{track.title}

{/* 메타 정보 */}
{track.album?.title} {track.duration && (
{track.duration}
)}
{/* 뮤직비디오 링크 */} {track.music_video_url && ( 뮤직비디오 보기 )}
{/* 크레딧 & 가사 영역 */}
{/* 왼쪽: 크레딧 + 수록곡 */}
{/* 크레딧 */} {(track.lyricist || track.composer || track.arranger) && (

크레딧

{track.lyricist && (

작사

{track.lyricist}

)} {track.composer && (

작곡

{track.composer}

)} {track.arranger && (

편곡

{track.arranger}

)}
)} {/* 수록곡 */}

수록곡

{track.otherTracks?.map((t) => ( {String(t.track_number).padStart(2, '0')} {t.title} {t.is_title_track === 1 && ( T )} ))}
{/* 오른쪽: 가사 */}

가사

{track.lyrics ? (
{track.lyrics}
) : (

가사 정보가 없습니다

)}
); } export default TrackDetail;