import React, { useState } from 'react'; import { TransferItem } from '../types'; import { ArrowUp, ArrowDown, CheckCircle, XCircle, Clock, Trash2 } from 'lucide-react'; interface TransferQueueProps { queue: TransferItem[]; onCancelAll: () => void; onClearCompleted: () => void; } const TransferQueue: React.FC = ({ queue, onCancelAll, onClearCompleted }) => { const [activeTab, setActiveTab] = useState<'active' | 'completed'>('active'); const filteredQueue = queue.filter(item => { if (activeTab === 'active') { return item.status === 'queued' || item.status === 'transferring'; } else { return item.status === 'completed' || item.status === 'failed'; } }); return (
{activeTab === 'active' && filteredQueue.length > 0 && ( )} {activeTab === 'completed' && filteredQueue.length > 0 && ( )}
{filteredQueue.map((item) => ( ))} {filteredQueue.length === 0 && ( )}
파일명 구분 요청 완료 소요 진행률 속도
{item.status === 'completed' && } {item.status === 'failed' && } {item.status === 'queued' && } {item.status === 'transferring' && (
)}
{item.filename} {item.direction === 'upload' ? : } {item.direction === 'upload' ? '업로드' : '다운로드'} {item.requestedAt ? new Date(item.requestedAt).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' }) : '-'} {item.completedAt ? new Date(item.completedAt).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' }) : '-'} {item.completedAt && item.requestedAt ? `${((item.completedAt - item.requestedAt) / 1000).toFixed(1)}s` : '-'}
{item.speed}
{activeTab === 'active' ? '대기 중인 전송 파일이 없습니다.' : '완료된 전송 내역이 없습니다.'}
); }; export default TransferQueue;