1- import React from "react" ;
2-
3- const ContactUs = ( ) => {
4- return (
5- < >
6- < div className = "h" >
7- < h1 > This is Contact Us Page</ h1 >
8- </ div >
9- </ >
10- )
11- }
1+ import React , { useState } from "react" ;
2+ import { EMAIL_TO } from "./Constants" ;
3+
4+ const ContactUs = ( ) => {
5+ const [ formData , setFormData ] = useState ( {
6+ name : "" ,
7+ email : "" ,
8+ message : "" ,
9+ } ) ;
10+ const [ errors , setErrors ] = useState ( { } ) ;
11+
12+ const validate = ( ) => {
13+ let tempErrors = { } ;
14+ tempErrors . name = formData . name ? "" : "Name is required" ;
15+ tempErrors . email = / ^ [ ^ \s @ ] + @ [ ^ \s @ ] + \. [ ^ \s @ ] + $ / . test ( formData . email )
16+ ? ""
17+ : "Valid email is required" ;
18+ tempErrors . message = formData . message ? "" : "Message is required" ;
19+ setErrors ( tempErrors ) ;
20+ return Object . values ( tempErrors ) . every ( ( x ) => x === "" ) ;
21+ } ;
22+
23+ const handleChange = ( e ) => {
24+ setFormData ( { ...formData , [ e . target . name ] : e . target . value } ) ;
25+ } ;
26+
27+ const handleSubmit = ( e ) => {
28+ e . preventDefault ( ) ;
29+ if ( validate ( ) ) {
30+ window . location . href = `mailto:${ EMAIL_TO } ?subject=Contact Form Submission&body=Name: ${ formData . name } %0AEmail: ${ formData . email } %0AMessage: ${ formData . message } ` ;
31+ }
32+ } ;
33+
34+ return (
35+ < div className = "flex flex-col items-center justify-center min-h-screen bg-gray-50 p-2" >
36+ < div className = "bg-white shadow-lg rounded-2xl p-6 max-w-lg w-full" >
37+ < h1 className = "text-3xl font-semibold text-gray-800 text-center" >
38+ Contact Us
39+ </ h1 >
40+ < form className = "mt-4" onSubmit = { handleSubmit } >
41+ < div className = "mb-4" >
42+ < label className = "block text-gray-700" > Name</ label >
43+ < input
44+ type = "text"
45+ name = "name"
46+ value = { formData . name }
47+ onChange = { handleChange }
48+ className = "w-full p-2 border border-gray-300 rounded-lg mt-1"
49+ />
50+ { errors . name && (
51+ < p className = "text-red-500 text-sm" > { errors . name } </ p >
52+ ) }
53+ </ div >
54+
55+ < div className = "mb-4" >
56+ < label className = "block text-gray-700" > Email</ label >
57+ < input
58+ type = "email"
59+ name = "email"
60+ value = { formData . email }
61+ onChange = { handleChange }
62+ className = "w-full p-2 border border-gray-300 rounded-lg mt-1"
63+ />
64+ { errors . email && (
65+ < p className = "text-red-500 text-sm" > { errors . email } </ p >
66+ ) }
67+ </ div >
68+
69+ < div className = "mb-4" >
70+ < label className = "block text-gray-700" > Message</ label >
71+ < textarea
72+ name = "message"
73+ value = { formData . message }
74+ onChange = { handleChange }
75+ className = "w-full p-2 border border-gray-300 rounded-lg mt-1"
76+ rows = "4"
77+ > </ textarea >
78+ { errors . message && (
79+ < p className = "text-red-500 text-sm" > { errors . message } </ p >
80+ ) }
81+ </ div >
82+
83+ < button
84+ type = "submit"
85+ className = "w-full bg-orange-600 text-white py-2 px-4 rounded-lg hover:bg-blue-600 transition"
86+ >
87+ Send Message
88+ </ button >
89+ </ form >
90+ </ div >
91+ </ div >
92+ ) ;
93+ } ;
1294
1395export default ContactUs ;
0 commit comments