Files
2023-01-23 20:44:12 -05:00

181 lines
8.8 KiB
JavaScript
Executable File

import React, { useState } from 'react';
import { useForm } from 'react-hook-form';
import axios from 'axios';
import Swal from 'sweetalert2'
import withReactContent from 'sweetalert2-react-content'
const MySwal = withReactContent(Swal)
import baseUrl from '../../utils/baseUrl';
const alertContent = () => {
MySwal.fire({
title: 'Congratulations!',
text: 'Your message was successfully send and will back to you soon',
icon: 'success',
timer: 2000,
timerProgressBar: true,
showConfirmButton: false,
})
}
// Form initial state
const INITIAL_STATE = {
name: "",
email: "",
number: "",
subject: "",
text: ""
};
const ContactForm = () => {
const [contact, setContact] = useState(INITIAL_STATE);
const { register, handleSubmit, errors } = useForm();
const handleChange = e => {
const { name, value } = e.target;
setContact(prevState => ({ ...prevState, [name]: value }));
console.log(contact)
}
const onSubmit = async e => {
// e.preventDefault();
try {
const url = `${baseUrl}/api/contact`;
const { name, email, number, subject, text } = contact;
const payload = { name, email, number, subject, text };
await axios.post(url, payload);
console.log(url);
setContact(INITIAL_STATE);
alertContent();
} catch (error) {
console.log(error)
}
};
return (
<div className="drop-area">
<div className="container-fluid">
<div className="row">
<div className="col-lg-7 p-0">
<div className="drop-item drop-img">
<div className="drop-left">
<h2>Drop your message for any info or question</h2>
<form id="contactForm" onSubmit={handleSubmit(onSubmit)}>
<div className="row">
<div className="col-lg-6 col-md-6">
<div className="form-group">
<input
type="text"
name="name"
placeholder="Your Name"
className="form-control"
value={contact.name}
onChange={handleChange}
ref={register({ required: true })}
/>
<div className='invalid-feedback' style={{display: 'block'}}>
{errors.name && 'Name is required.'}
</div>
</div>
</div>
<div className="col-lg-6 col-md-6">
<div className="form-group">
<input
type="text"
name="email"
placeholder="Your email"
className="form-control"
value={contact.email}
onChange={handleChange}
ref={register({ required: true, pattern: /^\S+@\S+$/i })}
/>
<div className='invalid-feedback' style={{display: 'block'}}>
{errors.email && 'Email is required.'}
</div>
</div>
</div>
<div className="col-lg-6 col-md-6">
<div className="form-group">
<input
type="text"
name="number"
placeholder="Your phone number"
className="form-control"
value={contact.number}
onChange={handleChange}
ref={register({ required: true })}
/>
<div className='invalid-feedback' style={{display: 'block'}}>
{errors.number && 'Number is required.'}
</div>
</div>
</div>
<div className="col-lg-6 col-md-6">
<div className="form-group">
<input
type="text"
name="subject"
placeholder="Your Subject"
className="form-control"
value={contact.subject}
onChange={handleChange}
ref={register({ required: true })}
/>
<div className='invalid-feedback' style={{display: 'block'}}>
{errors.subject && 'Subject is required.'}
</div>
</div>
</div>
<div className="col-lg-12 col-md-12">
<div className="form-group">
<textarea
name="text"
cols="30"
rows="5"
placeholder="Write your message..."
className="form-control"
value={contact.text}
onChange={handleChange}
ref={register({ required: true })}
/>
<div className='invalid-feedback' style={{display: 'block'}}>
{errors.text && 'Text body is required.'}
</div>
</div>
</div>
<div className="col-lg-12 col-sm-12">
<button type="submit" className="drop-btn">Send Message</button>
</div>
</div>
</form>
</div>
</div>
</div>
<div className="col-lg-5 p-0">
<div className="speciality-item speciality-right speciality-right-two speciality-right-three">
<img src="/images/about4.jpg" alt="Contact" />
<div className="speciality-emergency">
<div className="speciality-icon">
<i className="icofont-ui-call"></i>
</div>
<h3>Emergency Call</h3>
<p>+07 554 332 322</p>
</div>
</div>
</div>
</div>
</div>
</div>
)
}
export default ContactForm;