import "../shared_css/Random.css" import {useDispatch, useSelector} from "react-redux"; import {useEffect, useState} from "react"; import {JobAdvertisementActions} from "../../redux/actions/jobAdvertisementActions"; import {formatRelativeTime, sortElementsBy} from "../../utils/utils"; import {dataRangeOptions, industryOptions, industryOptionsFilter, sortOptions} from "../selectOptions"; import Select from "react-select"; import Roles from "../../enumerations/Roles"; import {Link} from "react-router-dom"; import JobType from "../../enumerations/JobType"; import {AUTH_TOKEN} from "../../axios/axiosInstance"; import {jwtDecode} from "jwt-decode"; import {RecruiterActions} from "../../redux/actions/recruiterActions"; export const Dashboard = () => { const dispatch = useDispatch(); const [jobAdvertisements, setJobAdvertisements] = useState([]); let jobAdvertisementsState = useSelector(state => state.jobAd.jobAdvertisements) const [jobDispatched, setJobDispatched] = useState(false); const [logos, setLogos] = useState({}); let logosState = useSelector(state => state.images.logos) const [logoDispatched, setLogoDispatched] = useState(false); const auth = useSelector(state => state.auth); // const [role, setRole] = useState(""); const [selectedSortOrder, setSelectedSortOrder] = useState("date_newest"); const [selectedIndustry, setSelectedIndustry] = useState("all"); const [searchTerm, setSearchTerm] = useState(""); useEffect(() => { if (!jobDispatched && jobAdvertisementsState.length == 0) { dispatch(JobAdvertisementActions.fetchJobAdvertisements((success, response) => { if (success && response.data.length > 0) { setJobAdvertisements(sortElementsBy(response.data, "postedOn")) } setJobDispatched(true) console.log("Fetch all job advertisements GET") })) } else { setJobAdvertisements(sortElementsBy(jobAdvertisementsState, "postedOn")) console.log("Fetch all job advertisements STATE") } }, [jobAdvertisementsState]) useEffect(() => { if(jobDispatched && !logoDispatched) { jobAdvertisements.forEach(jobAd => { if(jobAd.recruiterId && !logos[jobAd.recruiterId]) { fetchLogo(jobAd.recruiterId); } }) setLogoDispatched(true) console.log("Fetch all logos GET") } else { setLogos(logosState) console.log("Fetch all logos STATE") } }, [jobDispatched, logosState]) const fetchLogo = (recruiterId) => { dispatch(RecruiterActions.downloadLogo(recruiterId, (success, response) => { if(success) { setLogos(prevLogos => ({...prevLogos, [recruiterId]: response})) } })); }; let filterJobAdvertisements = () => { JobAdvertisementActions.filterJobAdvertisements( { searchTerm: searchTerm, industry: selectedIndustry, sortOrder: selectedSortOrder }, (success, response) => { if (success) { setJobAdvertisements(response.data); } } ) } return (
setSearchTerm(event.target.value)} />
setSelectedSortOrder(option.value)} options={sortOptions} className="sort-range sort" />
{jobAdvertisements && jobAdvertisements.map((jobAd, index) => (
${jobAd.startingSalary}/hr {jobAd.jobType === JobType.JOB ? "Job" : "Internship"} {!jobAd.active && Expired}
{jobAd.title}
{jobAd.industry} • {formatRelativeTime(jobAd.postedOn)}
Company: {jobAd.recruiterName}
Read more
))}
) }