import { CheckCircle, XCircle, SkipForward, X, RefreshCw, Trash2, Printer, Timer, Layers, } from 'lucide-react'; import { api } from '../api/client'; import { type TimeFormat, formatDuration, formatRelativeTime } from '../utils/date'; import type { PrintQueueItem, Permission } from '../api/client'; import { Button } from './Button'; const STATUS_CONFIG = { completed: { icon: CheckCircle, color: 'text-emerald-400', border: 'border-l-emerald-500' }, failed: { icon: XCircle, color: 'text-red-400', border: 'border-l-red-500' }, skipped: { icon: SkipForward, color: 'text-orange-400', border: 'border-l-gray-500' }, cancelled: { icon: X, color: 'text-gray-400', border: 'border-l-gray-500' }, } as const; export function CompactHistoryRow({ item, onRequeue, onRemove, timeFormat = 'system', hasPermission, canModify, t, }: { item: PrintQueueItem; onRequeue: () => void; onRemove: () => void; timeFormat?: TimeFormat; hasPermission: (permission: Permission) => boolean; canModify: (resource: 'queue' | 'archives' | 'library', action: 'update' | 'delete' | 'reprint', createdById: number | null | undefined) => boolean; t: (key: string, options?: Record) => string; }) { const config = STATUS_CONFIG[item.status as keyof typeof STATUS_CONFIG] || STATUS_CONFIG.cancelled; const StatusIcon = config.icon; const displayName = item.archive_name || item.library_file_name || `File #${item.archive_id || item.library_file_id}`; const thumbnailUrl = item.archive_thumbnail ? api.getArchiveThumbnail(item.archive_id!) : item.library_file_thumbnail ? api.getLibraryFileThumbnailUrl(item.library_file_id!) : null; const completedTime = item.completed_at || item.created_at; return (
{/* Status icon */} {/* Thumbnail */}
{thumbnailUrl ? ( ) : (
)}
{/* File name */} {displayName} {/* Printer */} {item.printer_name && ( {item.printer_name} )} {/* Duration */} {item.print_time_seconds && ( {formatDuration(item.print_time_seconds)} )} {/* Completed time */} {formatRelativeTime(completedTime, timeFormat, t)} {/* Actions */}
); }