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
    axios
1970 stevensc 21
      .post(`/group/my-groups/add`, data)
686 stevensc 22
      .then(({ data: responseData }) => {
23
        const { data, success } = responseData
5 stevensc 24
 
25
        if (!success) {
26
          const errorMessage = data
686 stevensc 27
          const isObject = typeof errorMessage === 'object'
28
 
29
          if (isObject) {
30
            Object.entries(errorMessage).map(([key, value]) =>
31
              setError(key, {
32
                type: 'manual',
33
                message: Array.isArray(value) ? value[0] : value
34
              })
35
            )
36
            return
37
          }
38
 
39
          throw new Error(errorMessage)
5 stevensc 40
        }
41
 
42
        fetchGroups()
43
        onHide()
44
      })
45
      .catch((err) => {
686 stevensc 46
        dispatch(addNotification({ style: 'danger', msg: err.message }))
5 stevensc 47
      })
1460 stevensc 48
  })
5 stevensc 49
 
50
  return (
1460 stevensc 51
    <Modal title='Nuevo Grupo' show={show} onClose={onHide} onAccept={onSubmit}>
52
      <div className='form-group'>
53
        <input
54
          type='text'
55
          name='name'
56
          id='name'
57
          placeholder='Nombre del grupo'
58
          ref={register({
59
            required: 'Por favor ingrese el nombre del grupo'
60
          })}
61
        />
62
        {errors.name && (
63
          <FormErrorFeedback>{errors.name.message}</FormErrorFeedback>
64
        )}
65
      </div>
689 stevensc 66
 
1460 stevensc 67
      <div className='form-group'>
68
        <select
69
          name='type_id'
70
          id='type_id'
71
          defaultValue=''
72
          ref={register({
73
            required: 'Por favor eliga un tipo'
74
          })}
75
        >
76
          <option value='' hidden>
77
            Tipo
78
          </option>
79
          {groupTypes.map(({ name, value }) => (
80
            <option value={value} key={name}>
81
              {name}
82
            </option>
83
          ))}
84
        </select>
85
        {errors.type_id && (
86
          <FormErrorFeedback>{errors.type_id.message}</FormErrorFeedback>
87
        )}
88
      </div>
689 stevensc 89
 
1460 stevensc 90
      <div className='form-group'>
91
        <select
92
          name='industry_id'
93
          id='industry_id'
94
          defaultValue=''
95
          ref={register({
96
            required: 'Por favor eliga una industria'
97
          })}
98
        >
99
          <option value='' hidden>
100
            Industria
101
          </option>
102
          {industries.map(({ name, value }) => (
103
            <option value={value} key={value}>
104
              {name}
105
            </option>
106
          ))}
107
        </select>
108
        {errors.industry_id && (
109
          <FormErrorFeedback>{errors.industry_id.message}</FormErrorFeedback>
110
        )}
111
      </div>
5 stevensc 112
    </Modal>
113
  )
114
}
115
 
116
export default AddGroupModal