From 8ffadcb341220ebf88b5e313f6f18c7e8f7d4ce0 Mon Sep 17 00:00:00 2001 From: KingDavid9999 Date: Sat, 30 May 2026 12:22:21 -0700 Subject: [PATCH 1/8] feat: centralise form validation with Zod schemas (#713) --- apps/web/app/auth/page.tsx | 21 +- apps/web/app/create-event/page.tsx | 66 +- apps/web/lib/validation.ts | 19 + apps/web/package-lock.json | 1523 ++++++++++++++++++++++++++++ apps/web/package.json | 7 +- 5 files changed, 1594 insertions(+), 42 deletions(-) create mode 100644 apps/web/lib/validation.ts create mode 100644 apps/web/package-lock.json diff --git a/apps/web/app/auth/page.tsx b/apps/web/app/auth/page.tsx index ae78984c..8556f229 100644 --- a/apps/web/app/auth/page.tsx +++ b/apps/web/app/auth/page.tsx @@ -3,11 +3,7 @@ import { useState, FormEvent } from "react"; import Image from "next/image"; import { useRouter } from "next/navigation"; - -function validateEmail(email: string): boolean { - const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; - return emailRegex.test(email); -} +import { authSchema } from "@/lib/validation"; export default function AuthPage() { const [email, setEmail] = useState(""); @@ -18,13 +14,9 @@ export default function AuthPage() { const handleSubmit = async (e: FormEvent) => { e.preventDefault(); - if (!email) { - setError("Email is required"); - return; - } - - if (!validateEmail(email)) { - setError("Enter a valid email"); + const result = authSchema.safeParse({ email }); + if (!result.success) { + setError(result.error.issues[0].message); return; } @@ -131,12 +123,12 @@ export default function AuthPage() { border-2 border-black rounded-full px-4 py-2 - mb-4 + mb-1 outline-none " /> - {error &&

{error}

} + {error &&

{error}

} {/* Yellow Continue Button */} - \ No newline at end of file + + + + +