Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 1850 | Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1849 stevensc 1
import React, { useState, useEffect } from 'react'
2
import { useDispatch, useSelector } from 'react-redux'
3
import ProfileWidget from '../ProfileWidget'
4
import LanguagesModal from './LanguagesModal'
5
import { IconButton } from '@mui/material'
6
import { Edit } from '@mui/icons-material'
7
import { axios } from '@app/utils'
8
import { addNotification } from '@app/redux/notification/notification.actions'
9
import EmptySection from '@app/components/UI/EmptySection'
10
 
11
const LanguagesCard = ({
12
  languages: defaultLanguages = [],
13
  uuid = '',
14
  edit = false
15
}) => {
16
  const [languages, setLanguages] = useState([])
17
  const [showModal, setShowModal] = useState(false)
18
  const labels = useSelector(({ intl }) => intl.labels)
19
  const dispatch = useDispatch()
20
 
21
  const toggleModal = () => setShowModal(!showModal)
22
 
23
  const handleEditLanguages = ({ languages }) => {
24
    const formData = new FormData()
25
    languages.map((language) => formData.append('languages[]', language.value))
26
 
27
    axios
28
      .post(`/profile/my-profiles/language/${uuid}`, formData)
29
      .then(({ data: response }) => {
30
        const { success, data } = response
31
 
32
        if (!success) {
33
          const errorMessage =
34
            typeof data === 'string' ? data : data.languages[0]
35
          throw new Error(errorMessage)
36
        }
37
 
38
        setLanguages(languages)
39
        toggleModal()
40
      })
41
      .catch((err) => {
42
        dispatch(addNotification({ style: 'danger', msg: err.message }))
43
      })
44
  }
45
 
46
  useEffect(() => {
47
    const formattedLanguages = defaultLanguages.map(([key, value]) => ({
48
      name: value,
49
      value: key
50
    }))
51
    setLanguages(formattedLanguages)
52
  }, [defaultLanguages])
53
 
54
  return (
55
    <>
56
      <ProfileWidget
57
        title={labels.languages}
58
        action={
59
          edit && (
60
            <IconButton>
61
              <Edit />
62
            </IconButton>
63
          )
64
        }
65
      >
66
        {languages.length ? (
67
          <ul id='list-languages'>
68
            {languages.map(({ name, value }) => (
69
              <li key={value}>
70
                <span>{name}</span>
71
              </li>
72
            ))}
73
          </ul>
74
        ) : (
75
          <EmptySection align='left' message={labels.empty} />
76
        )}
77
      </ProfileWidget>
78
 
79
      <LanguagesModal
80
        show={showModal}
81
        onClose={toggleModal}
82
        onConfirm={handleEditLanguages}
83
        languages={languages}
84
      />
85
    </>
86
  )
87
}
88
 
89
export default LanguagesCard