import { useState } from 'react'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Alert, AlertDescription } from '@/components/ui/alert'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Separator } from '@/components/ui/separator'; import { Progress } from '@/components/ui/progress'; import { Mail, Info, CheckCircle2, Circle, Loader2 } from 'lucide-react'; import { supabase } from '@/integrations/supabase/client'; import { handleError, handleSuccess } from '@/lib/errorHandler'; import { useEmailChangeStatus } from '@/hooks/security/useEmailChangeStatus'; interface EmailChangeStatusProps { currentEmail: string; pendingEmail: string; onCancel: () => void; } export function EmailChangeStatus({ currentEmail, pendingEmail, onCancel }: EmailChangeStatusProps) { const [resending, setResending] = useState(false); const { data: emailStatus, isLoading } = useEmailChangeStatus(); const verificationStatus = { oldEmailVerified: emailStatus?.current_email_verified || false, newEmailVerified: emailStatus?.new_email_verified || false }; const handleResendVerification = async () => { setResending(true); try { const { error } = await supabase.auth.updateUser({ email: pendingEmail }); if (error) throw error; handleSuccess( 'Verification emails resent', 'Check your inbox for the verification links.' ); } catch (error: unknown) { handleError(error, { action: 'Resend verification emails' }); } finally { setResending(false); } }; const verificationProgress = (verificationStatus.oldEmailVerified ? 50 : 0) + (verificationStatus.newEmailVerified ? 50 : 0); if (isLoading) { return ( ); } return ( Email Change in Progress To complete your email change, both emails must be verified. {/* Progress indicator */}
{verificationStatus.oldEmailVerified ? ( ) : ( )}

Current Email

{currentEmail}

{verificationStatus.oldEmailVerified && ( Verified )}
{verificationStatus.newEmailVerified ? ( ) : ( )}

New Email

{pendingEmail}

{verificationStatus.newEmailVerified && ( Verified )}
{/* Action buttons */}
{/* Progress bar */}
Progress {verificationProgress}%
); }