feat: email validation

This commit is contained in:
Leon
2025-07-24 13:58:59 +02:00
parent 24e65a8c86
commit 6ff4e817ef
6 changed files with 89 additions and 5 deletions

View File

@@ -20,6 +20,7 @@ import {
SelectTrigger,
SelectValue,
} from "@/components/ui/select"
import { isValidEmail } from "@/lib/utils"
interface NewsletterDialogProps {
newsletter?: Newsletter | null
@@ -80,7 +81,7 @@ export function NewsletterDialog({ newsletter, isOpen, folderOptions, onOpenChan
}
const handleSubmit = async () => {
if (!formData.name || !formData.emails.some((email) => email.trim())) {
if (!formData.name || !formData.emails.some((email) => email.trim() && isValidEmail(email))) {
return
}
@@ -178,6 +179,7 @@ export function NewsletterDialog({ newsletter, isOpen, folderOptions, onOpenChan
onChange={(e) => handleEmailChange(index, e.target.value)}
placeholder="Enter email address"
type="email"
aria-invalid={email.length > 0 && !isValidEmail(email)}
/>
{formData.emails.length > 1 && (
<Button variant="outline" size="sm" onClick={() => handleRemoveEmail(index)}>

View File

@@ -4,3 +4,8 @@ import { twMerge } from "tailwind-merge"
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs))
}
export function isValidEmail(email: string): boolean {
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
return emailRegex.test(email)
}