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)} /><JobAttrtitle="Ú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}><Buttonvariant={isJobApplied ? "secondary" : "primary"}onClick={isJobApplied ? removeApply : toggleApplyModal}disabled={loading}>{isJobApplied ? "Quitar aplicación" : "Aplicar"}</Button><CompanyInfo company={job} /></Grid></Grid><ApplyModalshow={showApplyModal}profiles={job?.user_profiles}onConfirm={apply}onClose={toggleApplyModal}/></>);};export default JobViewPage;