Rev 7278 | Rev 7311 | 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 {
jobId = '',
companyId = '',
companyImage = '',
jobTitle = '',
companyName = '',
timeElapsed = '',
location = '',
jobSaved = '',
lastDateOfApplication = '',
employmentType = '',
jobCategory = '',
jobDescription = '',
jobSkills = '',
totalApplications = '',
jobVisits = '',
experience = '',
salary = '',
jobLanguages = '',
jobDegrees = '',
companyIndustry = '',
companySize = '',
companyAddress = '',
companyWebsite = '',
companyFoundationYear = '',
jobApplyOperation = '',
userProfiles = '',
} = job
const handleShowApplyModal = () => {
setShowApplyModal(!showApplyModal)
}
const handleApply = () => {
setIsJobApplied(!isJobApplied)
}
const getJob = () => {
getBackendVars(`/job/view/${uuid}`)
.then((response) => {
console.log(response)
setJob(response)
})
.catch((error) => {
throw new Error(error)
})
}
const removeApply = async () => {
setLoading(true)
axios
.post(`/job/remove-apply-job/${job}`)
.then(({ data: response }) => {
const { data, success } = response
if (!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(jobApplyOperation === 'apply')
}, [jobApplyOperation])
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}>
<Description
jobId={jobId}
companyId={companyId}
companyImage={companyImage}
jobTitle={jobTitle}
companyName={companyName}
timeElapsed={timeElapsed}
location={location}
jobSaved={jobSaved}
lastDateOfApplication={lastDateOfApplication}
employmentType={employmentType}
jobCategory={jobCategory}
jobDescription={jobDescription}
jobSkills={jobSkills}
totalApplications={totalApplications}
jobVisits={jobVisits}
/>
<JobAttr title="Visión general" info={parse(jobDescription)} />
<JobAttr
title="Último día de aplicación"
info={lastDateOfApplication}
/>
<JobAttr title="Tipo de empleo" info={employmentType} />
<JobAttr title="Ubicación" info={location} />
<JobAttr title="Experiencia" info={experience} />
<JobAttr title="Salario" info={salary} />
<JobAttr title="Categoría" info={jobCategory} />
<JobAttr title="Habilidades" info={jobSkills} />
<JobAttr title="Idiomas" info={jobLanguages} />
<JobAttr title="Grados" info={jobDegrees} />
</Col>
<Col item xs={12} md={4}>
<button
type="button"
className={`btn ${
isJobApplied ? 'btn-secondary' : 'btn-primary'
}`}
onClick={isJobApplied ? removeApply : handleShowApplyModal}
disabled={loading}
>
{isJobApplied ? 'Quitar aplicación' : 'Aplicar'}
</button>
<ClientInfo
companySize={companySize}
companyAddress={companyAddress}
companyWebsite={companyWebsite}
companyIndustry={companyIndustry}
companyFoundationYear={companyFoundationYear}
/>
</Col>
</Grid>
</Container>
<ApplyModal
jobId={jobId}
show={showApplyModal}
onApplied={handleApply}
userProfiles={userProfiles}
onHide={() => setShowApplyModal(false)}
/>
</>
)
}
export default JobViewPage