From f8080a72345ba663780a28be668b4afea17dd5e7 Mon Sep 17 00:00:00 2001 From: avsomers25 Date: Fri, 19 Jan 2024 11:10:32 -0500 Subject: [PATCH] Form validation --- app/dashboard/page.tsx | 113 +++++++++++++++++++++++++++++++++-------- app/lib/actions.ts | 67 ------------------------ app/lib/data.ts | 2 +- 3 files changed, 94 insertions(+), 88 deletions(-) diff --git a/app/dashboard/page.tsx b/app/dashboard/page.tsx index e9e30ee..a3e2099 100644 --- a/app/dashboard/page.tsx +++ b/app/dashboard/page.tsx @@ -10,9 +10,54 @@ import { Label } from "@/app/dashboard/components/label" import { Input } from "@/app/dashboard/components/input" import { Button } from "@/app/dashboard/components/button" + +import { SubmitHandler, useForm } from "react-hook-form"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { z } from 'zod'; + export default function Dashboard() { - const [userData, setUserData] = useState(null) + const [userData, setUserData] = useState(null); + + const UserUpdateSchema = z.object({ + email: z.string().email(), + role: z.string(), + registration_status: z.string(), + + first_name: z.string(), + last_name: z.string(), + + github: z.string(), + major: z.string(), + short_answer: z.string(), + shirt_size: z.string(), + hackathon_count: z.string(), + dietary_restrictions: z.string(), + special_needs: z.string(), + date_of_birth: z.string(), + school: z.string(), + grad_year: z.string(), + gender: z.string(), + level_of_study: z.string(), + country_of_residence: z.string(), + ethnicity: z.string(), + phone_number: z.string(), + how_you_heard_about_hackru: z.string(), + reasons: z.string(), + + }); + + type UserUpdate = z.infer; + + const { + register, + handleSubmit, + formState: { errors }, + } = useForm({ + resolver: zodResolver(UserUpdateSchema), + }); + + const onSubmit: SubmitHandler = (data) => console.log(data); useEffect(() => { async function fetchUser() { @@ -27,10 +72,9 @@ export default function Dashboard() { } fetchUser(); - }, []) + }, []); return ( -
@@ -57,6 +101,7 @@ export default function Dashboard() {
+
Profile Update your profile information. @@ -64,31 +109,40 @@ export default function Dashboard() {
- setUserData({...userData, first_name: e.target.value})}/> + setUserData({...userData, first_name: e.target.value})}/> + {errors.first_name && (

{errors.first_name?.message}

)}
- setUserData({...userData, last_name: e.target.value})}/> + setUserData({...userData, last_name: e.target.value})}/> + {errors.last_name && (

{errors.last_name?.message}

)}
+
- setUserData({...userData, email: e.target.value})}/> + setUserData({...userData, email: e.target.value})}/> + {errors.email && (

{errors.email?.message}

)}
- setUserData({...userData, github: e.target.value})}/> + setUserData({...userData, github: e.target.value})}/> + {errors.github && (

{errors.github?.message}

)}
- setUserData({...userData, major: e.target.value})}/> + setUserData({...userData, major: e.target.value})}/> + {errors.major && (

{errors.major?.message}

)}