import React, { useState, useEffect } from 'react'; import './Timer.css'; const Timer = ({ timeLimit, onTimeExpired, isActive }) => { const [timeLeft, setTimeLeft] = useState(timeLimit); const [isWarning, setIsWarning] = useState(false); useEffect(() => { if (!isActive) return; setTimeLeft(timeLimit); setIsWarning(false); const timer = setInterval(() => { setTimeLeft((prevTime) => { if (prevTime <= 1) { clearInterval(timer); onTimeExpired(); return 0; } return prevTime - 1; }); }, 1000); return () => clearInterval(timer); }, [timeLimit, isActive, onTimeExpired]); useEffect(() => { // Активируем предупреждение за последние 5 секунд setIsWarning(timeLeft <= 5 && timeLeft > 0); }, [timeLeft]); const formatTime = (seconds) => { const mins = Math.floor(seconds / 60); const secs = seconds % 60; if (mins > 0) { return `${mins}:${secs.toString().padStart(2, '0')}`; } return `${secs} сек`; }; const getTimerClass = () => { if (!isActive) return 'timer paused'; if (isWarning) return 'timer warning'; if (timeLeft <= 10) return 'timer critical'; return 'timer'; }; const getProgressPercent = () => { return (timeLeft / timeLimit) * 100; }; return (
Осталось {formatTime(timeLeft)}
); }; export default Timer;