'use client'; import { useState } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { AlertCircle, AlertTriangle, Wifi, RefreshCw, ChevronDown, ChevronUp, Bug, Info, X } from 'lucide-react'; import { parseApiError, getErrorSeverity, isRetryable, isConnectivityError } from '@/lib/utils/errorUtils'; import { ApiError } from '@/lib/api/base/ApiError'; interface EnhancedFormErrorProps { error: unknown; onRetry?: () => void; onDismiss?: () => void; showDeveloperDetails?: boolean; className?: string; } /** * Enhanced Form Error Component * * Shows user-friendly error messages with optional developer details. * Handles validation errors, network errors, and general errors. */ export function EnhancedFormError({ error, onRetry, onDismiss, showDeveloperDetails = process.env.NODE_ENV === 'development', className = '' }: EnhancedFormErrorProps) { const [showDetails, setShowDetails] = useState(false); const parsed = parseApiError(error); const severity = getErrorSeverity(error); const retryable = isRetryable(error); const connectivity = isConnectivityError(error); const getIcon = () => { if (connectivity) return ; if (severity === 'error') return ; if (severity === 'warning') return ; return ; }; const getColor = () => { switch (severity) { case 'error': return 'red'; case 'warning': return 'amber'; case 'info': return 'blue'; default: return 'gray'; } }; const color = getColor(); return ( {/* Main Error Message */}
{getIcon()}

{parsed.userMessage}

{retryable && onRetry && ( )} {onDismiss && ( )} {showDeveloperDetails && ( )}
{/* Validation Errors List */} {parsed.isValidationError && parsed.validationErrors.length > 0 && (
{parsed.validationErrors.map((validationError, index) => (
• {validationError.field}: {validationError.message}
))}
)} {/* Action Hint */}
{connectivity && "Check your internet connection and try again"} {parsed.isValidationError && "Please review your input and try again"} {retryable && !connectivity && !parsed.isValidationError && "Please try again in a moment"}
{/* Developer Details */} {showDeveloperDetails && (
Developer Details
Error Type:
{error instanceof ApiError ? error.type : 'Unknown'}
Developer Message:
{parsed.developerMessage}
{error instanceof ApiError && error.context.endpoint && (
Endpoint:
{error.context.method} {error.context.endpoint}
)} {error instanceof ApiError && error.context.statusCode && (
Status Code:
{error.context.statusCode}
)} {error instanceof ApiError && error.context.retryCount !== undefined && (
Retry Count:
{error.context.retryCount}
)} {error instanceof ApiError && error.context.timestamp && (
Timestamp:
{error.context.timestamp}
)} {error instanceof ApiError && error.context.troubleshooting && (
Troubleshooting:
{error.context.troubleshooting}
)} {parsed.validationErrors.length > 0 && (
Validation Errors:
{JSON.stringify(parsed.validationErrors, null, 2)}
)}
Quick Actions:
{retryable && onRetry && ( )}
)}
); } /** * Form Error Summary Component * * Shows a compact error summary for form submission failures */ export function FormErrorSummary({ error, onDismiss }: { error: unknown; onDismiss?: () => void; }) { const parsed = parseApiError(error); const summary = { title: 'Submission Failed', description: parsed.userMessage, action: 'Please try again' }; return (
{summary.title}
{summary.description}
{summary.action}
{onDismiss && ( )}
); }