Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 1437 | Rev 1929 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
5 stevensc 1
import React, { useState } from 'react'
1456 stevensc 2
import { useDispatch, useSelector } from 'react-redux'
5 stevensc 3
import { useForm } from 'react-hook-form'
1456 stevensc 4
 
5
import { axios } from 'utils/index'
5 stevensc 6
import { addNotification } from '../../redux/notification/notification.actions'
7
import useFetchHelper from '../../hooks/useFetchHelper'
8
 
1456 stevensc 9
import Modal from 'components/UI/modal/Modal'
10
import Spinner from 'components/UI/Spinner'
11
import FormErrorFeedback from 'components/UI/form/FormErrorFeedback'
12
 
5 stevensc 13
const AddCompanyModal = ({
14
  show = false,
15
  onHide = () => null,
655 stevensc 16
  fetchCompanies = () => []
5 stevensc 17
}) => {
18
  const { data: companySizes } = useFetchHelper('company-sizes')
19
  const { data: industries } = useFetchHelper('industries')
1456 stevensc 20
  const [loading, setLoading] = useState(false)
5 stevensc 21
  const labels = useSelector(({ intl }) => intl.labels)
22
  const dispatch = useDispatch()
23
 
24
  const { register, handleSubmit, errors } = useForm()
25
 
1456 stevensc 26
  const onSubmit = handleSubmit((data) => {
5 stevensc 27
    setLoading(true)
28
    const formData = new FormData()
29
 
30
    Object.entries(data).map(([key, value]) => formData.append(key, value))
31
 
32
    axios
33
      .post('/company/my-companies/add', formData)
34
      .then(({ data: response }) => {
35
        if (!response.success) {
36
          const errorMessage =
37
            typeof response.data === 'string'
38
              ? response.data
39
              : Object.entries(response.data).map(
40
                  ([key, value]) => `${key}: ${value[0]}`
41
                )
42
 
43
          dispatch(addNotification({ style: 'danger', msg: errorMessage }))
44
          return
45
        }
46
 
47
        fetchCompanies()
48
        onHide()
49
      })
655 stevensc 50
      .catch((err) => {
51
        dispatch(addNotification({ style: 'danger', msg: err.message }))
5 stevensc 52
      })
53
      .finally(() => setLoading(false))
1456 stevensc 54
  })
5 stevensc 55
 
56
  return (
1456 stevensc 57
    <Modal
58
      title={labels.new_company}
59
      show={show}
60
      onClose={onHide}
61
      onAccept={onSubmit}
62
    >
63
      <div className='form-group'>
64
        <input
65
          type='text'
66
          name='name'
67
          placeholder={labels.name_of_company}
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>
5 stevensc 76
 
1456 stevensc 77
      <div className='form-group'>
78
        <select
79
          name='industry_id'
80
          ref={register({
81
            required: labels.select_industry
82
          })}
83
        >
84
          <option value='' hidden>
85
            {labels.industry}
86
          </option>
87
          {industries.map(({ name, value }) => (
88
            <option value={value} key={value}>
89
              {name}
90
            </option>
91
          ))}
92
        </select>
93
        {errors.industry_id && (
94
          <FormErrorFeedback>{errors.industry_id.message}</FormErrorFeedback>
95
        )}
96
      </div>
5 stevensc 97
 
1456 stevensc 98
      <div className='form-group'>
99
        <select
100
          name='company_size_id'
101
          ref={register({
102
            required: labels.select_company_size
103
          })}
104
        >
105
          <option value='' hidden>
106
            {labels.company_size}
107
          </option>
108
          {companySizes.map(({ name, value }) => (
109
            <option value={value} key={value}>
110
              {name}
111
            </option>
112
          ))}
113
        </select>
114
        {errors.company_size_id && (
115
          <FormErrorFeedback>
116
            {errors.company_size_id.message}
117
          </FormErrorFeedback>
118
        )}
119
      </div>
5 stevensc 120
 
1456 stevensc 121
      {loading && <Spinner />}
5 stevensc 122
    </Modal>
123
  )
124
}
125
 
126
export default AddCompanyModal