Proyectos de Subversion LeadersLinked - SPA

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
495 stevensc 1
import React, { 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'
495 stevensc 5
import { useDispatch } from 'react-redux'
5 stevensc 6
import { addNotification } from '../../redux/notification/notification.actions'
495 stevensc 7
import useFetchHelper from '../../hooks/useFetchHelper'
5 stevensc 8
 
496 stevensc 9
import Spinner from 'components/UI/Spinner'
549 stevensc 10
import Input from 'components/UI/Input'
496 stevensc 11
import SelectField from 'components/UI/SelectField'
5 stevensc 12
 
467 stevensc 13
const AddGroupModal = ({ show, onHide, fetchGroups }) => {
5 stevensc 14
  const [loading, setLoading] = useState(false)
494 stevensc 15
  const { data: groupTypes } = useFetchHelper('group-types')
16
  const { data: industries } = useFetchHelper('industries')
5 stevensc 17
  const dispatch = useDispatch()
18
 
19
  const { register, handleSubmit, errors, getValues, setError } = useForm()
20
 
21
  const onSubmitHandler = (data) => {
22
    setLoading(true)
23
    const formData = new FormData()
495 stevensc 24
    Object.entries(data).forEach(([key, value]) => formData.append(key, value))
5 stevensc 25
 
26
    axios
27
      .post(`/group/my-groups/add`, formData)
28
      .then(({ data: response }) => {
29
        const { data, success } = response
30
 
31
        if (!success) {
32
          const errorMessage = data
33
          errorMessage === 'object'
34
            ? Object.entries(errorMessage).map(
35
                ([key, value]) =>
36
                  key in getValues() &&
37
                  setError(key, {
38
                    type: 'manual',
39
                    message: Array.isArray(value) ? value[0] : value,
40
                  })
41
              )
42
            : dispatch(addNotification({ style: 'danger', msg: errorMessage }))
43
        }
44
 
45
        fetchGroups()
46
        onHide()
47
      })
48
      .catch((err) => {
49
        addNotification({ style: 'danger', msg: err })
50
        throw new Error(err)
51
      })
52
      .finally(() => setLoading(false))
53
  }
54
 
55
  return (
56
    <Modal show={show} onHide={onHide}>
57
      <Modal.Header closeButton>
496 stevensc 58
        <Modal.Title>Nuevo Grupo</Modal.Title>
5 stevensc 59
      </Modal.Header>
496 stevensc 60
      <Modal.Body>
61
        <form onSubmit={handleSubmit(onSubmitHandler)}>
549 stevensc 62
          <Input
496 stevensc 63
            type="text"
64
            name="name"
65
            ref={register({
66
              required: 'Por favor ingrese el nombre del grupo',
67
            })}
68
            errors={errors}
69
          />
70
          <SelectField
71
            name="type_id"
72
            label="Tipo"
73
            options={groupTypes}
74
            ref={register({
75
              required: 'Por favor eliga un tipo',
76
            })}
77
            errors={errors}
78
          />
79
          <SelectField
80
            name="industry_id"
81
            label="Industria"
82
            options={industries}
83
            ref={register({
84
              required: 'Por favor eliga una industria',
85
            })}
86
            errors={errors}
87
          />
88
          {loading && <Spinner />}
5 stevensc 89
          <Button type="submit">Crear</Button>
90
          <Button onClick={onHide} variant="danger">
91
            Cancelar
92
          </Button>
496 stevensc 93
        </form>
94
      </Modal.Body>
5 stevensc 95
    </Modal>
96
  )
97
}
98
 
99
export default AddGroupModal