32 lines
1.6 KiB
TypeScript
32 lines
1.6 KiB
TypeScript
import { useDownloadProgress } from "@/hooks/useDownloadProgress";
|
|
import { useDownloadQueueData } from "@/hooks/useDownloadQueueData";
|
|
import { Download, ChevronRight } from "lucide-react";
|
|
import { Button } from "@/components/ui/button";
|
|
interface DownloadProgressToastProps {
|
|
onClick: () => void;
|
|
}
|
|
export function DownloadProgressToast({ onClick }: DownloadProgressToastProps) {
|
|
const progress = useDownloadProgress();
|
|
const queueInfo = useDownloadQueueData();
|
|
const hasActiveDownloads = queueInfo.queue.some(item => item.status === "queued" || item.status === "downloading");
|
|
if (!hasActiveDownloads) {
|
|
return null;
|
|
}
|
|
return (<div className="fixed bottom-4 left-[calc(56px+1rem)] z-50 animate-in slide-in-from-bottom-5 data-[state=closed]:animate-out data-[state=closed]:slide-out-to-bottom-5">
|
|
<Button variant="outline" className="bg-background border rounded-lg shadow-lg p-3 h-auto hover:bg-muted/50 transition-colors cursor-pointer" onClick={onClick}>
|
|
<div className="flex items-center gap-3">
|
|
<Download className={`h-4 w-4 text-primary ${progress.is_downloading ? 'animate-bounce' : ''}`}/>
|
|
<div className="flex flex-col min-w-[80px]">
|
|
<p className="text-sm font-medium font-mono tabular-nums">
|
|
{progress.mb_downloaded.toFixed(2)} MB
|
|
</p>
|
|
{progress.speed_mbps > 0 && (<p className="text-xs text-muted-foreground font-mono tabular-nums">
|
|
{progress.speed_mbps.toFixed(2)} MB/s
|
|
</p>)}
|
|
</div>
|
|
<ChevronRight className="h-4 w-4 text-muted-foreground ml-1"/>
|
|
</div>
|
|
</Button>
|
|
</div>);
|
|
}
|