Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

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