Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

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