import { Link, useParams } from '@tanstack/react-router'; import { useEffect, useState } from 'react'; import apiClient from '../lib/api-client'; import { useQueue } from '../contexts/queue-context'; import type { TrackType, ImageType } from '../types/spotify'; interface SimplifiedAlbum { id: string; name: string; images: ImageType[]; album_type: string; } interface TrackDetails extends TrackType { album: SimplifiedAlbum; } export const Track = () => { const { trackId } = useParams({ from: '/track/$trackId' }); const [track, setTrack] = useState(null); const [error, setError] = useState(null); const { addItem, toggleVisibility } = useQueue(); useEffect(() => { const fetchTrack = async () => { if (!trackId) return; try { const response = await apiClient.get(`/track/info?id=${trackId}`); setTrack(response.data); } catch (err) { setError('Failed to load track details.'); console.error(err); } }; fetchTrack(); }, [trackId]); const handleDownload = () => { if (!track) return; addItem({ id: track.id, type: 'track', name: track.name }); toggleVisibility(); }; if (error) return
{error}
; if (!track) return
Loading...
; const minutes = Math.floor(track.duration_ms / 60000); const seconds = ((track.duration_ms % 60000) / 1000).toFixed(0).padStart(2, '0'); return (
{track.album.name}

{track.name}

By{' '} {track.artists.map((artist, index) => ( {artist.name} {index < track.artists.length - 1 && ', '} ))}

From the {track.album.album_type}{' '} {track.album.name}

{minutes}:{seconds} {track.explicit && EXPLICIT}
); };