Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
1929 stevensc 1
import React 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'
2780 stevensc 7
import { useFetchHelper } from '@hooks'
5 stevensc 8
 
1456 stevensc 9
import Modal from 'components/UI/modal/Modal'
10
import FormErrorFeedback from 'components/UI/form/FormErrorFeedback'
2087 stevensc 11
import Input from '../UI/inputs/Input'
1456 stevensc 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')
20
  const labels = useSelector(({ intl }) => intl.labels)
21
  const dispatch = useDispatch()
22
 
23
  const { register, handleSubmit, errors } = useForm()
24
 
1456 stevensc 25
  const onSubmit = handleSubmit((data) => {
1979 stevensc 26
    const formData = new FormData()
27
 
28
    Object.entries(data).map(([key, value]) => formData.append(key, value))
29
 
5 stevensc 30
    axios
1979 stevensc 31
      .post('/company/my-companies/add', formData)
5 stevensc 32
      .then(({ data: response }) => {
33
        if (!response.success) {
34
          const errorMessage =
35
            typeof response.data === 'string'
36
              ? response.data
37
              : Object.entries(response.data).map(
38
                  ([key, value]) => `${key}: ${value[0]}`
39
                )
40
 
41
          dispatch(addNotification({ style: 'danger', msg: errorMessage }))
42
          return
43
        }
44
 
45
        fetchCompanies()
46
        onHide()
47
      })
655 stevensc 48
      .catch((err) => {
49
        dispatch(addNotification({ style: 'danger', msg: err.message }))
5 stevensc 50
      })
1456 stevensc 51
  })
5 stevensc 52
 
53
  return (
1456 stevensc 54
    <Modal
55
      title={labels.new_company}
56
      show={show}
57
      onClose={onHide}
58
      onAccept={onSubmit}
59
    >
2087 stevensc 60
      <Input
61
        name='name'
62
        placeholder={labels.name_of_company}
63
        ref={register({
64
          required: 'Por favor ingrese el nombre de la Empresa'
65
        })}
66
        error={errors.name?.message}
67
      />
5 stevensc 68
 
1456 stevensc 69
      <div className='form-group'>
70
        <select
71
          name='industry_id'
72
          ref={register({
73
            required: labels.select_industry
74
          })}
75
        >
76
          <option value='' hidden>
77
            {labels.industry}
78
          </option>
79
          {industries.map(({ name, value }) => (
80
            <option value={value} key={value}>
81
              {name}
82
            </option>
83
          ))}
84
        </select>
85
        {errors.industry_id && (
86
          <FormErrorFeedback>{errors.industry_id.message}</FormErrorFeedback>
87
        )}
88
      </div>
5 stevensc 89
 
1456 stevensc 90
      <div className='form-group'>
91
        <select
92
          name='company_size_id'
93
          ref={register({
94
            required: labels.select_company_size
95
          })}
96
        >
97
          <option value='' hidden>
98
            {labels.company_size}
99
          </option>
100
          {companySizes.map(({ name, value }) => (
101
            <option value={value} key={value}>
102
              {name}
103
            </option>
104
          ))}
105
        </select>
106
        {errors.company_size_id && (
107
          <FormErrorFeedback>
108
            {errors.company_size_id.message}
109
          </FormErrorFeedback>
110
        )}
111
      </div>
5 stevensc 112
    </Modal>
113
  )
114
}
115
 
116
export default AddCompanyModal