Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 7277 | Rev 7301 | 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 {
7269 stevensc 31
    jobId = '',
32
    companyId = '',
33
    companyImage = '',
34
    jobTitle = '',
35
    companyName = '',
36
    timeElapsed = '',
37
    location = '',
38
    jobSaved = '',
39
    lastDateOfApplication = '',
40
    employmentType = '',
41
    jobCategory = '',
42
    jobDescription = '',
43
    jobSkills = '',
44
    totalApplications = '',
45
    jobVisits = '',
46
    experience = '',
47
    salary = '',
48
    jobLanguages = '',
49
    jobDegrees = '',
50
    companyIndustry = '',
51
    companySize = '',
52
    companyAddress = '',
53
    companyWebsite = '',
54
    companyFoundationYear = '',
55
    jobApplyOperation = '',
56
    userProfiles = '',
7268 stevensc 57
  } = job
58
 
59
  const handleShowApplyModal = () => {
60
    setShowApplyModal(!showApplyModal)
61
  }
62
 
63
  const handleApply = () => {
64
    setIsJobApplied(!isJobApplied)
65
  }
66
 
67
  const getJob = () => {
7270 stevensc 68
    getBackendVars(`/job/view/${uuid}}`)
7268 stevensc 69
      .then((response) => {
70
        console.log(response)
71
        setJob(response)
72
      })
73
      .catch((error) => {
74
        throw new Error(error)
75
      })
76
  }
77
 
78
  const removeApply = async () => {
79
    setLoading(true)
80
    axios
81
      .post(`/job/remove-apply-job/${job}`)
82
      .then(({ data: response }) => {
83
        const { data, success } = response
84
 
85
        if (!success) {
86
          const errorMessage =
87
            typeof data === 'string'
88
              ? data
89
              : 'Ha ocurrido un error, por favor intente más tarde'
90
 
91
          dispatch(addNotification({ styled: 'danger', msg: errorMessage }))
92
        }
93
 
94
        handleApply()
95
      })
96
      .finally(() => setLoading(false))
97
  }
98
 
99
  useEffect(() => {
100
    getJob()
101
  }, [])
102
 
103
  useEffect(() => {
104
    setIsJobApplied(jobApplyOperation === 'apply')
105
  }, [jobApplyOperation])
106
 
107
  return (
108
    <>
109
      <Container as="main" className="px-0">
110
        <Tabs>
111
          <Tab label="Avance" value="user" disableRipple />
112
          <Tab label="Información" value="group" disableRipple />
113
        </Tabs>
114
        <Grid container spacing={2}>
7277 stevensc 115
          <Col item xs={12} md={8} spacing={3}>
7268 stevensc 116
            <Description
117
              jobId={jobId}
118
              companyId={companyId}
119
              companyImage={companyImage}
120
              jobTitle={jobTitle}
121
              companyName={companyName}
122
              timeElapsed={timeElapsed}
123
              location={location}
124
              jobSaved={jobSaved}
125
              lastDateOfApplication={lastDateOfApplication}
126
              employmentType={employmentType}
127
              jobCategory={jobCategory}
128
              jobDescription={jobDescription}
129
              jobSkills={jobSkills}
130
              totalApplications={totalApplications}
131
              jobVisits={jobVisits}
132
            />
133
            <JobAttr title="Visión general" info={parse(jobDescription)} />
134
            <JobAttr
135
              title="Último día de aplicación"
136
              info={lastDateOfApplication}
137
            />
138
            <JobAttr title="Tipo de empleo" info={employmentType} />
139
            <JobAttr title="Ubicación" info={location} />
140
            <JobAttr title="Experiencia" info={experience} />
141
            <JobAttr title="Salario" info={salary} />
142
            <JobAttr title="Categoría" info={jobCategory} />
143
            <JobAttr title="Habilidades" info={jobSkills} />
144
            <JobAttr title="Idiomas" info={jobLanguages} />
145
            <JobAttr title="Grados" info={jobDegrees} />
7277 stevensc 146
          </Col>
7268 stevensc 147
 
7277 stevensc 148
          <Col item xs={12} md={4}>
7268 stevensc 149
            <button
150
              type="button"
151
              className={`btn ${
152
                isJobApplied ? 'btn-secondary' : 'btn-primary'
153
              }`}
154
              onClick={isJobApplied ? removeApply : handleShowApplyModal}
155
              disabled={loading}
156
            >
157
              {isJobApplied ? 'Quitar aplicación' : 'Aplicar'}
158
            </button>
159
            <ClientInfo
160
              companySize={companySize}
161
              companyAddress={companyAddress}
162
              companyWebsite={companyWebsite}
163
              companyIndustry={companyIndustry}
164
              companyFoundationYear={companyFoundationYear}
165
            />
7277 stevensc 166
          </Col>
7268 stevensc 167
        </Grid>
168
      </Container>
169
      <ApplyModal
170
        jobId={jobId}
171
        show={showApplyModal}
172
        onApplied={handleApply}
173
        userProfiles={userProfiles}
174
        onHide={() => setShowApplyModal(false)}
175
      />
176
    </>
177
  )
178
}
179
 
180
export default JobViewPage