Rev 7312 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useEffect, useState } from 'react'import { axios } from '../../utils'import { useParams } from 'react-router-dom'import { useDispatch } from 'react-redux'import { getBackendVars } from '../../services/backendVars'import { addNotification } from '../../redux/notification/notification.actions'import { Container, Grid, Tab, Tabs } from '@mui/material'import parse from 'html-react-parser'import styled from 'styled-components'import Description from '../../components/job/Description'import JobAttr from '../../components/job/JobAttr'import ClientInfo from '../../components/job/ClientInfo'import ApplyModal from '../../components/job/ApplyModal'const Col = styled(Grid)`display: flex;flex-direction: column !important;gap: 0.5rem;`const JobViewPage = () => {const [job, setJob] = useState({})const [isJobApplied, setIsJobApplied] = useState(false)const [showApplyModal, setShowApplyModal] = useState(false)const [loading, setLoading] = useState(false)const { uuid } = useParams()const dispatch = useDispatch()const handleShowApplyModal = () => {setShowApplyModal(!showApplyModal)}const handleApply = () => {setIsJobApplied(!isJobApplied)}const getJob = () => {getBackendVars(`/job/view/${uuid}`).then((response) => {setJob(response)}).catch((error) => {dispatch(addNotification({style: 'danger',msg: 'Error interno. Por favor, intente más tarde.',}))throw new Error(error)})}const removeApply = async () => {setLoading(true)axios.post(`/job/remove-apply-job/${job}`).then(({ data: response }) => {const { data, success } = responseif (!success) {const errorMessage =typeof data === 'string'? data: 'Ha ocurrido un error, por favor intente más tarde'dispatch(addNotification({ styled: 'danger', msg: errorMessage }))}handleApply()}).finally(() => setLoading(false))}useEffect(() => {getJob()}, [])useEffect(() => {setIsJobApplied(job?.job_apply_operation === 'apply')}, [job])return (<><Container as="main" className="px-0"><Tabs><Tab label="Avance" value="user" disableRipple /><Tab label="Información" value="group" disableRipple /></Tabs><Grid container spacing={2}><Col item xs={12} md={8} spacing={3}><DescriptionjobId={job?.job_uuid}companyId={job?.company_uuid}companyImage={job?.company_image}jobTitle={job?.job_title}companyName={job?.company_name}timeElapsed={job?.timeElapsed}location={job?.location}jobSaved={job?.job_save_operation}lastDateOfApplication={job?.last_date_of_application}employmentType={job?.employment_type}jobCategory={job?.job_category}jobDescription={job?.job_description}jobSkills={job?.job_skills}totalApplications={job?.total_applications}jobVisits={job?.job_visits}/><JobAttrtitle="Visión general"info={job?.job_description && 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} /></Col><Col item xs={12} md={4}><buttontype="button"className={`btn ${isJobApplied ? 'btn-secondary' : 'btn-primary'}`}onClick={isJobApplied ? removeApply : handleShowApplyModal}disabled={loading}>{isJobApplied ? 'Quitar aplicación' : 'Aplicar'}</button><ClientInfocompanySize={job?.company_size}companyAddress={job?.company_address}companyWebsite={job?.company_website}companyIndustry={job?.company_industry}companyFoundationYear={job?.company_foundation_year}/></Col></Grid></Container><ApplyModaljobId={job?.job_uuid}show={showApplyModal}onApplied={handleApply}userProfiles={job?.user_profiles}onHide={() => setShowApplyModal(false)}/></>)}export default JobViewPage