import React, { useState } from 'react'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { useLanguage } from "@/contexts/LanguageContext"; import { Mail, X, AlertCircle, CheckCircle, Loader2 } from "lucide-react"; import { toast } from "@/hooks/use-toast"; import { Alert, AlertDescription } from "@/components/ui/alert"; interface TestEmailDialogProps { open: boolean; onOpenChange: (open: boolean) => void; onSendTest: (data: TestEmailData) => Promise; isTesting: boolean; } export interface TestEmailData { email: string; template: string; collection?: string; } const TestEmailDialog: React.FC = ({ open, onOpenChange, onSendTest, isTesting }) => { const { t } = useLanguage(); const [email, setEmail] = useState(''); const [template, setTemplate] = useState('verification'); const [collection, setCollection] = useState('_superusers'); const [lastResult, setLastResult] = useState<{ success: boolean; message: string } | null>(null); const [isInternalTesting, setIsInternalTesting] = useState(false); const validateEmail = (email: string): boolean => { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; return emailRegex.test(email); }; const handleSend = async () => { if (!email.trim()) { toast({ title: "Error", description: "Please enter an email address", variant: "destructive", }); return; } if (!validateEmail(email)) { toast({ title: "Error", description: "Please enter a valid email address", variant: "destructive", }); return; } try { setLastResult(null); setIsInternalTesting(true); console.log('Sending test email with data:', { email, template, collection: template === 'verification' || template === 'password-reset' ? collection : undefined }); await onSendTest({ email, template, collection: template === 'verification' || template === 'password-reset' ? collection : undefined }); setLastResult({ success: true, message: `Test email sent successfully to ${email}` }); toast({ title: "Success", description: `Test email sent successfully to ${email}`, variant: "default", }); } catch (error) { console.error('Error sending test email:', error); const errorMessage = error instanceof Error ? error.message : "Failed to send test email"; setLastResult({ success: false, message: errorMessage }); toast({ title: "Error", description: errorMessage, variant: "destructive", }); } finally { setIsInternalTesting(false); } }; const handleClose = () => { onOpenChange(false); // Reset form but keep last result for reference setEmail(''); setTemplate('verification'); setCollection('_superusers'); // Don't reset lastResult immediately to allow user to see the result setTimeout(() => setLastResult(null), 300); }; const isLoading = isTesting || isInternalTesting; return ( {t("sendTestEmail", "settings")}
{/* Show last result */} {lastResult && ( {lastResult.success ? ( ) : ( )} {lastResult.message} )} {/* Template Selection */}
{/* Auth Collection - show for verification and password-reset templates */} {(template === 'verification' || template === 'password-reset') && (
)} {/* Email Address */}
setEmail(e.target.value)} placeholder={t("enterEmailAddress", "settings")} required disabled={isLoading} />
{/* Info message */} This will send a test email using your configured SMTP settings. Make sure SMTP is properly configured first.
); }; export default TestEmailDialog;