Rev 3089 | Rev 3432 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useState } from "react";
import { useParams } from "react-router-dom";
import { useDispatch } from "react-redux";
import { Button, Grid } from "@mui/material";
import { axios, parse } from "@utils";
import { useFetch } from "@hooks";
import { addNotification } from "@store/notification/notification.actions";
import Spinner from "@components/UI/Spinner";
import JobCard from "@components/job/job-card";
import JobAttr from "@components/job/job-attr";
import CompanyInfo from "@components/job/company-info";
import ApplyModal from "@components/job/apply-modal";
const JobViewPage = () => {
const [showApplyModal, setShowApplyModal] = useState(false);
const { uuid } = useParams();
const dispatch = useDispatch();
const { data: job, loading, mutate } = useFetch(`/job/view/${uuid}`);
const isJobApplied = job?.job_apply_operation === "remove-apply";
const toggleApplyModal = () => setShowApplyModal(!showApplyModal);
const toggleApplication = () => {
mutate({
...job,
job_apply_operation: isJobApplied ? "apply" : "remove-apply",
});
};
const removeApply = async () => {
try {
const response = await axios.post(
`/job/remove-apply-job/${job.job_uuid}`
);
const { data, success } = response.data;
if (!success) throw new Error("Error al eliminar la aplicación");
dispatch(addNotification({ style: "success", msg: data }));
toggleApplication();
} catch (error) {
dispatch(addNotification({ style: "danger", msg: error.message }));
}
};
const apply = async (apply) => {
try {
const msg = await axios.post(`/job/apply-job/${job.job_uuid}`, apply);
dispatch(addNotification({ style: "success", msg }));
toggleApplication();
toggleApplyModal();
} catch (error) {
dispatch(
addNotification({
styled: "danger",
msg: "Error al aplicar al trabajo",
})
);
}
};
if (loading) {
return <Spinner />;
}
return (
<>
<Grid container spacing={1}>
<Grid item xs md={8} display="flex" direction="column" gap={0.5}>
<JobCard job={job} />
<JobAttr title="Visión general" info={parse(job?.job_description)} />
<JobAttr
title="Último día de aplicación"
info={job?.last_date_of_application}
/>
<JobAttr title="Tipo de empleo" info={job?.employment_type} />
<JobAttr title="Ubicación" info={job?.location} />
<JobAttr title="Experiencia" info={job?.experience} />
<JobAttr title="Salario" info={job?.salary} />
<JobAttr title="Categoría" info={job?.job_category} />
<JobAttr title="Habilidades" info={job?.job_skills} />
<JobAttr title="Idiomas" info={job?.job_languages} />
<JobAttr title="Grados" info={job?.job_degrees} />
</Grid>
<Grid item xs md={4} display="flex" direction="column" gap={0.5}>
<Button
variant={isJobApplied ? "secondary" : "primary"}
onClick={isJobApplied ? removeApply : toggleApplyModal}
disabled={loading}
>
{isJobApplied ? "Quitar aplicación" : "Aplicar"}
</Button>
<CompanyInfo company={job} />
</Grid>
</Grid>
<ApplyModal
show={showApplyModal}
profiles={job?.user_profiles}
onConfirm={apply}
onClose={toggleApplyModal}
/>
</>
);
};
export default JobViewPage;