import { useWaste } from '../store' function fmt(bytes: number): string { if (bytes < 1024) return `${bytes} B` if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB` return `${(bytes / (1024 * 1024)).toFixed(1)} MB` } export function Transfers() { const { pendingOffers, fileProgress, acceptOffer, rejectOffer, cancelTransfer, connectedPeers } = useWaste() const hasPending = Object.keys(pendingOffers).length > 0 const hasActive = Object.keys(fileProgress).length > 0 if (!hasPending && !hasActive) return null function alias(peerId: string) { return connectedPeers.find(p => p.id === peerId)?.alias ?? peerId.slice(0, 8) } return (
Transfers {Object.entries(pendingOffers).map(([xid, offer]) => (
{offer.name} {fmt(offer.size)} from {alias(offer.peerId)}
))} {Object.entries(fileProgress).map(([xid, p]) => { const pct = p.total > 0 ? Math.round((p.received / p.total) * 100) : 0 return (
{p.name} {fmt(p.received)} / {fmt(p.total)} ยท {alias(p.peerId)}
) })}
) }