import { useState, useEffect } from 'react' import { motion } from 'framer-motion' import { FileVideo, FileArchive, FileText, FileImage, Database, CheckCircle2, Loader } from 'lucide-react' import { mockTransfers } from '../data/mockData.js' import { useInterval } from '../hooks/useUtils.js' const iconMap = { video: FileVideo, archive: FileArchive, file: FileText, image: FileImage, database: Database, } export default function TransferGrid() { const [transfers, setTransfers] = useState(mockTransfers) useInterval(() => { setTransfers(prev => prev.map(t => { if (t.status === 'live') { const newProgress = Math.min(100, t.progress + Math.random() * 3) const newSpeed = t.speed * (0.8 + Math.random() * 0.4) return { ...t, progress: newProgress, speed: newSpeed, eta: newProgress >= 100 ? 'Done' : `${(100 - newProgress) / newSpeed * 10}`.slice(0, 4) + 's', status: newProgress >= 100 ? 'complete' : 'live', hash: newProgress >= 100 ? 'Verified' : t.hash, } } return t }) ) }, 1500) return (
Transfer Grid {transfers.filter(t => t.status === 'live').length} live · {transfers.filter(t => t.status === 'complete').length} done
{transfers.map((t, i) => { const Icon = FileVideo return (
{t.name}
{t.status === 'live' ? ( LIVE ) : ( )}
{Math.round(t.progress)}% {t.size}
Speed {t.speed > 0 ? t.speed.toFixed(1) + ' GB/s' : '—'}
ETA {t.eta}
Hash {t.hash}
) })}
) }