Proyectos de Subversion LeadersLinked - SPA

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1929 stevensc 1
import React from 'react'
1460 stevensc 2
import { useDispatch } from 'react-redux'
3
import { useForm } from 'react-hook-form'
4
 
687 stevensc 5
import { axios } from '../../utils'
5 stevensc 6
import { addNotification } from '../../redux/notification/notification.actions'
495 stevensc 7
import useFetchHelper from '../../hooks/useFetchHelper'
5 stevensc 8
 
1460 stevensc 9
import Modal from 'components/UI/modal/Modal'
10
import FormErrorFeedback from 'components/UI/form/FormErrorFeedback'
5 stevensc 11
 
467 stevensc 12
const AddGroupModal = ({ show, onHide, fetchGroups }) => {
494 stevensc 13
  const { data: groupTypes } = useFetchHelper('group-types')
14
  const { data: industries } = useFetchHelper('industries')
5 stevensc 15
  const dispatch = useDispatch()
16
 
686 stevensc 17
  const { register, handleSubmit, errors, setError } = useForm()
5 stevensc 18
 
1460 stevensc 19
  const onSubmit = handleSubmit((data) => {
5 stevensc 20
    const formData = new FormData()
495 stevensc 21
    Object.entries(data).forEach(([key, value]) => formData.append(key, value))
5 stevensc 22
 
23
    axios
24
      .post(`/group/my-groups/add`, formData)
686 stevensc 25
      .then(({ data: responseData }) => {
26
        const { data, success } = responseData
5 stevensc 27
 
28
        if (!success) {
29
          const errorMessage = data
686 stevensc 30
          const isObject = typeof errorMessage === 'object'
31
 
32
          if (isObject) {
33
            Object.entries(errorMessage).map(([key, value]) =>
34
              setError(key, {
35
                type: 'manual',
36
                message: Array.isArray(value) ? value[0] : value
37
              })
38
            )
39
            return
40
          }
41
 
42
          throw new Error(errorMessage)
5 stevensc 43
        }
44
 
45
        fetchGroups()
46
        onHide()
47
      })
48
      .catch((err) => {
686 stevensc 49
        dispatch(addNotification({ style: 'danger', msg: err.message }))
5 stevensc 50
      })
1460 stevensc 51
  })
5 stevensc 52
 
53
  return (
1460 stevensc 54
    <Modal title='Nuevo Grupo' show={show} onClose={onHide} onAccept={onSubmit}>
55
      <div className='form-group'>
56
        <input
57
          type='text'
58
          name='name'
59
          id='name'
60
          placeholder='Nombre del grupo'
61
          ref={register({
62
            required: 'Por favor ingrese el nombre del grupo'
63
          })}
64
        />
65
        {errors.name && (
66
          <FormErrorFeedback>{errors.name.message}</FormErrorFeedback>
67
        )}
68
      </div>
689 stevensc 69
 
1460 stevensc 70
      <div className='form-group'>
71
        <select
72
          name='type_id'
73
          id='type_id'
74
          defaultValue=''
75
          ref={register({
76
            required: 'Por favor eliga un tipo'
77
          })}
78
        >
79
          <option value='' hidden>
80
            Tipo
81
          </option>
82
          {groupTypes.map(({ name, value }) => (
83
            <option value={value} key={name}>
84
              {name}
85
            </option>
86
          ))}
87
        </select>
88
        {errors.type_id && (
89
          <FormErrorFeedback>{errors.type_id.message}</FormErrorFeedback>
90
        )}
91
      </div>
689 stevensc 92
 
1460 stevensc 93
      <div className='form-group'>
94
        <select
95
          name='industry_id'
96
          id='industry_id'
97
          defaultValue=''
98
          ref={register({
99
            required: 'Por favor eliga una industria'
100
          })}
101
        >
102
          <option value='' hidden>
103
            Industria
104
          </option>
105
          {industries.map(({ name, value }) => (
106
            <option value={value} key={value}>
107
              {name}
108
            </option>
109
          ))}
110
        </select>
111
        {errors.industry_id && (
112
          <FormErrorFeedback>{errors.industry_id.message}</FormErrorFeedback>
113
        )}
114
      </div>
5 stevensc 115
    </Modal>
116
  )
117
}
118
 
119
export default AddGroupModal