Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
6768 stevensc 1
import React, { useState, useRef, useEffect } from 'react'
2
import { axios } from '../../utils'
6769 stevensc 3
import { getMonthName } from '../../utils/dates'
6768 stevensc 4
import { useDispatch, useSelector } from 'react-redux'
5
import { addNotification } from '../../redux/notification/notification.actions'
6769 stevensc 6
import AddIcon from '@mui/icons-material/Add'
7
import EditIcon from '@mui/icons-material/Edit'
8
import DeleteIcon from '@mui/icons-material/Delete'
6768 stevensc 9
import IconButton from '@mui/material/IconButton'
10
 
11
import EmptySection from '../UI/EmptySection'
12
import ExperienceModal from './ExperienceModal'
6769 stevensc 13
import ConfirmModal from '../modals/ConfirmModal'
6768 stevensc 14
 
6769 stevensc 15
const ExperiencesList = ({ experiences = [], userId, isEdit }) => {
6768 stevensc 16
  const [settedExperiences, setSettedExperiences] = useState([])
17
  const [isModalOpen, setIsModalOpen] = useState(false)
18
  const actionUrl = useRef('')
19
  const actionType = useRef('add')
20
  const labels = useSelector(({ intl }) => intl.labels)
21
  const dispatch = useDispatch()
22
 
23
  const deleteExperience = (url) => {
24
    axios
25
      .post(url)
26
      .then(({ data: response }) => {
27
        const { success, data } = response
28
        if (!success) {
29
          dispatch(addNotification({ style: 'danger', msg: response.data }))
30
          return
31
        }
32
 
33
        setSettedExperiences(data)
34
      })
35
      .catch((err) => {
36
        dispatch(
37
          addNotification({ style: 'danger', msg: labels.there_was_an_error })
38
        )
39
        throw new Error(err)
40
      })
41
  }
42
 
43
  const addExperience = () => {
44
    actionUrl.current = `/profile/my-profiles/experience/${userId}/operation/add`
45
    actionType.current = 'add'
46
    setIsModalOpen(true)
47
  }
48
 
49
  const editExperience = async (url) => {
50
    actionUrl.current = url
51
    actionType.current = 'edit'
52
    setIsModalOpen(true)
53
  }
54
 
55
  useEffect(() => {
56
    setSettedExperiences(experiences)
57
  }, [experiences])
58
 
59
  return (
60
    <>
61
      <div className="profile-attr">
62
        <div className="profile-attr-header">
63
          <h2>{labels.experience}</h2>
64
          {isEdit && (
65
            <IconButton onClick={addExperience}>
66
              <AddIcon />
67
            </IconButton>
68
          )}
69
        </div>
70
        {settedExperiences.length ? (
71
          settedExperiences.map((experience) => (
6769 stevensc 72
            <ExperiencesList.Item
6768 stevensc 73
              key={`${experience.company} - ${experience.title}`}
74
              experience={experience}
75
              onDelete={deleteExperience}
76
              onEdit={editExperience}
77
              isEdit={isEdit}
78
            />
79
          ))
80
        ) : (
81
          <EmptySection align="left" message={labels.empty} />
82
        )}
83
      </div>
84
      <ExperienceModal
85
        show={isModalOpen}
86
        url={actionUrl.current}
87
        onClose={() => setIsModalOpen(false)}
88
        onComplete={(value) => setSettedExperiences(value)}
89
        isEdit={actionType.current === 'edit'}
90
      />
91
    </>
92
  )
93
}
94
 
6769 stevensc 95
const Experience = ({ experience, onDelete, onEdit, isEdit }) => {
96
  const [isShow, setIsShow] = useState(false)
97
 
98
  const toggleConfirmModal = () => {
99
    setIsShow(!isShow)
100
  }
101
 
102
  return (
103
    <>
104
      <div className="experience-item">
105
        <div className="experience-item-header">
106
          <h3>{experience.company}</h3>
107
          {isEdit && (
108
            <div className="icon-buttons-group">
109
              <IconButton onClick={() => onEdit(experience.link_edit)}>
110
                <EditIcon />
111
              </IconButton>
112
              <IconButton onClick={toggleConfirmModal}>
113
                <DeleteIcon />
114
              </IconButton>
115
            </div>
116
          )}
117
        </div>
118
        <h4>{experience.title}</h4>
119
        <p>
120
          {`${getMonthName(experience.from_month)} ${experience.from_year} - ${
121
            experience.is_current === 'y'
122
              ? 'Actual'
123
              : `${getMonthName(experience.to_month)} ${experience.to_year}`
124
          }`}
125
        </p>
126
        <p>{`${experience.industry.name || experience.industry} / ${
127
          experience.size
128
        }`}</p>
129
        <p>{experience.formatted_address}</p>
130
      </div>
131
      <ConfirmModal
132
        show={isShow}
133
        onClose={toggleConfirmModal}
134
        onAccept={() => onDelete(experience.link_delete)}
135
      />
136
    </>
137
  )
138
}
139
 
140
ExperiencesList.Item = Experience
141
 
142
export default ExperiencesList