Proyectos de Subversion LeadersLinked - SPA

Rev

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

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