Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
6753 stevensc 1
import React, { useEffect, useState } from 'react'
2
import { axios } from '../../../utils'
3
import { useForm } from 'react-hook-form'
4
import { useDispatch, useSelector } from 'react-redux'
5
import { Button, Modal } from 'react-bootstrap'
6
import { addNotification } from '../../../redux/notification/notification.actions'
7
 
8
import Spinner from '../../../shared/loading-spinner/Spinner'
9
import TagsInput from '../../../shared/tags-input/TagsInput'
6807 stevensc 10
import useFetchHelper from '../../hooks/useFetchHelper'
6753 stevensc 11
 
12
const LanguagesModal = ({
13
  show = false,
6807 stevensc 14
  userId = '',
6753 stevensc 15
  userLanguages = [],
6807 stevensc 16
  onClose = () => null,
17
  onComplete = () => null,
6753 stevensc 18
}) => {
19
  const [modalLoading, setModalLoading] = useState(false)
6807 stevensc 20
  const { data: languages } = useFetchHelper('languages')
6753 stevensc 21
  const labels = useSelector(({ intl }) => intl.labels)
22
  const dispatch = useDispatch()
23
 
24
  const { register, handleSubmit, setValue } = useForm()
25
 
26
  const handleTagsChange = (tags) => {
27
    setValue('languages', tags)
28
  }
29
 
30
  const onSubmitHandler = ({ languages }) => {
31
    setModalLoading(true)
32
    const formData = new FormData()
33
    languages.map((language) => formData.append('languages[]', language.value))
34
 
35
    axios
6807 stevensc 36
      .post(`/profile/my-profiles/language/${userId}`, formData)
6753 stevensc 37
      .then(({ data: response }) => {
38
        const { success, data } = response
39
 
40
        if (!success) {
41
          const errorMessage = data.languages[0]
42
          dispatch(addNotification({ style: 'danger', msg: errorMessage }))
43
          return
44
        }
45
 
6807 stevensc 46
        onComplete(languages)
6753 stevensc 47
        dispatch(
48
          addNotification({ style: 'success', msg: 'Registro actualizado' })
49
        )
6807 stevensc 50
        onClose()
6753 stevensc 51
      })
52
      .catch((error) => {
53
        dispatch(addNotification({ style: 'danger', msg: error }))
54
        throw new Error(error)
55
      })
56
      .finally(() => setModalLoading(false))
57
  }
58
 
59
  useEffect(() => {
60
    register('languages')
61
  }, [])
62
 
63
  useEffect(() => {
64
    show ? setValue('languages', userLanguages) : setValue('languages', [''])
65
  }, [show])
66
 
67
  return (
6807 stevensc 68
    <Modal show={show} onHide={onClose}>
6753 stevensc 69
      <Modal.Header closeButton>
70
        <Modal.Title>{labels.languages}</Modal.Title>
71
      </Modal.Header>
72
      <form onSubmit={handleSubmit(onSubmitHandler)}>
73
        <Modal.Body>
74
          <div className="form-group">
75
            <TagsInput
6807 stevensc 76
              suggestions={languages}
6753 stevensc 77
              settedTags={userLanguages}
78
              onChange={handleTagsChange}
79
            />
80
          </div>
81
        </Modal.Body>
82
        <Modal.Footer>
83
          <Button size="sm" type="submit">
84
            {labels.accept}
85
          </Button>
6807 stevensc 86
          <Button size="sm" variant="danger" onClick={onClose}>
6753 stevensc 87
            {labels.cancel}
88
          </Button>
89
        </Modal.Footer>
90
      </form>
91
      {modalLoading && <Spinner />}
92
    </Modal>
93
  )
94
}
95
 
96
export default LanguagesModal