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 */} {resending ? ( <> Resending... > ) : ( 'Resend Verification Emails' )} Cancel Change {/* Progress bar */} Progress {verificationProgress}% ); }
Current Email
{currentEmail}
New Email
{pendingEmail}