import { useState, useEffect } from 'react'; import { IconWifi, IconWifiOff } from '@tabler/icons-react'; /** * NetworkErrorHandler - компонент для мониторинга состояния сети * Показывает уведомление при потере соединения */ function NetworkErrorHandler() { const [isOnline, setIsOnline] = useState(navigator.onLine); const [wasOffline, setWasOffline] = useState(false); const [showReconnected, setShowReconnected] = useState(false); useEffect(() => { const handleOnline = () => { setIsOnline(true); if (wasOffline) { setShowReconnected(true); // Показываем уведомление о восстановлении на 3 секунды setTimeout(() => { setShowReconnected(false); setWasOffline(false); }, 3000); // Уведомляем через глобальную систему if (window.notify?.success) { window.notify.success('Соединение восстановлено'); } } }; const handleOffline = () => { setIsOnline(false); setWasOffline(true); // Уведомляем через глобальную систему if (window.notify?.warning) { window.notify.warning('Нет соединения с интернетом'); } }; window.addEventListener('online', handleOnline); window.addEventListener('offline', handleOffline); return () => { window.removeEventListener('online', handleOnline); window.removeEventListener('offline', handleOffline); }; }, [wasOffline]); // Не показываем ничего если онлайн и не было офлайна if (isOnline && !showReconnected) { return null; } return (
{!isOnline ? (
Нет соединения с интернетом Ожидание восстановления...
) : showReconnected ? (
Соединение восстановлено
) : null}
); } export default NetworkErrorHandler;