Proyectos de Subversion LeadersLinked - SPA

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1929 stevensc 1
import React from 'react'
1455 stevensc 2
import { connect } from 'react-redux'
3
import { useForm } from 'react-hook-form'
4
 
5 stevensc 5
import { axios } from '../../utils'
6
import { addNotification } from '../../redux/notification/notification.actions'
7
 
1455 stevensc 8
import Modal from 'components/UI/modal/Modal'
9
import FormErrorFeedback from 'components/UI/form/FormErrorFeedback'
5 stevensc 10
 
11
const ApplyModal = ({
12
  jobId,
13
  show,
14
  userProfiles,
15
  onApplied,
1455 stevensc 16
  onHide = function () {},
1437 stevensc 17
  addNotification = function () {} // redux destructuring
5 stevensc 18
}) => {
2802 stevensc 19
  const {
20
    register,
21
    handleSubmit,
22
    getValues,
23
    setError,
24
    formState: { errors }
25
  } = useForm()
1979 stevensc 26
 
1455 stevensc 27
  const onSubmit = handleSubmit((data) => {
1979 stevensc 28
    const formData = new FormData()
29
    Object.entries(data).map(([key, value]) => formData.append(key, value))
30
 
2802 stevensc 31
    axios.post(`/job/apply-job/${jobId}`, formData).then(({ data }) => {
32
      if (data.success) {
33
        onApplied()
34
        onHide()
35
      } else {
36
        if (typeof data.data === 'object') {
37
          Object.entries(data.data).forEach(([key, value]) => {
38
            if (key in getValues()) {
39
              setError(key, { type: 'manual', message: value[0] })
40
            }
41
          })
42
        } else if (typeof data.data === 'string') {
43
          addNotification({
44
            style: 'danger',
45
            msg: data.data
46
          })
5 stevensc 47
        } else {
2802 stevensc 48
          addNotification({
49
            style: 'danger',
50
            msg: 'Ha ocurrido un error, por favor intente más tarde'
51
          })
5 stevensc 52
        }
2802 stevensc 53
      }
54
    })
1455 stevensc 55
  })
5 stevensc 56
 
57
  return (
58
    <Modal
1455 stevensc 59
      title='Perfil de Applicación'
5 stevensc 60
      show={show}
1455 stevensc 61
      onClose={onHide}
62
      onAccept={onSubmit}
5 stevensc 63
    >
1455 stevensc 64
      <div className='form-groupp'>
65
        <select
66
          name='user_profile_id'
67
          id='user_profile_id'
68
          defaultValue=''
69
          ref={register({
70
            required: 'Por favor seleccione un perfil'
71
          })}
72
        >
73
          <option value=''>Perfil de applicación</option>
74
          {userProfiles &&
75
            Object.entries(userProfiles).map(([key, value]) => (
76
              <option value={key} key={key}>
77
                {value}
78
              </option>
79
            ))}
80
        </select>
81
        {errors?.user_profile_id?.message && (
82
          <FormErrorFeedback>
83
            {errors.user_profile_id.message}
84
          </FormErrorFeedback>
85
        )}
86
      </div>
5 stevensc 87
    </Modal>
88
  )
89
}
90
 
91
const mapDispatchToProps = {
1437 stevensc 92
  addNotification: (notification) => addNotification(notification)
5 stevensc 93
}
94
 
95
export default connect(null, mapDispatchToProps)(ApplyModal)