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
 
2802 stevensc 18
  const {
19
    register,
20
    handleSubmit,
21
    setError,
22
    formState: { errors }
23
  } = useForm()
5 stevensc 24
 
1460 stevensc 25
  const onSubmit = handleSubmit((data) => {
1979 stevensc 26
    const formData = new FormData()
27
    Object.entries(data).forEach(([key, value]) => formData.append(key, value))
28
 
5 stevensc 29
    axios
1979 stevensc 30
      .post(`/group/my-groups/add`, formData)
686 stevensc 31
      .then(({ data: responseData }) => {
32
        const { data, success } = responseData
5 stevensc 33
 
34
        if (!success) {
35
          const errorMessage = data
686 stevensc 36
          const isObject = typeof errorMessage === 'object'
37
 
38
          if (isObject) {
39
            Object.entries(errorMessage).map(([key, value]) =>
40
              setError(key, {
41
                type: 'manual',
42
                message: Array.isArray(value) ? value[0] : value
43
              })
44
            )
45
            return
46
          }
47
 
48
          throw new Error(errorMessage)
5 stevensc 49
        }
50
 
51
        fetchGroups()
52
        onHide()
53
      })
54
      .catch((err) => {
686 stevensc 55
        dispatch(addNotification({ style: 'danger', msg: err.message }))
5 stevensc 56
      })
1460 stevensc 57
  })
5 stevensc 58
 
59
  return (
1460 stevensc 60
    <Modal title='Nuevo Grupo' show={show} onClose={onHide} onAccept={onSubmit}>
2088 stevensc 61
      <Input
62
        name='name'
63
        placeholder='Nombre del grupo'
2089 stevensc 64
        inputRef={register({
2088 stevensc 65
          required: 'Por favor ingrese el nombre del grupo'
66
        })}
67
        error={errors.name?.message}
68
      />
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