Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
6753 stevensc 1
import React, { useEffect, useState } from 'react'
2
import { Button, Modal } from 'react-bootstrap'
6832 stevensc 3
import { axios } from '../../utils'
6753 stevensc 4
import { useForm } from 'react-hook-form'
5
import { useDispatch, useSelector } from 'react-redux'
6832 stevensc 6
import { addNotification } from '../../redux/notification/notification.actions'
6753 stevensc 7
 
6832 stevensc 8
import Spinner from '../UI/Spinner'
6753 stevensc 9
import TagsInput from '../../../shared/tags-input/TagsInput'
6807 stevensc 10
import useFetchHelper from '../../hooks/useFetchHelper'
6753 stevensc 11
 
12
const HobbiesModal = ({
13
  show = false,
6807 stevensc 14
  userId = '',
15
  userHobbies = [],
16
  onClose = () => {},
17
  onComplete = () => {},
6753 stevensc 18
}) => {
19
  const [modalLoading, setModalLoading] = useState(false)
6807 stevensc 20
  const { data: hobbies } = useFetchHelper('hobbies')
6753 stevensc 21
  const labels = useSelector(({ intl }) => intl.labels)
22
  const dispatch = useDispatch()
23
 
24
  const { register, handleSubmit, setValue } = useForm()
25
 
26
  const handleTagsChange = (tags) => {
27
    setValue('hobbiesAndInterests', tags)
28
  }
29
 
30
  const onSubmitHandler = async ({ hobbiesAndInterests }) => {
31
    setModalLoading(true)
32
    const formData = new FormData()
33
 
34
    hobbiesAndInterests.map((language) =>
35
      formData.append('hobbies_and_interests[]', language.value)
36
    )
37
 
38
    axios
6807 stevensc 39
      .post(`/profile/my-profiles/hobby-and-interest/${userId}`, formData)
6753 stevensc 40
      .then(({ data: response }) => {
41
        const { data, success } = response
42
        if (!success) {
43
          const errorMessage = data.hobbies_and_interests[0]
44
          dispatch(addNotification({ style: 'danger', msg: errorMessage }))
45
          return
46
        }
47
 
6807 stevensc 48
        onComplete(hobbiesAndInterests)
6753 stevensc 49
        dispatch(
50
          addNotification({ style: 'success', msg: 'Registro actualizado' })
51
        )
6807 stevensc 52
        onClose()
6753 stevensc 53
      })
54
      .catch((error) => {
55
        dispatch(addNotification({ style: 'danger', msg: error }))
56
        throw new Error(error)
57
      })
58
      .finally(() => setModalLoading(false))
59
  }
60
 
61
  useEffect(() => {
62
    register('hobbiesAndInterests')
63
  }, [])
64
 
65
  useEffect(() => {
66
    show
6807 stevensc 67
      ? setValue('hobbiesAndInterests', userHobbies)
6753 stevensc 68
      : setValue('hobbiesAndInterests', [''])
69
  }, [show])
70
 
71
  return (
6807 stevensc 72
    <Modal show={show} onHide={onClose}>
6753 stevensc 73
      <Modal.Header closeButton>
74
        <Modal.Title>{labels.hobbies_and_interests}</Modal.Title>
75
      </Modal.Header>
76
      <form onSubmit={handleSubmit(onSubmitHandler)}>
77
        <Modal.Body>
78
          <div className="form-group">
79
            <TagsInput
6807 stevensc 80
              suggestions={hobbies}
81
              settedTags={userHobbies}
6753 stevensc 82
              onChange={handleTagsChange}
83
            />
84
          </div>
85
        </Modal.Body>
86
        <Modal.Footer>
87
          <Button size="sm" type="submit">
88
            {labels.accept}
89
          </Button>
6807 stevensc 90
          <Button size="sm" variant="danger" onClick={onClose}>
6753 stevensc 91
            {labels.cancel}
92
          </Button>
93
        </Modal.Footer>
94
      </form>
95
      {modalLoading && <Spinner />}
96
    </Modal>
97
  )
98
}
99
 
100
export default HobbiesModal