Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

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