- Timestamp:
- 06/17/24 21:59:14 (2 weeks ago)
- Branches:
- main
- Children:
- 08f82ec
- Parents:
- b248810
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
jobvista-frontend/src/views/applications/ApplicationsByJobSeeker.js
rb248810 rbefb988 2 2 import {useEffect, useState} from "react"; 3 3 import {ApplicationActions} from "../../redux/actions/applicationActions"; 4 import { ViewApplicationDetails} from "./ViewApplicationDetails";4 import {ApplicationDetailsModal} from "./ApplicationDetailsModal"; 5 5 import Select from "react-select"; 6 7 import {RecruiterActions} from "../../redux/actions/recruiterActions"; 8 import {sortElementsBy} from "../../utils/utils"; 6 9 7 10 export const ApplicationsByJobSeeker = () => { 8 11 const dispatch = useDispatch(); 12 const auth = useSelector(state => state.auth.currentUser); 13 9 14 const [applicationsByJobSeeker, setApplicationsByJobSeeker] = useState([]); 10 15 let applicationsByJobSeekerState = useSelector(state => state.appl.applicationsByJobSeeker); 11 16 const [dispatched, setDispatched] = useState(false); 12 17 18 const [logos, setLogos] = useState({}); 19 let logosState = useSelector(state => state.images.logos) 20 const [logoDispatched, setLogoDispatched] = useState(false); 21 22 23 13 24 useEffect(() => { 14 if(!dispatched && applicationsByJobSeekerState.length === 0) {15 dispatch(ApplicationActions.fetchApplicationsByJobSeeker( (success, response) => {25 if(!dispatched && (applicationsByJobSeekerState.length === 0 || applicationsByJobSeekerState.length === 1) ) { 26 dispatch(ApplicationActions.fetchApplicationsByJobSeeker(auth.id, (success, response) => { 16 27 if(success && response.data.length > 0) { 17 setApplicationsByJobSeeker( response.data);28 setApplicationsByJobSeeker(sortElementsBy(response.data, "submittedOn")); 18 29 } 30 setDispatched(true) 19 31 console.log("Fetch applications by job seeker GET") 20 32 })) 21 setDispatched(true) 33 22 34 } else { 23 setApplicationsByJobSeeker( applicationsByJobSeekerState);35 setApplicationsByJobSeeker(sortElementsBy(applicationsByJobSeekerState, "submittedOn")); 24 36 console.log("Fetch applications by job seeker STATE") 25 37 } 26 38 }, [applicationsByJobSeekerState]) 27 39 40 useEffect(() => { 41 42 if(dispatched && !logoDispatched) { 43 applicationsByJobSeeker.forEach(jobAd => { 44 if(jobAd.recruiterId && !logos[jobAd.recruiterId]) { 45 fetchLogo(jobAd.recruiterId); 46 } 47 }) 48 setLogoDispatched(true) 49 console.log("Fetch all logos GET") 50 } else if (logoDispatched){ 51 setLogos(logosState) 52 console.log("Fetch all logos STATE") 53 54 } 55 56 }, [dispatched, logosState]) 57 58 59 60 const fetchLogo = (recruiterId) => { 61 dispatch(RecruiterActions.downloadLogo(recruiterId, (success, response) => { 62 if(success) { 63 setLogos(prevLogos => ({...prevLogos, [recruiterId]: response})) 64 } 65 })); 66 }; 67 28 68 const options = [ 29 {value: 'PROPOSED', label: <span ><i className="fa-solid fa-paper-plane"></i> Proposed</span>},30 {value: 'UNDER_REVIEW', label: <span ><i className="fa-solid fa-file-pen"></i> Under Review</span>},31 {value: 'ACCEPTED', label: <span ><i className="fa-solid fa-user-check"></i> Accepted</span>},32 {value: 'DENIED', label: <span ><i className="fa-solid fa-user-slash"></i> Denied</span>}69 {value: 'PROPOSED', label: <span className="status" style={{backgroundColor: '#4A90E2'}}><i className="fa-solid fa-paper-plane"></i> Proposed</span>}, 70 {value: 'UNDER_REVIEW', label: <span className="status" style={{backgroundColor: '#F5A623'}}><i className="fa-solid fa-file-pen"></i> Under Review</span>}, 71 {value: 'ACCEPTED', label: <span className="status" style={{backgroundColor: '#7ED321'}}><i className="fa-solid fa-user-check"></i> Accepted</span>}, 72 {value: 'DENIED', label: <span className="status" style={{backgroundColor: '#D0021B'}}><i className="fa-solid fa-user-slash"></i> Denied</span>} 33 73 ]; 34 74 … … 40 80 41 81 return ( 42 <div className="applications-container"> 82 <div className="custom-container"> 83 43 84 <div className="application-title"> 44 85 <h3>Application history</h3> 45 86 </div> 46 87 {applicationsByJobSeeker && applicationsByJobSeeker.map((application, index) => ( 47 88 <div key={index} className="application-card"> 48 <div className="left-box"> 49 <span className="jobAd-title">{application.jobAdTitle}</span> 50 <br/> 51 <br/> 89 <div className="app-company-logo"> 90 <img 91 // loading gif 92 src={logosState[application.recruiterId]} 93 alt="" 94 width={75} height={75} 95 /> 96 </div> 97 98 <div className="app-info"> 99 <div className="jobAd-title">{application.jobAdTitle}</div> 52 100 <div className="contact-info"> 53 101 <div className="contact-item"> … … 68 116 </div> 69 117 70 <div className="right-box"> 71 <ViewApplicationDetails application={application}/> 72 <div className="select"> 73 <Select isDisabled={true} options={options} defaultValue={handleDefaultValue(application.status)}/> 74 </div> 118 <div className="app-status"> 119 <ApplicationDetailsModal application={application}/> 120 <> {handleDefaultValue(application.status).label}</> 121 {/*<div className="select">*/} 122 {/* <Select isDisabled={true} options={options} />*/} 123 {/*</div>*/} 75 124 76 125 </div>
Note:
See TracChangeset
for help on using the changeset viewer.