Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 655 | Rev 1456 | 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'
2
import { axios } from '../../utils'
3
import { Modal } from 'react-bootstrap'
4
import { useForm } from 'react-hook-form'
5
import { useDispatch, useSelector } from 'react-redux'
6
import { addNotification } from '../../redux/notification/notification.actions'
7
 
8
import Spinner from '../UI/Spinner'
1437 stevensc 9
import FormErrorFeedback from '../UI/form/FormErrorFeedback'
5 stevensc 10
import useFetchHelper from '../../hooks/useFetchHelper'
11
 
12
const AddCompanyModal = ({
13
  show = false,
14
  onHide = () => null,
655 stevensc 15
  fetchCompanies = () => []
5 stevensc 16
}) => {
17
  const [loading, setLoading] = useState(false)
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
 
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
      })
655 stevensc 49
      .catch((err) => {
50
        dispatch(addNotification({ style: 'danger', msg: err.message }))
5 stevensc 51
      })
52
      .finally(() => setLoading(false))
53
  }
54
 
55
  return (
56
    <Modal show={show} onHide={onHide}>
57
      <Modal.Header closeButton>
58
        <Modal.Title>{labels.new_company}</Modal.Title>
59
      </Modal.Header>
60
      <form onSubmit={handleSubmit(onSubmitHandler)}>
655 stevensc 61
        <Modal.Body className='position-relative'>
62
          <div className='form-group'>
5 stevensc 63
            <input
655 stevensc 64
              type='text'
65
              name='name'
5 stevensc 66
              placeholder={labels.name_of_company}
67
              ref={register({
655 stevensc 68
                required: 'Por favor ingrese el nombre de la Empresa'
5 stevensc 69
              })}
70
            />
71
            {errors.name && (
72
              <FormErrorFeedback>{errors.name.message}</FormErrorFeedback>
73
            )}
74
          </div>
75
 
655 stevensc 76
          <div className='form-group'>
5 stevensc 77
            <select
655 stevensc 78
              name='industry_id'
5 stevensc 79
              ref={register({
655 stevensc 80
                required: labels.select_industry
5 stevensc 81
              })}
82
            >
655 stevensc 83
              <option value='' hidden>
5 stevensc 84
                {labels.industry}
85
              </option>
86
              {industries.map(({ name, value }) => (
87
                <option value={value} key={value}>
88
                  {name}
89
                </option>
90
              ))}
91
            </select>
92
            {errors.industry_id && (
93
              <FormErrorFeedback>
94
                {errors.industry_id.message}
95
              </FormErrorFeedback>
96
            )}
97
          </div>
98
 
655 stevensc 99
          <div className='form-group'>
5 stevensc 100
            <select
655 stevensc 101
              name='company_size_id'
5 stevensc 102
              ref={register({
655 stevensc 103
                required: labels.select_company_size
5 stevensc 104
              })}
105
            >
655 stevensc 106
              <option value='' hidden>
5 stevensc 107
                {labels.company_size}
108
              </option>
109
              {companySizes.map(({ name, value }) => (
110
                <option value={value} key={value}>
111
                  {name}
112
                </option>
113
              ))}
114
            </select>
115
            {errors.company_size_id && (
116
              <FormErrorFeedback>
117
                {errors.company_size_id.message}
118
              </FormErrorFeedback>
119
            )}
120
          </div>
121
 
122
          {loading && <Spinner />}
123
        </Modal.Body>
124
        <Modal.Footer>
655 stevensc 125
          <button type='submit' className='btn btn-primary'>
5 stevensc 126
            {labels.accept}
127
          </button>
655 stevensc 128
          <button type='button' className='btn btn-secondary' onClick={onHide}>
5 stevensc 129
            {labels.cancel}
130
          </button>
131
        </Modal.Footer>
132
      </form>
133
    </Modal>
134
  )
135
}
136
 
137
export default AddCompanyModal