Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 7310 | Rev 7312 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
7268 stevensc 1
import React, { useEffect, useState } from 'react'
2
import { axios } from '../../utils'
3
import { useParams } from 'react-router-dom'
4
import { useDispatch } from 'react-redux'
5
import { getBackendVars } from '../../services/backendVars'
6
import { addNotification } from '../../redux/notification/notification.actions'
7
import { Container, Grid, Tab, Tabs } from '@mui/material'
8
import parse from 'html-react-parser'
7277 stevensc 9
import styled from 'styled-components'
7268 stevensc 10
 
11
import Description from '../../components/job/Description'
12
import JobAttr from '../../components/job/JobAttr'
13
import ClientInfo from '../../components/job/ClientInfo'
14
import ApplyModal from '../../components/job/ApplyModal'
15
 
7277 stevensc 16
const Col = styled(Grid)`
17
  display: flex;
7278 stevensc 18
  flex-direction: column !important;
7277 stevensc 19
  gap: 0.5rem;
20
`
21
 
7268 stevensc 22
const JobViewPage = () => {
23
  const [job, setJob] = useState({})
24
  const [isJobApplied, setIsJobApplied] = useState(false)
25
  const [showApplyModal, setShowApplyModal] = useState(false)
26
  const [loading, setLoading] = useState(false)
27
  const { uuid } = useParams()
28
  const dispatch = useDispatch()
29
 
30
  const {
7310 stevensc 31
    company_uuid,
32
    company_image,
33
    job_uuid,
34
    job_title,
35
    job_description,
36
    total_applications,
37
    location,
38
    employment_type,
39
    last_date_of_application,
40
    job_category,
41
    timeElapsed,
42
    experience,
43
    salary,
44
    job_degrees,
45
    job_languages,
46
    job_skills,
47
    job_visits,
48
    job_apply_operation,
49
    job_save_operation,
50
    company_name,
51
    company_foundation_year,
52
    company_website,
53
    company_industry,
54
    company_size,
55
    company_address,
56
    user_profiles,
57
    // skills,
58
    // languages,
59
    // degrees,
7268 stevensc 60
  } = job
61
 
62
  const handleShowApplyModal = () => {
63
    setShowApplyModal(!showApplyModal)
64
  }
65
 
66
  const handleApply = () => {
67
    setIsJobApplied(!isJobApplied)
68
  }
69
 
70
  const getJob = () => {
7301 stevensc 71
    getBackendVars(`/job/view/${uuid}`)
7268 stevensc 72
      .then((response) => {
73
        setJob(response)
74
      })
75
      .catch((error) => {
7310 stevensc 76
        dispatch(
77
          addNotification({
78
            style: 'danger',
79
            msg: 'Error interno. Por favor, intente más tarde.',
80
          })
81
        )
7268 stevensc 82
        throw new Error(error)
83
      })
84
  }
85
 
86
  const removeApply = async () => {
87
    setLoading(true)
88
    axios
89
      .post(`/job/remove-apply-job/${job}`)
90
      .then(({ data: response }) => {
91
        const { data, success } = response
92
 
93
        if (!success) {
94
          const errorMessage =
95
            typeof data === 'string'
96
              ? data
97
              : 'Ha ocurrido un error, por favor intente más tarde'
98
 
99
          dispatch(addNotification({ styled: 'danger', msg: errorMessage }))
100
        }
101
 
102
        handleApply()
103
      })
104
      .finally(() => setLoading(false))
105
  }
106
 
107
  useEffect(() => {
108
    getJob()
109
  }, [])
110
 
111
  useEffect(() => {
7310 stevensc 112
    setIsJobApplied(job_apply_operation === 'apply')
113
  }, [job_apply_operation])
7268 stevensc 114
 
115
  return (
116
    <>
117
      <Container as="main" className="px-0">
118
        <Tabs>
119
          <Tab label="Avance" value="user" disableRipple />
120
          <Tab label="Información" value="group" disableRipple />
121
        </Tabs>
122
        <Grid container spacing={2}>
7277 stevensc 123
          <Col item xs={12} md={8} spacing={3}>
7268 stevensc 124
            <Description
7310 stevensc 125
              jobId={job_uuid}
126
              companyId={company_uuid}
127
              companyImage={company_image}
128
              jobTitle={job_title}
129
              companyName={company_name}
7268 stevensc 130
              timeElapsed={timeElapsed}
131
              location={location}
7310 stevensc 132
              jobSaved={job_save_operation}
133
              lastDateOfApplication={last_date_of_application}
134
              employmentType={employment_type}
135
              jobCategory={job_category}
136
              jobDescription={job_description}
137
              jobSkills={job_skills}
138
              totalApplications={total_applications}
139
              jobVisits={job_visits}
7268 stevensc 140
            />
141
            <JobAttr
7311 stevensc 142
              title="Visión general"
143
              info={job_description && parse(job_description)}
144
            />
145
            <JobAttr
7268 stevensc 146
              title="Último día de aplicación"
7310 stevensc 147
              info={last_date_of_application}
7268 stevensc 148
            />
7310 stevensc 149
            <JobAttr title="Tipo de empleo" info={employment_type} />
7268 stevensc 150
            <JobAttr title="Ubicación" info={location} />
151
            <JobAttr title="Experiencia" info={experience} />
152
            <JobAttr title="Salario" info={salary} />
7310 stevensc 153
            <JobAttr title="Categoría" info={job_category} />
154
            <JobAttr title="Habilidades" info={job_skills} />
155
            <JobAttr title="Idiomas" info={job_languages} />
156
            <JobAttr title="Grados" info={job_degrees} />
7277 stevensc 157
          </Col>
7268 stevensc 158
 
7277 stevensc 159
          <Col item xs={12} md={4}>
7268 stevensc 160
            <button
161
              type="button"
162
              className={`btn ${
163
                isJobApplied ? 'btn-secondary' : 'btn-primary'
164
              }`}
165
              onClick={isJobApplied ? removeApply : handleShowApplyModal}
166
              disabled={loading}
167
            >
168
              {isJobApplied ? 'Quitar aplicación' : 'Aplicar'}
169
            </button>
170
            <ClientInfo
7310 stevensc 171
              companySize={company_size}
172
              companyAddress={company_address}
173
              companyWebsite={company_website}
174
              companyIndustry={company_industry}
175
              companyFoundationYear={company_foundation_year}
7268 stevensc 176
            />
7277 stevensc 177
          </Col>
7268 stevensc 178
        </Grid>
179
      </Container>
180
      <ApplyModal
7310 stevensc 181
        jobId={job_uuid}
7268 stevensc 182
        show={showApplyModal}
183
        onApplied={handleApply}
7310 stevensc 184
        userProfiles={user_profiles}
7268 stevensc 185
        onHide={() => setShowApplyModal(false)}
186
      />
187
    </>
188
  )
189
}
190
 
191
export default JobViewPage