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