import {useDispatch, useSelector} from "react-redux"; import {useEffect, useState} from "react"; import {useParams} from "react-router"; import {ApplicationActions} from "../../redux/actions/applicationActions"; import {ApplicationDetailsModal} from "./ApplicationDetailsModal"; import "./Applications.css" import Select from "react-select"; import {sortElementsBy} from "../../utils/utils"; import {JobSeekerActions} from "../../redux/actions/JobSeekerActions"; import {notifyAppStatusUpdate} from "../../utils/toastUtils"; export const ApplicationsByJobAd = () => { const dispatch = useDispatch(); let {advertisement_id} = useParams(); const [applicationsByJobAd, setApplicationsByJobAd] = useState([]); let applicationsByJobAdState = useSelector(state => state.appl.applicationsByJobAdId) const [dispatched, setDispatched] = useState(false); const [profilePics, setProfilePics] = useState({}); let profilePicsState = useSelector(state => state.images.profilePictures) const [profilePicsDispatched, setProfilePicsDispatched] = useState(false); const [jobAdTitle, setJobAdTitle] = useState(""); useEffect(() => { if(!dispatched && (applicationsByJobAdState.length === 0 || applicationsByJobAdState.length === 1)) { dispatch(ApplicationActions.fetchApplicationsByJobAdId(advertisement_id, (success, reponse) => { if (success && reponse.data.length > 0) { setApplicationsByJobAd(sortElementsBy(reponse.data, "submittedOn")) setJobAdTitle(reponse.data[0].jobAdTitle) } setDispatched(true) console.log("Fetch applications by job ad GET") })) } else { setApplicationsByJobAd(sortElementsBy(applicationsByJobAdState, "submittedOn")); if(applicationsByJobAdState.length > 0) { setJobAdTitle(applicationsByJobAdState[0].jobAdTitle) } } }, [applicationsByJobAdState]) useEffect(() => { if(dispatched && !profilePicsDispatched) { applicationsByJobAd.forEach(app => { if(app.jobSeekerId && !profilePics[app.jobSeekerId]) { fetchProfilePic(app.jobSeekerId) } }) setProfilePicsDispatched(true); console.log("Fetch all profile pics GET") } else if(profilePicsDispatched) { setProfilePics(profilePicsState) console.log("Fetch all profile pics STATE") } }, [dispatched]) const fetchProfilePic = (jobSeekerId) => { dispatch(JobSeekerActions.downloadProfilePic(jobSeekerId, (success, response) => { if(success) { setProfilePics(prevState => ({...prevState, [jobSeekerId]: response})) } })) } const options = [ {value: 'PROPOSED', label: Proposed}, {value: 'UNDER_REVIEW', label: Under Review}, {value: 'ACCEPTED', label: Accepted}, {value: 'DENIED', label: Denied} ]; let handleDefaultStatus = (status) => { return options.find(option => option.value === status); } let handleChangeStatus = (selectedOption, id) => { dispatch(ApplicationActions.updateApplicationStatus(id, selectedOption.value, (success, response) => { if(success) { // console.log("Status updated.") notifyAppStatusUpdate() } })) } return (
{jobAdTitle ?

Applications for {jobAdTitle}

:

}
{applicationsByJobAd && applicationsByJobAd.map((application, index) => (
Submitted on {new Date(application.submittedOn).toLocaleString('default', { day: 'numeric', month: 'long', year: 'numeric' })}
{application.jobSeekerName}
{application.jobSeekerEmail}
{application.jobSeekerPhoneNumber}