Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev Autor Línea Nro. Línea
14197 stevensc 1
/* eslint-disable no-mixed-spaces-and-tabs */
2
import axios from 'axios'
14231 stevensc 3
import { CKEditor } from 'ckeditor4-react'
14197 stevensc 4
import React, { useEffect, useState } from 'react'
14237 stevensc 5
import { useRef } from 'react'
14197 stevensc 6
import { useForm } from 'react-hook-form'
7
import { useDispatch } from 'react-redux'
8
import { useHistory, useParams } from 'react-router-dom'
9
import { addNotification } from '../../redux/notification/notification.actions'
14231 stevensc 10
import { config } from '../../shared/helpers/ckeditor_config'
14230 stevensc 11
import ToggleComponent from '../../shared/ToggleComponent'
14197 stevensc 12
 
13
const FormView = ({
14
	actionLink = '',
15
	setActionLink = function () { }
16
}) => {
17
 
18
	// Hooks
19
	const dispatch = useDispatch()
20
	const history = useHistory()
14237 stevensc 21
	const selectInput = useRef(null)
14197 stevensc 22
	const { action } = useParams()
14234 stevensc 23
	const {
24
		setValue,
25
		register,
26
		watch,
14236 stevensc 27
		handleSubmit
14234 stevensc 28
	} = useForm()
14197 stevensc 29
 
30
	//States
14205 stevensc 31
	const [supervisers, setSupervisers] = useState([])
14234 stevensc 32
	const [initObjectives, setInitObjectives] = useState('')
33
	const [initFunctions, setInitFunctions] = useState('')
14237 stevensc 34
	const [competencyOptions, setCompetencyOptions] = useState([])
35
	const [competenciesSelected, setCompetenciesSelected] = useState([])
36
	const [competencyTypeOptions, setCompetencyTypeOptions] = useState([])
14197 stevensc 37
 
38
	const onSubmit = () => {
39
 
14206 stevensc 40
		const submitData = new FormData()
14205 stevensc 41
		/* 		const content = []
14197 stevensc 42
		jobDescription.competencies.forEach(competency => competency.behaviors.forEach(behavior => {
43
			content.push({
44
				competencyUuid: behavior.competency_uuid,
45
				behaviorUuid: behavior.uuid,
46
				comment: watch(`${behavior.competency_uuid}-${behavior.uuid}-comment`),
47
				evaluation: watch(`select-${behavior.competency_uuid}-${behavior.uuid}`)
48
			})
49
		}))
50
 
51
		submitData.append('content', JSON.stringify(content))
14205 stevensc 52
		submitData.append('points', watch('points')) */
53
		//.append('comment', watch('comment'))
14197 stevensc 54
 
55
		axios.post(actionLink, submitData)
56
			.then(({ data }) => {
57
				if (!data.success) {
58
					return dispatch(addNotification({
59
						style: 'danger',
60
						msg: typeof data.data === 'string'
61
							? data.data
62
							: 'Ha ocurrido un error'
63
					}))
64
				}
65
 
66
				history.goBack()
67
				setActionLink('')
68
				dispatch(addNotification({
69
					style: 'success',
70
					msg: `Registro ${action === 'edit' ? 'actualizado' : 'añadido'}`
71
				}))
72
			})
73
	}
74
 
14238 stevensc 75
	const àddCompetencies = () => {
14237 stevensc 76
		const current_competency = competencyOptions.find(competency => competency.competency_id === selectInput.current.value)
77
		console.log(current_competency)
78
		setCompetenciesSelected(prev => [current_competency, ...prev])
79
	}
80
 
14197 stevensc 81
	useEffect(() => {
14230 stevensc 82
		register('status')
14231 stevensc 83
		register('objectives')
84
		register('functions')
14230 stevensc 85
	}, [])
86
 
87
	useEffect(() => {
14197 stevensc 88
		axios.get(actionLink)
89
			.then(({ data }) => {
90
				if (!data.success) {
91
					return dispatch(addNotification({
92
						style: 'danger',
93
						msg: 'Ha ocurrido un error'
94
					}))
95
				}
96
 
14206 stevensc 97
				setSupervisers(data.data['supervisers'].map(option => {
98
					return {
99
						key: option.name,
100
						value: option.uuid
101
					}
102
				}))
14234 stevensc 103
				setInitObjectives(data.data['objectives'])
104
				setInitFunctions(data.data['functions'])
14237 stevensc 105
				setCompetencyOptions(data.data['competencies'])
106
				setCompetencyTypeOptions(data.data['competency_types'])
107
				setCompetenciesSelected(data.data['competencies_selected'])
14234 stevensc 108
 
14205 stevensc 109
				setValue('name', data.data['name'])
14231 stevensc 110
				setValue('status', data.data['status'])
14205 stevensc 111
				setValue('job_description_id_boss', data.data['job_description_id_boss'])
14197 stevensc 112
 
113
			})
114
	}, [action])
115
 
116
	return (
117
		<section className="content">
118
			<div className="container-fluid">
119
				<div className="row">
120
					<div className="col-12">
121
						<form onSubmit={handleSubmit(onSubmit)}>
14232 stevensc 122
							<div className='card'>
14197 stevensc 123
								<div className="card-header">
124
									<ul className="nav nav-tabs" id="myTab" role="tablist">
125
										<li className="nav-item" role="presentation">
126
											<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>
127
										</li>
128
										<li className="nav-item" role="presentation">
129
											<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>
130
										</li>
131
										<li className="nav-item" role="presentation">
132
											<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>
133
										</li>
134
									</ul>
135
								</div>
136
								<div className="card-body">
137
									<div className="tab-content" id="myTabContent">
138
										<div className="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">
14237 stevensc 139
											<div className="card p-2">
14232 stevensc 140
												<div className="d-flex">
14205 stevensc 141
													<div className="col-4">
142
														<div className="form-group">
143
															<label>Nombre</label>
14228 stevensc 144
															<input className='form-control' type="text" name='name' ref={register} />
14197 stevensc 145
														</div>
14205 stevensc 146
													</div>
147
													<div className="col-4">
148
														<div className="form-group">
149
															<label>Nombre</label>
14206 stevensc 150
															<select className='form-control' name="job_description_id_boss" ref={register}>
14205 stevensc 151
																<option value="">No aplica</option>
14197 stevensc 152
																{
14207 stevensc 153
																	supervisers.map(({ key, value }) =>
14205 stevensc 154
																		<option key={value} value={value}>{key}</option>
155
																	)
14197 stevensc 156
																}
14205 stevensc 157
															</select>
14197 stevensc 158
														</div>
159
													</div>
14228 stevensc 160
													<div className="col-4">
161
														<div className="form-group">
14231 stevensc 162
															<label>Estatus</label>
14230 stevensc 163
															<ToggleComponent
164
																setValue={(e) => setValue('status', e)}
165
															/>
14228 stevensc 166
														</div>
167
													</div>
14205 stevensc 168
												</div>
14232 stevensc 169
												<div className="d-flex">
170
													<div className="form-group w-100">
14231 stevensc 171
														<label>Objetivo</label>
14237 stevensc 172
														{
173
															initObjectives
174
															&&
175
															<CKEditor
176
																onChange={(e) => setValue('objectives', e.editor.getData())}
14238 stevensc 177
																onInstanceReady={(e) => e.editor.setData(initObjectives)}
14237 stevensc 178
																config={config}
179
																name="objectives"
180
															/>
181
														}
14231 stevensc 182
													</div>
183
												</div>
14232 stevensc 184
												<div className="d-flex">
185
													<div className="form-group w-100">
14231 stevensc 186
														<label>Funciones</label>
14237 stevensc 187
														{
188
															initFunctions
189
															&&
190
															<CKEditor
191
																onChange={(e) => setValue('functions', e.editor.getData())}
14240 stevensc 192
																onInstanceReady={(e) => e.editor.setData(initFunctions)}
14237 stevensc 193
																config={config}
194
																name="functions"
195
															/>
196
														}
14231 stevensc 197
													</div>
198
												</div>
14205 stevensc 199
											</div>
14197 stevensc 200
										</div>
14205 stevensc 201
										<div className="tab-pane fade" id="profile" role="tabpanel" aria-labelledby="profile-tab">
14237 stevensc 202
											<div className="card p-2">
203
												<div className="d-flex justify-content-around">
14238 stevensc 204
													<div className="col-9">
205
														<select className='form-control' name="job_description_id_boss" ref={selectInput}>
206
															<option value="">Seleccione</option>
207
															{
208
																competencyOptions.map((competency) => {
209
																	const competency_type = competencyTypeOptions.find(type => type.competency_type_id === competency.competency_type_id)
14206 stevensc 210
 
14238 stevensc 211
																	return (
212
																		<option
213
																			key={competency.competency_id}
214
																			value={competency.competency_id}>
14239 stevensc 215
																			{`${competency_type?.name} - ${competency.name}`}
14238 stevensc 216
																		</option>
217
																	)
218
																})
219
															}
220
														</select>
221
													</div>
222
													<div className='col-3'>
223
														<button
14240 stevensc 224
															type='button'
14238 stevensc 225
															className='btn btn-primary'
226
															onClick={àddCompetencies}
227
														>
228
															Agregar Competencia
229
														</button>
230
													</div>
14237 stevensc 231
												</div>
232
											</div>
14205 stevensc 233
										</div>
14197 stevensc 234
										<div className="tab-pane fade" id="contact" role="tabpanel" aria-labelledby="contact-tab">
14206 stevensc 235
 
14197 stevensc 236
										</div>
237
									</div>
238
									<div className="form-group">
239
										<button type="submit" className="btn btn-primary btn-form-save-close mr-2">
240
											Guardar & Cerrar
241
										</button>
242
										<button
243
											type="button"
244
											className="btn btn-secondary btn-edit-cancel"
245
											onClick={() => history.goBack()}
246
										>
247
											Cancelar
248
										</button>
249
									</div>
250
								</div>
251
							</div>
252
						</form>
253
					</div>
254
				</div>
255
			</div>
256
		</section >
257
	)
258
}
259
 
260
export default FormView