import { Button } from '@/components/ui/button' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { formatDuration } from '@/lib/format' import { getProxiedCoverUrl } from '@/lib/cover' import { cn } from '@/lib/utils' import type { Track } from '@music-together/shared' import { ArrowUpToLine, Check, Music2, Plus } from 'lucide-react' import { memo } from 'react' export interface TrackListItemProps { track: Track index: number isAdded: boolean onAdd: (track: Track) => void onInsertAfterCurrent?: (track: Track) => void onArtistClick?: (artist: string) => void style?: React.CSSProperties className?: string } export const TrackListItem = memo(function TrackListItem({ track, index, isAdded, onAdd, onInsertAfterCurrent, onArtistClick, style, className, }: TrackListItemProps) { const coverUrl = track.cover ? getProxiedCoverUrl(track.cover) : '' return (
{track.title} {track.vip && ( VIP )}
{onArtistClick ? track.artist.map((a, ai) => ( {ai > 0 && ' / '} )) : track.artist.join(' / ')} {track.album ? ` · ${track.album}` : ''}