Proyectos de Subversion LeadersLinked - Backend

Rev

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

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