Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 6350 | Ir a la última revisión | | 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
 
6350 stevensc 24
  const onClose = () => {
6349 stevensc 25
    setValue('aptitudes', '')
5489 stevensc 26
    closeModal()
27
  }
28
 
29
  const handleTagsChange = (tags) => {
6349 stevensc 30
    setValue('aptitudes', tags)
5489 stevensc 31
  }
32
 
6349 stevensc 33
  const onSubmitHandler = async ({ aptitudes }) => {
5489 stevensc 34
    setModalLoading(true)
6348 stevensc 35
 
5489 stevensc 36
    const formData = new FormData()
6351 stevensc 37
    aptitudes.map((aptitude) => formData.append('aptitudes[]', aptitude.value))
6347 stevensc 38
 
6349 stevensc 39
    axios
5489 stevensc 40
      .post(`/profile/my-profiles/aptitude/${userIdEncrypted}`, formData)
6347 stevensc 41
      .then(({ data: response }) => {
42
        const { data, success } = response
6349 stevensc 43
        if (!success) {
6350 stevensc 44
          const errorMessage = data.aptitudes[0]
45
          dispatch(addNotification({ style: 'danger', msg: errorMessage }))
6349 stevensc 46
          return
5489 stevensc 47
        }
6349 stevensc 48
 
49
        setAptitudes(aptitudes)
50
        dispatch(
51
          addNotification({ style: 'success', msg: 'Registro actualizado' })
52
        )
53
 
6350 stevensc 54
        onClose()
5489 stevensc 55
      })
6351 stevensc 56
      .catch((error) => {
57
        dispatch(addNotification({ style: 'danger', msg: error }))
58
        throw new Error(error)
59
      })
60
      .finally(() => setModalLoading(false))
5489 stevensc 61
  }
62
 
63
  useEffect(() => {
6345 stevensc 64
    register('aptitudes')
5489 stevensc 65
  }, [])
66
 
6351 stevensc 67
  useEffect(() => {
68
    show ? setValue('aptitudes', userAptitudes) : setValue('aptitudes', [''])
69
  }, [show])
70
 
5489 stevensc 71
  return (
6350 stevensc 72
    <Modal show={show} onHide={onClose}>
5489 stevensc 73
      <Modal.Header closeButton>
74
        <Modal.Title>Aptitudes</Modal.Title>
75
      </Modal.Header>
76
      <form onSubmit={handleSubmit(onSubmitHandler)}>
77
        <Modal.Body>
78
          <div className="form-group">
79
            <TagsInput
80
              suggestions={aptitudesOptions}
81
              settedTags={userAptitudes}
82
              onChange={handleTagsChange}
83
            />
84
          </div>
85
        </Modal.Body>
86
        <Modal.Footer>
87
          <Button size="sm" type="submit">
88
            Enviar
89
          </Button>
6350 stevensc 90
          <Button size="sm" variant="danger" onClick={onClose}>
5489 stevensc 91
            Cancelar
92
          </Button>
93
        </Modal.Footer>
94
      </form>
95
      {modalLoading && <Spinner />}
96
    </Modal>
97
  )
98
}
99
 
100
export default AptitudesModal