import React, { useState } from 'react'; import { Link } from 'react-router-dom'; import isEmail from 'validator/lib/isEmail'; import isEmpty from 'validator/lib/isEmpty'; import equals from 'validator/lib/equals'; import errorAlert from '../Helpers/errorAlert'; import successAlert from '../Helpers/successAlert'; import {signUp} from '../api/auth'; const SignUpForm = () => { const[formData, setFormData] = useState({ firstName: 'Fin', lastName: 'Wallis', email: 'user@gmail.com', password: 'password123', confirmPassword: 'password123', successMsg: false, errorMsg: false }) const handleChange = (event) => { setFormData({ ...formData, [event.target.name]: event.target.value, errorMsg: '' }) console.log(formData) } const handleSubmit = (event) => { event.preventDefault() console.log(formData) // Form validation if (isEmpty(formData.firstName) || isEmpty(formData.lastName) || isEmpty(formData.email) || isEmpty(formData.password) || isEmpty(formData.confirmPassword)) { setFormData({ ...formData, errorMsg: 'All fields are required', }) } else if (!isEmail(formData.email)) { setFormData({ ...formData, errorMsg: 'Invalid email', }) } else if (!equals(formData.password, formData.confirmPassword)) { setFormData({ ...formData, errorMsg: 'Passwords do not match', }) } else { const {firstName, lastName, email, password} = formData const data = {firstName, lastName, email, password} signUp(data) .then((response) => { console.log('axios success', response) setFormData({ firstName: '', lastName: '', email: '', password: '', confirmPassword: '', successMsg: response.data.successMessage }) }) .catch((err) => { console.log("Axios error:", err) setFormData({ ...formData, errorMsg: err.response.data.errorMessage }) }) } } return ( <div className='flex mt-20 items-center justify-center'> <div className='bg-white p-12 rounded-md w-1/3 shadow-lg'> <h1 className='text-black font-montserrat font-extrabold text-3xl mb-12 ml-3'>Tickcrypt</h1> <form className='signup-form space-y-5 px-100' onSubmit={handleSubmit} noValidate> {formData.errorMsg && errorAlert(formData.errorMsg)} {formData.successMsg && successAlert(formData.successMsg)} <input className='font-montserrat font-medium rounded-full w-full py-4 px-7 shadow-lg' name='firstName' value={formData.firstName} type='text' placeholder='First Name' onChange={handleChange}></input> <input className='font-montserrat font-medium rounded-full w-full py-4 px-7 shadow-lg' name='lastName' value={formData.lastName} type='text' placeholder='Last Name' onChange={handleChange}></input> <input className='font-montserrat font-medium rounded-full w-full py-4 px-7 shadow-lg' name='email' value={formData.email} type='email' placeholder='Email Address' onChange={handleChange}></input> <input className='font-montserrat font-medium rounded-full w-full py-4 px-7 shadow-lg' name='password' value={formData.password} type='password' placeholder='Password' onChange={handleChange}></input> <input className='font-montserrat font-medium rounded-full w-full py-4 px-7 shadow-lg' name='confirmPassword' value={formData.confirmPassword} type='password' placeholder='Confirm Password' onChange={handleChange}></input> <button className='py-4 px-14 text-white bg-purple-500 hover:bg-purple-400 font-montserrat font-medium rounded-full' type='submit'>Sign Up</button> <div className='mt-6 '> <p className='forgot-password'> <Link to='/ForgotPassword' className='text-gray-400'>Forgot Password?</Link> </p> <div className='mt-4'> <p className='text-gray-400 inline'> Already have a Tickcrypt account? </p> <Link to='/Login' className=' pl-2 text-purple-500'>Sign In</Link> </div> </div> </form> </div> </div> ); } export default SignUpForm;