import {useDispatch, useSelector} from "react-redux"; import React, {useEffect, useState} from "react"; import {RecruiterActions} from "../../redux/actions/recruiterActions"; import * as yup from "yup"; import {useForm} from "react-hook-form"; import {yupResolver} from "@hookform/resolvers/yup"; // Toast notification import 'react-toastify/dist/ReactToastify.css'; import { toast, ToastContainer } from 'react-toastify'; import {notifyLogoChange, notifyProfileEdit} from "../../utils/toastUtils"; export const RecruiterEditProfile = () => { const dispatch = useDispatch(); const auth = useSelector(state => (state.auth.currentUser)) const [recruiterDetails, setRecruiterDetails] = useState(null); let logosState = useSelector(state => state.images.logos) const [logoDispatched, setLogoDispatched] = useState(false) const [logoFile, setLogoFile] = useState(null); const [logoPreview, setLogoPreview] = useState(null); const [logoView, setLogoView] = useState(null); useEffect(() => { if (auth) { dispatch(RecruiterActions.fetchRecruiterEditDetailsById(auth.id, (success, response) => { if (success) { setRecruiterDetails(response.data) } })) } }, [auth]); useEffect(() => { if (auth.id) { if (!logoDispatched && !logosState[auth.id]) { dispatch(RecruiterActions.downloadLogo(auth.id, (success, response) => { if (success) { setLogoView(response) setLogoDispatched(true) } })) console.log("LOGO GET") } else { setLogoView(logosState[auth.id]) console.log("LOGO STATE") } } }, [auth]) const schema = yup.object().shape({ email: yup.string().required("Please enter your email"), companyName: yup.string().required("Please enter your company name"), companyDescription: yup.string(), contactEmail: yup.string().required("Please enter your contact email"), contactPhoneNumber: yup.string().required("Please enter your contact phone number"), receptionist: yup.string(), }) const {register, handleSubmit, control, formState: {errors}} = useForm({ resolver: yupResolver(schema), }); const editRecruiterDetails = async (values) => { try { dispatch(RecruiterActions.editRecruiterDetailsById( { email: values.email, companyName: values.companyName, companyDescription: values.companyDescription, contactEmail: values.contactEmail, contactPhoneNumber: values.contactPhoneNumber, receptionist: values.receptionist, }, auth.id, (success, response) => { if (success) { console.log("Recruiter details edited") notifyProfileEdit() //window.location.reload(); } } )) } catch (err) { console.error(err) } } const handleButtonClick = () => { document.getElementById('logo-upload-input').click(); }; const handleLogoChange = (event) => { const file = event.target.files[0]; if (file && (file.type === 'image/png' || file.type === 'image/jpeg')) { setLogoFile(file); setLogoPreview(URL.createObjectURL(file)); } event.target.value = null; }; const handleLogoUpload = async () => { try { const formData = new FormData(); formData.append("recruiterId", auth.id); formData.append("logoFile", logoFile); dispatch(RecruiterActions.submitLogo(formData, (success, response) => { if (success) { //console.log("Logo uploaded successfully") notifyLogoChange() setLogoPreview(null) setLogoView(URL.createObjectURL(logoFile)) } })) } catch (error) { console.error(error) } } const handleCancelUpload = () => { setLogoFile(null) setLogoPreview(null) console.log(logoPreview) } return (
{logoPreview && (
)}
Company Banner {logoPreview ? <> : <> }

{recruiterDetails && recruiterDetails.companyName}

{/**/} {recruiterDetails && (
Company details

{errors.email?.message}

{errors.contactEmail?.message}

{errors.contactPhoneNumber?.message}

{errors.receptionist?.message}

{errors.companyName?.message}

)} {/*
*/}
) }