Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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