import { Row } from 'modern-sk'; import { TrackContextMenu } from './TrackContextMenu'; import { AvailabilityBadge } from './AvailabilityBadge'; import { formatDuration } from '../../lib/format'; import { useAppDispatch, useAppSelector } from '../../hooks/useAppDispatch'; import { play } from '../../store/slices/player'; import type { Track } from '../../api/types'; import { getCoverUrl } from '../../api/endpoints/streaming'; interface Props { track: Track; index?: number; showAlbum?: boolean; onAddToPlaylist?: (track: Track) => void; onEditMetadata?: (track: Track) => void; onDelete?: (track: Track) => void; } export function TrackRow({ track, index, showAlbum = false, onAddToPlaylist, onEditMetadata, onDelete, }: Props) { const dispatch = useAppDispatch(); const currentTrackId = useAppSelector((s) => s.player.currentTrackId); const isPlaying = useAppSelector((s) => s.player.isPlaying); const isActive = currentTrackId === track.id; const artUrl = getCoverUrl(track.albumArtUrl); return ( dispatch(play(track.id))} style={{ display: 'grid', gridTemplateColumns: '2rem 2.5rem 1fr auto auto', gap: '0.75rem', alignItems: 'center', padding: '0.375rem 0.75rem', cursor: 'default', }} > {isActive && isPlaying ? '▶' : index !== undefined ? index + 1 : ''} {artUrl ? ( ) : (
)}
{track.title}
{track.artistName} {showAlbum && ` · ${track.albumTitle}`}
{formatDuration(track.durationMs)}
); }