Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
3082 stevensc 1
import React, { useState } from 'react'
5 stevensc 2
import { useParams } from 'react-router-dom'
3
import { useDispatch } from 'react-redux'
2806 stevensc 4
import { Grid, Tab, Tabs } from '@mui/material'
5 stevensc 5
 
3083 stevensc 6
import { axios, parse } from '@utils'
3082 stevensc 7
import { useFetch } from '@hooks'
8
import { addNotification } from '@store/notification/notification.actions'
3083 stevensc 9
 
10
import Spinner from '@components/UI/Spinner'
11
import JobCard from '@components/job/job-card'
12
import JobAttr from '@components/job/job-attr'
3084 stevensc 13
import ClientInfo from '@components/job/client-info'
3083 stevensc 14
import ApplyModal from '@components/job/ApplyModal'
5 stevensc 15
 
16
const JobViewPage = () => {
17
  const [showApplyModal, setShowApplyModal] = useState(false)
18
  const [loading, setLoading] = useState(false)
19
  const { uuid } = useParams()
20
  const dispatch = useDispatch()
21
 
3083 stevensc 22
  const { data: job, isLoading, mutate } = useFetch(`/job/view/${uuid}`)
3082 stevensc 23
 
24
  const isJobApplied = job?.job_apply_operation === 'remove-apply'
25
 
3083 stevensc 26
  const toggleApplyModal = () => setShowApplyModal(!showApplyModal)
5 stevensc 27
 
28
  const handleApply = () => {
3083 stevensc 29
    mutate({ ...job, job_apply_operation: 'apply' })
5 stevensc 30
  }
31
 
32
  const removeApply = async () => {
33
    setLoading(true)
3082 stevensc 34
    try {
35
      const response = await axios.post(`/job/remove-apply-job/${job}`)
36
      const { data, success } = response.data
37
      if (!success) throw new Error('Error al eliminar la aplicación')
38
      dispatch(addNotification({ styled: 'success', msg: data }))
39
      handleApply()
40
    } catch (error) {
41
      dispatch(addNotification({ styled: 'danger', msg: error.message }))
42
    } finally {
43
      setLoading(false)
44
    }
45
  }
5 stevensc 46
 
3082 stevensc 47
  if (isLoading) {
48
    return <Spinner />
5 stevensc 49
  }
50
 
51
  return (
52
    <>
2806 stevensc 53
      <Tabs>
54
        <Tab label='Avance' value='user' disableRipple />
55
        <Tab label='Información' value='group' disableRipple />
56
      </Tabs>
5 stevensc 57
 
2806 stevensc 58
      <Grid container spacing={2}>
3082 stevensc 59
        <Grid item xs md={8} spacing={3}>
3083 stevensc 60
          <JobCard job={job} />
61
 
3082 stevensc 62
          <JobAttr title='Visión general' info={parse(job?.job_description)} />
2806 stevensc 63
          <JobAttr
64
            title='Último día de aplicación'
65
            info={job?.last_date_of_application}
66
          />
67
          <JobAttr title='Tipo de empleo' info={job?.employment_type} />
68
          <JobAttr title='Ubicación' info={job?.location} />
69
          <JobAttr title='Experiencia' info={job?.experience} />
70
          <JobAttr title='Salario' info={job?.salary} />
71
          <JobAttr title='Categoría' info={job?.job_category} />
72
          <JobAttr title='Habilidades' info={job?.job_skills} />
73
          <JobAttr title='Idiomas' info={job?.job_languages} />
74
          <JobAttr title='Grados' info={job?.job_degrees} />
3082 stevensc 75
        </Grid>
2806 stevensc 76
 
3082 stevensc 77
        <Grid item xs md={4}>
2806 stevensc 78
          <button
79
            type='button'
80
            className={`btn ${isJobApplied ? 'btn-secondary' : 'btn-primary'}`}
3083 stevensc 81
            onClick={isJobApplied ? removeApply : toggleApplyModal}
2806 stevensc 82
            disabled={loading}
83
          >
3082 stevensc 84
            {job?.job_apply_operation === 'remove-apply'
85
              ? 'Quitar aplicación'
86
              : 'Aplicar'}
2806 stevensc 87
          </button>
88
          <ClientInfo
89
            companySize={job?.company_size}
90
            companyAddress={job?.company_address}
91
            companyWebsite={job?.company_website}
92
            companyIndustry={job?.company_industry}
93
            companyFoundationYear={job?.company_foundation_year}
94
          />
3082 stevensc 95
        </Grid>
2806 stevensc 96
      </Grid>
97
 
5 stevensc 98
      <ApplyModal
99
        jobId={job?.job_uuid}
100
        show={showApplyModal}
3083 stevensc 101
        userProfiles={job?.user_profiles}
102
        onHide={toggleApplyModal}
5 stevensc 103
        onApplied={handleApply}
104
      />
105
    </>
106
  )
107
}
108
 
109
export default JobViewPage