Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 11061 | Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
11056 stevensc 1
import { Button, Modal } from 'react-bootstrap'
2
import axios from 'axios'
3
import React from 'react'
4
import { useState } from 'react'
5
import { useForm } from 'react-hook-form'
6
import { useDispatch } from 'react-redux'
7
import { addNotification } from '../../../redux/notification/notification.actions'
8
import DescriptionInput from '../../../shared/DescriptionInput'
9
 
10
const EditModal = ({ closeModal, email_link, isOpen, edit_link }) => {
11
 
12
	//Hooks
13
	const { register, handleSubmit, watch, errors, setValue, clearErrors } = useForm()
14
	const dispatch = useDispatch()
15
 
16
	//States
17
	const [pointsOptions] = useState([
18
		{ label: 'Evaluación', value: null },
19
		{ label: 'Sugerir otro cargo', value: 0 },
20
		{ label: '25%', value: 1 },
21
		{ label: '50%', value: 2 },
22
		{ label: '75%', value: 3 },
23
		{ label: '100%', value: 4 }
24
	])
25
	const [statusOptions] = useState([
26
		{ label: 'Estatus', value: '' },
27
		{ label: 'Aceptado', value: 'a' },
28
		{ label: 'Rechazado', value: 'r' }
29
	])
30
 
31
	const onSubmit = (data) => {
32
 
33
		const submitData = new FormData()
34
		Object.entries(data).map(([key, value]) => {
35
			submitData.append(key, value)
36
		})
37
 
38
		axios.post(edit_link, submitData)
39
			.then(({ data }) => {
40
				if (!data.success) {
41
					dispatch(addNotification({
42
						style: 'danger',
43
						msg: 'Ha ocurrido un error'
44
					}))
45
				}
46
 
47
				clearErrors()
48
				closeModal()
49
				dispatch(addNotification({
50
					style: 'success',
51
					msg: 'Usuario registrado'
52
				}))
53
			})
54
	}
55
 
56
	const checkEmail = () => {
57
		axios.get(email_link, { params: { email: watch('email') } })
58
			.then(({ data }) => {
59
				if (!data.success) {
60
					dispatch(addNotification({
61
						style: 'danger',
62
						msg: 'Ha ocurrido un error'
63
					}))
64
				}
65
 
66
				setValue('user_id', data.data.user_id)
67
				setValue('first_name', data.data.first_name)
68
				setValue('last_name', data.data.last_name)
69
				clearErrors()
70
			})
71
	}
72
 
73
	const getData = () => {
74
		axios.get(edit_link)
75
			.then(({ data }) => {
76
				if (!data.success) {
77
					dispatch(addNotification({
78
						style: 'danger',
79
						msg: 'Ha ocurrido un error'
80
					}))
81
				}
82
 
83
				setValue('user_id', data.data.user_id)
84
				setValue('first_name', data.data.first_name)
85
				setValue('last_name', data.data.last_name)
86
				clearErrors()
87
			})
88
	}
89
 
90
	return (
91
		<Modal size="md" onHide={closeModal} show={isOpen}>
92
			<Modal.Header closeButton>
93
				<Modal.Title>Nuevo candidato</Modal.Title>
94
			</Modal.Header>
95
			<form onSubmit={handleSubmit(onSubmit)}>
96
				<Modal.Body>
97
					<div className='form-group'>
98
						<label className="form-label">Comentario</label>
99
						<DescriptionInput
100
							name='comment'
101
							setValue={setValue}
102
						/>
103
						{errors.comment && <p>{errors.comment.message}</p>}
104
					</div>
105
					<div className='form-group'>
106
						<label className="form-label">Evaluación</label>
107
						<select className='form-control' name='evaluation' ref={register}>
108
							{
109
								pointsOptions.map(({ label, value }) => {
110
									return <option key={value} value={value}>{label}</option>
111
								})
112
							}
113
						</select>
114
					</div>
115
					<div className='form-group'>
116
						<label className="form-label">Resumen Curricular</label>
117
						<input
118
							className="form-control p-0"
119
							type="file"
120
							name="file"
121
							accept='pdf/docx'
122
							ref={register}
123
							style={{ height: '2rem' }}
124
						/>
125
					</div>
126
					<div className='form-group'>
127
						<label className="form-label">Estatus</label>
128
						<select className='form-control' name='evaluation' ref={register}>
129
							{
130
								statusOptions.map(({ label, value }) => {
131
									return <option key={value} value={value}>{label}</option>
132
								})
133
							}
134
						</select>
135
					</div>
136
					<div className='form-group'>
137
						<label className="form-label">Correo electrónico</label>
138
						<input type="email" name='email' className='form-control' ref={register({ required: true })} />
139
						{errors.email && <p>{errors.email.message}</p>}
140
					</div>
141
					<button
142
						type="button"
143
						className="btn btn-primary"
144
						onClick={checkEmail}
145
					>
146
                        Verificar Email
147
					</button>
148
					<div className='form-group'>
149
						<label className="form-label">Nombre</label>
150
						<input type="text" name='first_name' className='form-control' ref={register({ required: true })} />
151
						{errors.first_name && <p>{errors.first_name.message}</p>}
152
					</div>
153
					<div className='form-group'>
154
						<label className="form-label">Apellido</label>
155
						<input type="text" name='last_name' className='form-control' ref={register({ required: true })} />
156
						{errors.last_name && <p>{errors.last_name.message}</p>}
157
					</div>
158
				</Modal.Body>
159
				<Modal.Footer>
160
					<Button variant="danger" onClick={closeModal}>
161
                        Cancelar
162
					</Button>
163
					<Button
164
						variant="primary"
165
						type='submit'
166
					>
167
                        Enviar
168
					</Button>
169
				</Modal.Footer>
170
			</form>
171
		</Modal >
172
	)
173
}
174
 
175
export default EditModal