11import { useForm } from 'react-hook-form' ;
2+ import { zodResolver } from '@hookform/resolvers/zod' ;
23import Container from '@/components/containers/Container' ;
34import RevealContentContainer from '@/components/containers/RevealContentContainer' ;
45import { SubmitButton } from '@/components/buttons/SubmitButton' ;
6+ import { contactSchema } from '@/utils/schemas/contact' ;
57import styles from './ContactUsForm.module.scss' ;
68
79function ContactUsForm ( { subject, setResponseMessage, getReCaptchaToken } ) {
@@ -11,11 +13,12 @@ function ContactUsForm({ subject, setResponseMessage, getReCaptchaToken }) {
1113 reset,
1214 formState : { errors, isSubmitting } ,
1315 } = useForm ( {
16+ resolver : zodResolver ( contactSchema ) ,
1417 defaultValues : {
15- Name : '' ,
16- Email : '' ,
17- Subject : subject || '' ,
18- Message : '' ,
18+ name : '' ,
19+ email : '' ,
20+ subject : subject || '' ,
21+ message : '' ,
1922 } ,
2023 } ) ;
2124
@@ -33,11 +36,11 @@ function ContactUsForm({ subject, setResponseMessage, getReCaptchaToken }) {
3336 'Content-Type' : 'application/json' ,
3437 } ,
3538 body : JSON . stringify ( {
36- name : data . Name ,
37- email : data . Email ,
38- subject : data . Subject ,
39- message : data . Message ,
40- subscribe : data . Subscribe ,
39+ name : data . name ,
40+ email : data . email ,
41+ subject : data . subject ,
42+ message : data . message ,
43+ subscribe : data . subscribe ,
4144 gReCaptchaToken,
4245 } ) ,
4346 } ) ;
@@ -65,78 +68,35 @@ function ContactUsForm({ subject, setResponseMessage, getReCaptchaToken }) {
6568 className = { styles . input }
6669 type = 'text'
6770 placeholder = 'name'
68- { ...register ( 'Name' , {
69- required : true ,
70- minLength : 2 ,
71- maxLength : 80 ,
72- //no white space pattern
73- pattern : / [ ^ \s - ] / i,
74- } ) }
71+ { ...register ( 'name' ) }
7572 />
76- < p className = { styles [ 'error-msg' ] } >
77- { errors . Name ?. type === 'required'
78- ? 'Name is required'
79- : errors . Name ?. type === 'pattern'
80- ? 'No whitespace'
81- : errors . Name ?. type === 'minLength'
82- ? 'Must be more than 1 character'
83- : undefined }
84- </ p >
73+ < p className = { styles [ 'error-msg' ] } > { errors . name ?. message } </ p >
8574 < input
8675 className = { styles . input }
8776 type = 'email'
8877 placeholder = 'email'
89- { ...register ( 'Email' , {
90- required : true ,
91- pattern : / ^ \S + @ \S + $ / i,
92- } ) }
78+ { ...register ( 'email' ) }
9379 />
94- < p className = { styles [ 'error-msg' ] } >
95- { errors . Email ?. type === 'required' && 'Email is required' }
96- </ p >
80+ < p className = { styles [ 'error-msg' ] } > { errors . email ?. message } </ p >
9781 < input
9882 className = { styles . input }
9983 type = 'text'
10084 placeholder = 'subject'
101- { ...register ( 'Subject' , {
102- required : true ,
103- minLength : 2 ,
104- pattern : / [ ^ \s - ] / i,
105- } ) }
85+ { ...register ( 'subject' ) }
10686 />
107- < p className = { styles [ 'error-msg' ] } >
108- { errors . Subject ?. type === 'required'
109- ? 'Subject is required'
110- : errors . Subject ?. type === 'pattern'
111- ? 'No whitespace'
112- : errors . Subject ?. type === 'minLength'
113- ? 'Must be more than 1 character'
114- : undefined }
115- </ p >
87+ < p className = { styles [ 'error-msg' ] } > { errors . subject ?. message } </ p >
11688 < textarea
11789 className = { styles . textarea }
118- { ...register ( 'Message' , {
119- required : true ,
120- minLength : 2 ,
121- pattern : / [ ^ \s - ] / i,
122- } ) }
90+ { ...register ( 'message' ) }
12391 placeholder = 'Write your message here'
12492 />
125- < p className = { styles [ 'error-msg' ] } >
126- { errors . Message ?. type === 'required'
127- ? 'Message is required'
128- : errors . Message ?. type === 'pattern'
129- ? 'No whitespace'
130- : errors . Message ?. type === 'minLength'
131- ? 'Must be more than 1 character'
132- : undefined }
133- </ p >
93+ < p className = { styles [ 'error-msg' ] } > { errors . message ?. message } </ p >
13494 < label className = { styles [ 'subscribe-wrapper' ] } >
13595 < input
13696 className = { styles [ 'subscribe-input' ] }
13797 type = 'checkbox'
13898 placeholder = 'Subscribe to our DevNews!'
139- { ...register ( 'Subscribe' , { } ) }
99+ { ...register ( 'subscribe' ) }
140100 />
141101 Subscribe to our DevNews!
142102 </ label >
0 commit comments