Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 2806 | Rev 3083 | Ir a la última revisión | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 2806 Rev 3082
Línea 1... Línea 1...
1
import React, { useEffect, useState } from 'react'
1
import React, { useState } from 'react'
2
import { axios } from '../../utils'
-
 
3
import { useParams } from 'react-router-dom'
2
import { useParams } from 'react-router-dom'
4
import { useDispatch } from 'react-redux'
3
import { useDispatch } from 'react-redux'
5
import { getBackendVars } from '../../services/backendVars'
-
 
6
import { addNotification } from '../../redux/notification/notification.actions'
-
 
7
import { Grid, Tab, Tabs } from '@mui/material'
4
import { Grid, Tab, Tabs } from '@mui/material'
8
import parse from 'html-react-parser'
-
 
9
import styled from 'styled-components'
-
 
Línea -... Línea 5...
-
 
5
 
10
 
6
import { useFetch } from '@hooks'
11
import Description from '../../components/job/Description'
7
import ApplyModal from '@components/job/ApplyModal'
12
import JobAttr from '../../components/job/JobAttr'
8
import JobAttr from '@components/job/JobAttr'
13
import ClientInfo from '../../components/job/ClientInfo'
9
import { axios, parse } from '@utils'
14
import ApplyModal from '../../components/job/ApplyModal'
-
 
15
 
10
import Description from '@components/job/Description'
16
const Col = styled(Grid)`
11
import { addNotification } from '@store/notification/notification.actions'
17
  display: flex;
12
import ClientInfo from '@components/job/ClientInfo'
18
  flex-direction: column !important;
-
 
19
  gap: 0.5rem;
-
 
Línea 20... Línea 13...
20
`
13
import Spinner from '@components/UI/Spinner'
21
 
-
 
