import propTypes from 'prop-types'; import img from '../../assets/Group 305.png'; import * as Yup from 'yup'; import { Formik, Form, ErrorMessage } from 'formik'; import { JobFormContext } from '../../context'; import { useContext, useState, useRef, useEffect } from 'react'; import * as emailjs from 'emailjs-com'; import { motion } from 'framer-motion'; import ReactGA from 'react-ga4'; import MyDropzone from './MyDropzone'; import HashPositions from './HashPositions'; import ReCAPTCHA from 'react-google-recaptcha'; import axios from 'axios'; import { UIContext } from '../../context/UIContextProvider'; const api_url = process.env.REACT_APP_API_URL; export default function JobForm(props) { const [btnText, setBtnText] = useState(''); const [sucMsg, setSucMsg] = useState(false); const captchaRef = useRef(null); const [msgText, setMsgText] = useState(''); const cntCareersJobs = props.cntCareers; let defaultPositionSelection = props.defaultPositionSelection; //search context for prevous entry TODO const { jobForm, setJobForm } = useContext(UIContext); const [otherInputState, setOtherInputState] = useState(true); const [selectedPosition, setSelectedPosition] = useState(jobForm.position); //console.log(selectedPosition); const [errorMsg, setErrorMsg] = useState(''); const [errorMsgPosition, setErrorMsgPosition] = useState(''); const fileInput = useRef(); function changeFormHandler(event) { const { name, value } = event.target; setJobForm(prevState => ({ ...prevState, [name]: value, })); } function dropzoneToFormData(files) { setJobForm(prevState => ({ ...prevState, file: files, })); } function hashToFormData(selected, other) { setJobForm(prevState => ({ ...prevState, position: selected, other: other, })); } useEffect(() => { setJobForm(prevState => ({ ...prevState, position: selectedPosition, })); },[selectedPosition]) useEffect(() => { setBtnText(props.cta); }, [props.cta]); useEffect(() => { if (jobForm.file !== '') { setErrorMsg(''); } }, [jobForm.file]); const validationSchema = Yup.object({ email: Yup.string().email('Invalid email format').required('Email is Required'), firstName: Yup.string() .min(2, 'First name too short') .max(50, 'First name too long') .required('First Name is Required'), lastName: Yup.string() .min(2, 'Last name too short') .max(50, 'Last name too long') .required('Last name is Required'), coverLetter: Yup.string() .trim() .min(2, 'Cover Letter too short') .required('Cover Letter is Required'), other: Yup.string(), }); return (
Email: ${values.email}
Position: ${selectedPosition} ${values.other}
Cover letter: ${values.coverLetter}
Link (optional): ${values.link}
`, // attachment: file, // }); console.log(jobForm); } else setMsgText('Please fill reCAPTCHA and try again. Thank you!'); }) .catch(error => { console.log(error); }); } } } } ReactGA.event('contact', { category: 'Contact', action: 'Job application', }); }} > {props => ( )}