Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

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