import React from "react"; import { AlertTriangle, RefreshCw, Wifi, WifiOff } from "lucide-react"; import { useTranslation } from "react-i18next"; import "./ErrorDisplay.css"; interface ErrorDisplayProps { error: { type: "network" | "server" | "unknown"; status?: number; message?: string; }; onRetry?: () => void; title?: string; className?: string; } export const ErrorDisplay: React.FC = ({ error, onRetry, title, className = "", }) => { const { t } = useTranslation(); const getErrorIcon = () => { switch (error.type) { case "network": return ; case "server": return ; default: return ; } }; const getErrorMessage = () => { switch (error.type) { case "network": return t( "errors.network", "No hay conexión a internet. Comprueba tu conexión y vuelve a intentarlo." ); case "server": if (error.status === 404) { return t( "errors.not_found", "No se encontraron datos para esta parada." ); } if (error.status === 500) { return t( "errors.server_error", "Error del servidor. Inténtalo de nuevo más tarde." ); } if (error.status && error.status >= 400) { return t( "errors.client_error", "Error en la solicitud. Verifica que la parada existe." ); } return t("errors.server_generic", "Error del servidor ({{status}})", { status: error.status || "desconocido", }); default: return ( error.message || t("errors.unknown", "Ha ocurrido un error inesperado.") ); } }; const getErrorTitle = () => { if (title) return title; switch (error.type) { case "network": return t("errors.network_title", "Sin conexión"); case "server": return t("errors.server_title", "Error del servidor"); default: return t("errors.unknown_title", "Error"); } }; return (
{getErrorIcon()}

{getErrorTitle()}

{getErrorMessage()}

{onRetry && ( )}
); };