Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev Autor Línea Nro. Línea
10540 stevensc 1
/* eslint-disable no-mixed-spaces-and-tabs */
10513 stevensc 2
import axios from 'axios'
10518 stevensc 3
import React, { useState, useEffect } from 'react'
10513 stevensc 4
import { useForm } from 'react-hook-form'
5
import { useDispatch } from 'react-redux'
10450 stevensc 6
import { useHistory, useParams } from 'react-router-dom'
10513 stevensc 7
import { addNotification } from '../../../redux/notification/notification.actions'
10436 stevensc 8
 
10439 stevensc 9
 
10513 stevensc 10
const FormView = ({ actionLink }) => {
11
 
10558 stevensc 12
	// States
13
	const [generalOptions, setGeneralOptions] = useState({
14
		uuid: '',
15
		name: '',
16
		description: '',
17
		functions: '',
18
		objectives: ''
19
	})
20
	const [pointsOptions, setPointsOptions] = useState([
21
		{ label: 'Evaluación', value: 0 },
22
		{ label: 'Sugerir otro cargo', value: 0 },
23
		{ label: '25%', value: 1 },
24
		{ label: '50%', value: 2 },
25
		{ label: '75%', value: 3 },
26
		{ label: '100%', value: 4 }
27
	])
28
	const [statusOptions, setStatusOptions] = useState([
29
		{ label: 'Estatus', value: '' },
30
		{ label: 'Aceptado', value: 'a' },
31
		{ label: 'Rechazado', value: 'r' }
32
	])
33
	const [vacancyOptions, setVacancyOptions] = useState([
34
		{ label: 'Estatus', value: '' },
35
		{ label: 'Aceptado', value: 'a' },
36
		{ label: 'Rechazado', value: 'r' }
37
	])
38
	const [candidatesOptions, setCandidatesOptions] = useState([
39
		{ label: 'Estatus', value: '' },
40
		{ label: 'Aceptado', value: 'a' },
41
		{ label: 'Rechazado', value: 'r' }
42
	])
43
	const [competencies, setCompetencies] = useState([])
10516 stevensc 44
 
10558 stevensc 45
	// Hooks
46
	const { setValue, register, watch } = useForm()
47
	const history = useHistory()
48
	const dispatch = useDispatch()
49
	const { action } = useParams()
10439 stevensc 50
 
10558 stevensc 51
	useEffect(() => {
10753 stevensc 52
		axios.get(actionLink)
53
			.then(({ data }) => {
54
				const resData = data.data
10513 stevensc 55
 
10753 stevensc 56
				if (!data.success) {
57
					dispatch(addNotification({
58
						style: 'error',
59
						msg: 'Ha ocurrido un error'
60
					}))
61
				}
10513 stevensc 62
 
10753 stevensc 63
				setValue('comment', resData.interview.comment)
64
				setValue('points', resData.interview.points)
65
				setValue('status', resData.interview.status)
66
				setCompetencies(resData.job_description.competencies)
67
				setGeneralOptions({
68
					...generalOptions,
69
					name: resData.vacancy.name,
70
					uuid: resData.vacancy.uuid,
71
					description: resData.vacancy.description,
72
					functions: resData.job_description.functions,
73
					objectives: resData.job_description.objectives
10558 stevensc 74
				})
10753 stevensc 75
			})
76
 
10558 stevensc 77
	}, [action])
10516 stevensc 78
 
10558 stevensc 79
	return (
80
		<section className="content">
81
			<div className="container-fluid">
82
				<div className="row">
83
					<div className="col-12">
84
						<div className='card'>
85
							<div className="card-header">
86
								<ul className="nav nav-tabs" id="myTab" role="tablist">
87
									<li className="nav-item" role="presentation">
88
										<button className="nav-link active" id="home-tab" data-toggle="tab" data-target="#home" type="button" role="tab" aria-controls="home" aria-selected="true">General</button>
89
									</li>
90
									<li className="nav-item" role="presentation">
91
										<button className="nav-link" id="profile-tab" data-toggle="tab" data-target="#profile" type="button" role="tab" aria-controls="profile" aria-selected="false">Competencias</button>
92
									</li>
93
									<li className="nav-item" role="presentation">
94
										<button className="nav-link" id="contact-tab" data-toggle="tab" data-target="#contact" type="button" role="tab" aria-controls="contact" aria-selected="false">Conclusiones</button>
95
									</li>
96
								</ul>
97
							</div>
98
							<div className="card-body">
99
								<div className="tab-content" id="myTabContent">
100
									<div className="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">
101
										<div className="row p-3 justify-content-between">
10569 stevensc 102
											<div className="col-6">
103
												<div className="form-group">
104
													<label>Vacantes</label>
10753 stevensc 105
													<select className='form-control' name='points' ref={register} disabled={action === 'edit'}>
10569 stevensc 106
														{
107
															vacancyOptions.map(({ label, value }) => (
108
																<option selected={generalOptions.name === label} key={value} value={value}>{label}</option>
109
															))
110
														}
111
													</select>
112
												</div>
10558 stevensc 113
											</div>
10569 stevensc 114
											<div className="col-6">
115
												<div className="form-group">
116
													<label>Candidatos</label>
10753 stevensc 117
													<select className='form-control' name='points' ref={register} disabled={action === 'edit'}>
10569 stevensc 118
														{
119
															candidatesOptions.map(({ label, value }) => (
120
																<option selected={watch('candidate') === value} key={value} value={value}>{label}</option>
121
															))
122
														}
123
													</select>
124
												</div>
10558 stevensc 125
											</div>
126
										</div>
127
										<div className="card">
128
											<div className="card-body">
129
												<h5>{generalOptions.name}</h5>
130
												<p>{generalOptions.description}</p>
131
												<h6>Funciones</h6>
132
												<p>{generalOptions.functions}</p>
133
												<h6>Objetivos</h6>
134
												<p>{generalOptions.objectives}</p>
135
											</div>
136
										</div>
137
									</div>
138
									<div className="tab-pane fade" id="profile" role="tabpanel" aria-labelledby="profile-tab">
139
										{
10753 stevensc 140
											competencies.map((competency) => (
141
												<div className="card" key={competency.competency_uuid}>
142
													<div className="card-header">
143
														<h5>{competency.competency_name} - {competency.competency_type_name}</h5>
144
													</div>
145
													<div className="card-body">
146
														{
147
															competency.behaviors
148
															&&
149
															competency.behaviors.map((behavior) => (
150
																<table key={behavior.uuid} className="table table-hover">
151
																	<thead>
152
																		<tr>
153
																			<th style={{ width: '20%' }}>Conducta Observable</th>
154
																			<th style={{ width: '60%' }}>Comentario</th>
155
																			<th style={{ width: '20%' }}>Evaluación</th>
156
																		</tr>
157
																	</thead>
158
																	<tbody>
159
																		<tr>
160
																			<td style={{ width: '20%' }}>{behavior.description}</td>
161
																			<td style={{ width: '60%' }}>
162
																				<textarea
163
																					name={`${behavior.competency_uuid}_${behavior.uuid}-name`}
164
																					cols="30"
165
																					rows="3"
166
																					ref={register}
167
																					className='form-control w100'
168
																				/>
169
																			</td>
170
																			<td style={{ width: '20%' }}>
171
																				<select className='form-control' name={`${behavior.competency_uuid}_${behavior.uuid}-points`} ref={register}>
172
																					{
173
																						pointsOptions.map(({ label, value }) => (
174
																							<option selected={behavior.points === value} key={value} value={value}>{label}</option>
175
																						))
176
																					}
177
																				</select>
178
																			</td>
179
																		</tr>
180
																	</tbody>
181
																</table>
182
															))
183
														}
184
													</div>
185
												</div>
186
											))
10558 stevensc 187
										}
188
									</div>
189
									<div className="tab-pane fade" id="contact" role="tabpanel" aria-labelledby="contact-tab">
190
										<div className="form-group">
191
											<label>Comentario</label>
192
											<input type="text" name="comment" className="form-control" ref={register} />
193
										</div>
194
										<div className="form-group">
195
											<label>Evaluación</label>
196
											<select className='form-control' name='points' ref={register}>
197
												{
198
													pointsOptions.map(({ label, value }) => (
199
														<option selected={watch('points') === value} key={value} value={value}>{label}</option>
200
													))
201
												}
202
											</select>
203
										</div>
204
										<div className="form-group">
205
											<label>Estatus</label>
206
											<select className='form-control' name='status' ref={register}>
207
												{
208
													statusOptions.map(({ label, value }) => (
209
														<option selected={watch('status') === value} key={value} value={value}>{label}</option>
210
													))
211
												}
212
											</select>
213
										</div>
214
									</div>
215
								</div>
216
								<div className="form-group">
217
									<button type="submit" className="btn btn-primary btn-form-save-close mr-2">
10753 stevensc 218
										Guardar
10558 stevensc 219
									</button>
220
									<button
221
										type="button"
222
										className="btn btn-secondary btn-edit-cancel"
223
										onClick={() => history.goBack()}
224
									>
10753 stevensc 225
										Cancelar
10558 stevensc 226
									</button>
227
								</div>
228
							</div>
229
						</div>
230
					</div>
231
				</div>
232
			</div>
233
		</section >
234
	)
10436 stevensc 235
}
236
export default FormView