Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 5481 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
5473 stevensc 1
/* eslint-disable react/prop-types */
5478 stevensc 2
import React, { useState, useRef, useEffect } from 'react'
3
import { axios } from '../../../utils'
4
import { useSelector } from 'react-redux'
5496 stevensc 5
 
6
import AddIcon from '@mui/icons-material/Add'
5478 stevensc 7
import IconButton from '@mui/material/IconButton'
8
import Spinner from '../../../shared/loading-spinner/Spinner'
9
import EducationModal from './EducationModal'
10
import EducationItem from './EducationItem'
11
import EmptySection from '../../../shared/empty-section/EmptySection'
5473 stevensc 12
 
5478 stevensc 13
const Educations = ({ educations, degreesOptions, userId, isEdit }) => {
14
  const [settedEducations, setSettedEducations] = useState(educations)
15
  const [settedDescription, setSettedDescription] = useState('')
16
  const [isModalOpen, setIsModalOpen] = useState(false)
17
  const [loading, setLoading] = useState(false)
5473 stevensc 18
 
5478 stevensc 19
  const labels = useSelector((state) => state.labels)
20
  const postUrl = useRef('')
21
 
5473 stevensc 22
  const addEducation = () => {
5478 stevensc 23
    postUrl.current = `/profile/my-profiles/education/${userId}/operation/add`
24
    setSettedDescription('')
25
    setIsModalOpen(true)
26
  }
5473 stevensc 27
 
28
  const handleDelete = async (delete_link) => {
5478 stevensc 29
    setLoading(true)
30
    axios
31
      .post(delete_link)
32
      .then(({ data: response }) => {
33
        if (response.success) setSettedEducations(response.data)
34
      })
35
      .finally(() => setLoading(false))
36
  }
5473 stevensc 37
 
38
  const handleEdit = async (edit_link) => {
5478 stevensc 39
    postUrl.current = edit_link
40
    const currentDescription = settedEducations.find(
41
      (education) => education.link_edit === edit_link
42
    )
5473 stevensc 43
    setSettedDescription(currentDescription.description)
44
    setIsModalOpen(true)
5478 stevensc 45
  }
5473 stevensc 46
 
5478 stevensc 47
  useEffect(() => {
48
    setSettedEducations(educations)
49
  }, [educations])
50
 
5473 stevensc 51
  return (
52
    <>
5478 stevensc 53
      <div className="profile-attr">
54
        <div className="profile-attr-header">
5481 stevensc 55
          <h2>Educación</h2>
5478 stevensc 56
          {isEdit && (
57
            <IconButton onClick={addEducation}>
5496 stevensc 58
              <AddIcon />
5478 stevensc 59
            </IconButton>
60
          )}
61
        </div>
5473 stevensc 62
        {loading && <Spinner />}
5478 stevensc 63
        {settedEducations.length ? (
64
          settedEducations.map((education) => (
65
            <EducationItem
66
              key={education.link_edit}
67
              education={education}
68
              onDelete={handleDelete}
69
              onEdit={handleEdit}
5496 stevensc 70
              isEdit={isEdit}
5478 stevensc 71
            />
72
          ))
73
        ) : (
74
          <EmptySection align="left" message={labels.EMPTY} />
75
        )}
5473 stevensc 76
      </div>
77
      <EducationModal
78
        degreesOptions={degreesOptions}
79
        closeModal={() => setIsModalOpen(false)}
80
        postUrl={postUrl.current}
81
        setEducations={(newEducations) => setSettedEducations(newEducations)}
82
        settedDescription={settedDescription}
83
        show={isModalOpen}
84
      />
85
    </>
5478 stevensc 86
  )
87
}
5473 stevensc 88
 
5478 stevensc 89
export default Educations