import type { ReactNode } from 'react' import { Card } from './Card' import { Button } from './Button' import { t } from '@/lib/i18n' import { classifyError, type ErrorClassification } from '@/lib/errorClassification' interface ErrorStateProps { message: string action?: ReactNode className?: string onRetry?: () => void onCheckConnection?: () => void showDocumentationLink?: boolean error?: unknown } function ErrorIcon(): React.ReactElement { return ( ) } function getUserFriendlyMessage(classification: ErrorClassification): string { return classification.message } function getErrorClassification(error: unknown | undefined): ErrorClassification | null { if (error === undefined) { return null } return classifyError(error) } function RetryButton({ onRetry }: { onRetry: () => void }): React.ReactElement { return ( ) } function CheckConnectionButton({ onCheckConnection }: { onCheckConnection: () => void }): React.ReactElement { return ( ) } function DocumentationButton(): React.ReactElement { return ( ) } function computeActionFlags( classification: ErrorClassification | null, onRetry: (() => void) | undefined, onCheckConnection: (() => void) | undefined, showDocumentationLink: boolean ): { showRetry: boolean; showCheck: boolean; showDoc: boolean } { const canRetry = classification?.canRetry ?? false const canCheckConnection = classification?.canCheckConnection ?? false const needsDocumentation = classification?.needsDocumentation ?? false return { showRetry: canRetry && onRetry !== undefined, showCheck: canCheckConnection && onCheckConnection !== undefined, showDoc: needsDocumentation && showDocumentationLink, } } function hasAnyAction( action: ReactNode | undefined, showRetry: boolean, showCheck: boolean, showDoc: boolean ): boolean { return action !== undefined || showRetry || showCheck || showDoc } function ErrorActions({ action, classification, onRetry, onCheckConnection, showDocumentationLink, }: { action?: ReactNode classification: ErrorClassification | null onRetry?: () => void onCheckConnection?: () => void showDocumentationLink?: boolean }): React.ReactElement | null { const flags = computeActionFlags(classification, onRetry, onCheckConnection, showDocumentationLink ?? false) if (!hasAnyAction(action, flags.showRetry, flags.showCheck, flags.showDoc)) { return null } return (
{action !== undefined && action} {flags.showRetry && onRetry !== undefined && } {flags.showCheck && onCheckConnection !== undefined && } {flags.showDoc && }
) } export function ErrorState({ message, action, className = '', onRetry, onCheckConnection, showDocumentationLink = false, error, }: ErrorStateProps): React.ReactElement { const classification = getErrorClassification(error) const displayMessage = classification !== null ? getUserFriendlyMessage(classification) : message const suggestion = classification?.suggestion !== undefined ? t(classification.suggestion) : undefined return (

{displayMessage}

{suggestion !== undefined &&

{suggestion}

}
) }