import React from 'react'; import { Article, PlaybackStatus } from '../types'; import { Play, Pause, Loader2, AlertCircle, FileText, GripVertical, SkipForward } from 'lucide-react'; interface QueueItemProps { article: Article; isActive: boolean; isPlaying: boolean; onPlay: () => void; onPause: () => void; onRemove: () => void; onPlayNext?: () => void; draggable?: boolean; onDragStart?: (e: React.DragEvent) => void; onDragOver?: (e: React.DragEvent) => void; onDrop?: (e: React.DragEvent) => void; onDragEnd?: (e: React.DragEvent) => void; } export const QueueItem: React.FC = ({ article, isActive, isPlaying, onPlay, onPause, onRemove, onPlayNext, draggable, onDragStart, onDragOver, onDrop, onDragEnd }) => { // Check if buffering: active, supposed to be playing, but current segment audio is missing const isBuffering = isActive && isPlaying && article.segments[article.currentSegmentIndex] && !article.segments[article.currentSegmentIndex].audioUrl; const getStatusIcon = () => { if (isBuffering) { return ; } switch (article.status) { case PlaybackStatus.LOADING_TEXT: return ; case PlaybackStatus.LOADING_AUDIO: return ; case PlaybackStatus.ERROR: return ; case PlaybackStatus.PLAYING: return
; default: return ; } }; const isReady = article.status === PlaybackStatus.READY || article.status === PlaybackStatus.PAUSED || article.status === PlaybackStatus.PLAYING || article.status === PlaybackStatus.COMPLETED; return (
{getStatusIcon()}

{article.title || article.url}

{article.url}

{article.errorMessage && (

{article.errorMessage}

)}
{isReady && ( )} {onPlayNext && ( )}
); };