Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 6861 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
6753 stevensc 1
import React, { useState } from 'react'
2
import { axios } from '../../utils'
3
import { Modal } from 'react-bootstrap'
4
import { useForm } from 'react-hook-form'
6861 stevensc 5
import { useDispatch, useSelector } from 'react-redux'
6753 stevensc 6
import { addNotification } from '../../redux/notification/notification.actions'
7
 
8
import Spinner from '../UI/Spinner'
9
import FormErrorFeedback from '../UI/FormErrorFeedback'
6861 stevensc 10
import useFetchHelper from '../../hooks/useFetchHelper'
6753 stevensc 11
 
12
const AddCompanyModal = ({
13
  show = false,
14
  onHide = () => null,
15
  fetchCompanies = () => [],
16
}) => {
17
  const [loading, setLoading] = useState(false)
6861 stevensc 18
  const { data: companySizes } = useFetchHelper('company-sizes')
6889 stevensc 19
  const { data: industries } = useFetchHelper('industries')
6861 stevensc 20
  const labels = useSelector(({ intl }) => intl.labels)
6753 stevensc 21
  const dispatch = useDispatch()
22
 
23
  const { register, handleSubmit, errors } = useForm()
24
 
25
  const onSubmitHandler = (data) => {
26
    setLoading(true)
27
    const formData = new FormData()
28
 
29
    Object.entries(data).map(([key, value]) => formData.append(key, value))
30
 
31
    axios
32
      .post('/company/my-companies/add', formData)
33
      .then(({ data: response }) => {
34
        if (!response.success) {
35
          const errorMessage =
36
            typeof response.data === 'string'
37
              ? response.data
38
              : Object.entries(response.data).map(
39
                  ([key, value]) => `${key}: ${value[0]}`
40
                )
41
 
42
          dispatch(addNotification({ style: 'danger', msg: errorMessage }))
43
          return
44
        }
45
 
46
        fetchCompanies()
47
        onHide()
48
      })
49
      .catch((error) => {
50
        dispatch(addNotification({ style: 'danger', msg: error }))
51
        throw new Error(error)
52
      })
53
      .finally(() => setLoading(false))
54
  }
55
 
56
  return (
57
    <Modal show={show} onHide={onHide}>
58
      <Modal.Header closeButton>
6861 stevensc 59
        <Modal.Title>{labels.new_company}</Modal.Title>
6753 stevensc 60
      </Modal.Header>
61
      <form onSubmit={handleSubmit(onSubmitHandler)}>
62
        <Modal.Body className="position-relative">
63
          <div className="form-group">
64
            <input
65
              type="text"
66
              name="name"
6861 stevensc 67
              placeholder={labels.name_of_company}
6753 stevensc 68
              ref={register({
69
                required: 'Por favor ingrese el nombre de la Empresa',
70
              })}
71
            />
72
            {errors.name && (
73
              <FormErrorFeedback>{errors.name.message}</FormErrorFeedback>
74
            )}
75
          </div>
76
 
77
          <div className="form-group">
78
            <select
79
              name="industry_id"
80
              ref={register({
6861 stevensc 81
                required: labels.select_industry,
6753 stevensc 82
              })}
83
            >
84
              <option value="" hidden>
6861 stevensc 85
                {labels.industry}
6753 stevensc 86
              </option>
6889 stevensc 87
              {industries.map(({ name, value }) => (
88
                <option value={value} key={value}>
89
                  {name}
6753 stevensc 90
                </option>
91
              ))}
92
            </select>
93
            {errors.industry_id && (
94
              <FormErrorFeedback>
95
                {errors.industry_id.message}
96
              </FormErrorFeedback>
97
            )}
98
          </div>
99
 
100
          <div className="form-group">
101
            <select
102
              name="company_size_id"
103
              ref={register({
6861 stevensc 104
                required: labels.select_company_size,
6753 stevensc 105
              })}
106
            >
107
              <option value="" hidden>
6861 stevensc 108
                {labels.company_size}
6753 stevensc 109
              </option>
6861 stevensc 110
              {companySizes.map(({ name, value }) => (
111
                <option value={value} key={value}>
112
                  {name}
6753 stevensc 113
                </option>
114
              ))}
115
            </select>
116
            {errors.company_size_id && (
117
              <FormErrorFeedback>
118
                {errors.company_size_id.message}
119
              </FormErrorFeedback>
120
            )}
121
          </div>
122
 
123
          {loading && <Spinner />}
124
        </Modal.Body>
125
        <Modal.Footer>
126
          <button type="submit" className="btn btn-primary">
6861 stevensc 127
            {labels.accept}
6753 stevensc 128
          </button>
129
          <button type="button" className="btn btn-secondary" onClick={onHide}>
6861 stevensc 130
            {labels.cancel}
6753 stevensc 131
          </button>
132
        </Modal.Footer>
133
      </form>
134
    </Modal>
135
  )
136
}
137
 
138
export default AddCompanyModal