Proyectos de Subversion LeadersLinked - SPA

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
467 stevensc 1
import React, { useEffect, useState } from 'react'
5 stevensc 2
import { Button, Modal } from 'react-bootstrap'
3
import { axios } from '../../utils/axios'
4
import { useForm } from 'react-hook-form'
5
import { addNotification } from '../../redux/notification/notification.actions'
6
 
7
import Spinner from '../UI/Spinner'
8
import LoaderContainer from '../UI/LoaderContainer'
9
import FormErrorFeedback from '../UI/FormErrorFeedback'
10
import { useDispatch } from 'react-redux'
487 stevensc 11
import useFetchHelper from '../../hooks/useFetchHelper'
5 stevensc 12
 
467 stevensc 13
const AddGroupModal = ({ show, onHide, fetchGroups }) => {
5 stevensc 14
  const [loading, setLoading] = useState(false)
493 stevensc 15
  const { data: groupTypesData } = useFetchHelper('group-types')
16
  const { data: industriesData } = useFetchHelper('industries')
467 stevensc 17
  const [groupTypes, setGroupTypes] = useState([])
18
  const [industries, setIndustries] = useState([])
5 stevensc 19
  const dispatch = useDispatch()
20
 
21
  const { register, handleSubmit, errors, getValues, setError } = useForm()
22
 
23
  const onSubmitHandler = (data) => {
24
    setLoading(true)
25
    const formData = new FormData()
26
    Object.entries(data).map(([key, value]) => formData.append(key, value))
27
 
28
    axios
29
      .post(`/group/my-groups/add`, formData)
30
      .then(({ data: response }) => {
31
        const { data, success } = response
32
 
33
        if (!success) {
34
          const errorMessage = data
35
          errorMessage === 'object'
36
            ? Object.entries(errorMessage).map(
37
                ([key, value]) =>
38
                  key in getValues() &&
39
                  setError(key, {
40
                    type: 'manual',
41
                    message: Array.isArray(value) ? value[0] : value,
42
                  })
43
              )
44
            : dispatch(addNotification({ style: 'danger', msg: errorMessage }))
45
        }
46
 
47
        fetchGroups()
48
        onHide()
49
      })
50
      .catch((err) => {
51
        addNotification({ style: 'danger', msg: err })
52
        throw new Error(err)
53
      })
54
      .finally(() => setLoading(false))
55
  }
56
 
467 stevensc 57
  useEffect(() => {}, [])
58
 
5 stevensc 59
  return (
60
    <Modal show={show} onHide={onHide}>
61
      <Modal.Header closeButton>
62
        <Modal.Title id="contained-modal-title-vcenter">
63
          Nuevo Grupo
64
        </Modal.Title>
65
      </Modal.Header>
66
      <form onSubmit={handleSubmit(onSubmitHandler)}>
67
        <Modal.Body>
68
          <div style={{ position: 'relative' }}>
69
            <div className="form-group">
70
              <input
71
                type="text"
72
                name="name"
73
                id="name"
74
                placeholder="Nombre del grupo"
75
                ref={register({
76
                  required: 'Por favor ingrese el nombre del grupo',
77
                })}
78
              />
79
              {errors.name && (
80
                <FormErrorFeedback>{errors.name.message}</FormErrorFeedback>
81
              )}
82
            </div>
83
            <div className="form-group">
84
              <select
85
                name="type_id"
86
                id="type_id"
87
                defaultValue=""
88
                ref={register({
89
                  required: 'Por favor eliga un tipo',
90
                })}
91
              >
92
                <option value="" hidden>
93
                  Tipo
94
                </option>
95
                {Object.entries(groupTypes).map(([key, value]) => (
96
                  <option value={key} key={key}>
97
                    {value}
98
                  </option>
99
                ))}
100
              </select>
101
              {errors.type_id && (
102
                <FormErrorFeedback>{errors.type_id.message}</FormErrorFeedback>
103
              )}
104
            </div>
105
            <div className="form-group">
106
              <select
107
                name="industry_id"
108
                id="industry_id"
109
                defaultValue=""
110
                ref={register({
111
                  required: 'Por favor eliga una industria',
112
                })}
113
              >
114
                <option value="" hidden>
115
                  Industria
116
                </option>
117
                {Object.entries(industries).map(([key, value]) => (
118
                  <option value={key} key={key}>
119
                    {value}
120
                  </option>
121
                ))}
122
              </select>
123
              {errors.industry_id && (
124
                <FormErrorFeedback>
125
                  {errors.industry_id.message}
126
                </FormErrorFeedback>
127
              )}
128
            </div>
129
 
130
            {loading && (
131
              <LoaderContainer>
132
                <Spinner />
133
              </LoaderContainer>
134
            )}
135
          </div>
136
        </Modal.Body>
137
        <Modal.Footer>
138
          <Button type="submit">Crear</Button>
139
          <Button onClick={onHide} variant="danger">
140
            Cancelar
141
          </Button>
142
        </Modal.Footer>
143
      </form>
144
    </Modal>
145
  )
146
}
147
 
148
export default AddGroupModal