import { useState, useEffect } from 'react'; import { Clock, X } from 'lucide-react'; export function RateLimitBanner() { const [isRateLimited, setIsRateLimited] = useState(false); const [waitTime, setWaitTime] = useState(0); const [countdown, setCountdown] = useState(0); useEffect(() => { const handleRateLimit = (e: CustomEvent<{ waitTime: number; url: string }>) => { setIsRateLimited(true); const seconds = Math.ceil(e.detail.waitTime / 1000); setWaitTime(seconds); setCountdown(seconds); }; window.addEventListener('api:rate-limited', handleRateLimit as EventListener); return () => window.removeEventListener('api:rate-limited', handleRateLimit as EventListener); }, []); useEffect(() => { if (countdown > 0) { const timer = setInterval(() => { setCountdown(prev => { if (prev <= 1) { setIsRateLimited(false); return 0; } return prev - 1; }); }, 1000); return () => clearInterval(timer); } }, [countdown]); if (!isRateLimited) return null; return (
Too many requests. Please wait {countdown}s before trying again.
); }