22
const JobViewPage = () => {
-
 
23
  const [job, setJob] = useState({})
14
 
24
  const [isJobApplied, setIsJobApplied] = useState(false)
15
const JobViewPage = () => {
25
  const [showApplyModal, setShowApplyModal] = useState(false)
16
  const [showApplyModal, setShowApplyModal] = useState(false)
26
  const [loading, setLoading] = useState(false)
17
  const [loading, setLoading] = useState(false)
Línea -... Línea 18...
-
 
18
  const { uuid } = useParams()
-
 
19
  const dispatch = useDispatch()
-
 
20
 
-
 
21
  const { data: job, isLoading } = useFetch(`/job/view/${uuid}`)
27
  const { uuid } = useParams()
22
 
28
  const dispatch = useDispatch()
23
  const isJobApplied = job?.job_apply_operation === 'remove-apply'
29
 
24
 
Línea 30... Línea 25...
30
  const handleShowApplyModal = () => {
25
  const handleShowApplyModal = () => {
31
    setShowApplyModal(!showApplyModal)
26
    setShowApplyModal(!showApplyModal)
32
  }
-
 
33
 
-
 
34
  const handleApply = () => {
-
 
35
    setIsJobApplied(!isJobApplied)
-
 
36
  }
-
 
37
 
-
 
38
  const getJob = () => {
-
 
39
    getBackendVars(`/job/view/${uuid}`)
-
 
40
      .then((response) => {
-
 
41
        setJob(response)
-
 
42
      })
27
  }
Línea 43... Línea 28...
43
      .catch((error) => {
28
 
44
        dispatch(addNotification({ style: 'danger', msg: error.message }))
29
  const handleApply = () => {
45
      })
30
    // setIsJobApplied(!isJobApplied)
46
  }
31
  }
47
 
-
 
48
  const removeApply = async () => {
32
 
49
    setLoading(true)
-
 
50
    axios
33
  const removeApply = async () => {
51
      .post(`/job/remove-apply-job/${job}`)
34
    setLoading(true)
52
      .then(({ data: response }) => {
35
    try {
53
        const { data, success } = response
36
      const response = await axios.post(`/job/remove-apply-job/${job}`)
54
 
-
 
55
        if (!success) {
-
 
56
          const errorMessage =
37
      const { data, success } = response.data
57
            typeof data === 'string'
38
      if (!success) throw new Error('Error al eliminar la aplicación')
58
              ? data
-
 
59
              : 'Ha ocurrido un error, por favor intente más tarde'
39
      dispatch(addNotification({ styled: 'success', msg: data }))
60
 
40
      handleApply()
61
          dispatch(addNotification({ styled: 'danger', msg: errorMessage }))
-
 
62
        }
41
    } catch (error) {
Línea 63... Línea 42...
63
 
42
      dispatch(addNotification({ styled: 'danger', msg: error.message }))
64
        handleApply()
43
    } finally {
65
      })
44
      setLoading(false)
66
      .finally(() => setLoading(false))
-
 
67
  }
-
 
68
 
-
 
69
  useEffect(() => {
-
 
Línea 70... Línea 45...
70
    getJob()
45
    }
71
  }, [])
46
  }
72
 
47
 
73
  useEffect(() => {
48
  if (isLoading) {
74
    setIsJobApplied(job?.job_apply_operation === 'remove-apply')
49
    return <Spinner />
75
  }, [job])
50
  }
Línea 76... Línea 51...
76
 
51
 
77
  return (
52
  return (
78
    <>
53
    <>
79
      <Tabs>
54
      <Tabs>
80
        <Tab label='Avance' value='user' disableRipple />
55
        <Tab label='Avance' value='user' disableRipple />
81
        <Tab label='Información' value='group' disableRipple />
56
        <Tab label='Información' value='group' disableRipple />
82
      </Tabs>
57
      </Tabs>
Línea 98... Línea 73...
98
            jobDescription={job?.job_description}
73
            jobDescription={job?.job_description}
99
            jobSkills={job?.job_skills}
74
            jobSkills={job?.job_skills}
100
            totalApplications={job?.total_applications}
75
            totalApplications={job?.total_applications}
101
            jobVisits={job?.job_visits}
76
            jobVisits={job?.job_visits}
102
          />
77
          />
103
          <JobAttr
-
 
104
            title='Visión general'
-
 
105
            info={job?.job_description && parse(job?.job_description)}
78
          <JobAttr title='Visión general' info={parse(job?.job_description)} />
106
          />
-
 
107
          <JobAttr
79
          <JobAttr
108
            title='Último día de aplicación'
80
            title='Último día de aplicación'
109
            info={job?.last_date_of_application}
81
            info={job?.last_date_of_application}
110
          />
82
          />
111
          <JobAttr title='Tipo de empleo' info={job?.employment_type} />
83
          <JobAttr title='Tipo de empleo' info={job?.employment_type} />
Línea 114... Línea 86...
114
          <JobAttr title='Salario' info={job?.salary} />
86
          <JobAttr title='Salario' info={job?.salary} />
115
          <JobAttr title='Categoría' info={job?.job_category} />
87
          <JobAttr title='Categoría' info={job?.job_category} />
116
          <JobAttr title='Habilidades' info={job?.job_skills} />
88
          <JobAttr title='Habilidades' info={job?.job_skills} />
117
          <JobAttr title='Idiomas' info={job?.job_languages} />
89
          <JobAttr title='Idiomas' info={job?.job_languages} />
118
          <JobAttr title='Grados' info={job?.job_degrees} />
90
          <JobAttr title='Grados' info={job?.job_degrees} />
119
        </Col>
91
        </Grid>
Línea 120... Línea 92...
120
 
92
 
121
        <Col item xs={12} md={4}>
93
        <Grid item xs md={4}>
122
          <button
94
          <button
123
            type='button'
95
            type='button'
124
            className={`btn ${isJobApplied ? 'btn-secondary' : 'btn-primary'}`}
96
            className={`btn ${isJobApplied ? 'btn-secondary' : 'btn-primary'}`}
125
            onClick={isJobApplied ? removeApply : handleShowApplyModal}
97
            onClick={isJobApplied ? removeApply : handleShowApplyModal}
126
            disabled={loading}
98
            disabled={loading}
-
 
99
          >
127
          >
100
            {job?.job_apply_operation === 'remove-apply'
-
 
101
              ? 'Quitar aplicación'
128
            {isJobApplied ? 'Quitar aplicación' : 'Aplicar'}
102
              : 'Aplicar'}
129
          </button>
103
          </button>
130
          <ClientInfo
104
          <ClientInfo
131
            companySize={job?.company_size}
105
            companySize={job?.company_size}
132
            companyAddress={job?.company_address}
106
            companyAddress={job?.company_address}
133
            companyWebsite={job?.company_website}
107
            companyWebsite={job?.company_website}
134
            companyIndustry={job?.company_industry}
108
            companyIndustry={job?.company_industry}
135
            companyFoundationYear={job?.company_foundation_year}
109
            companyFoundationYear={job?.company_foundation_year}
136
          />
110
          />
137
        </Col>
111
        </Grid>
Línea 138... Línea 112...
138
      </Grid>
112
      </Grid>
139
 
113
 
140
      <ApplyModal
114
      <ApplyModal