Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 14236 | Rev 14238 | 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
 
14237 stevensc 75
	const handleSetCompetencies = () => {
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
																data={initObjectives}
177
																onChange={(e) => setValue('objectives', e.editor.getData())}
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
																data={initFunctions}
192
																onChange={(e) => setValue('functions', e.editor.getData())}
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">
204
													<select className='form-control' name="job_description_id_boss" ref={selectInput}>
205
														<option value="">Seleccione</option>
206
														{
207
															competencyOptions.map((competency) => {
208
																const competency_type = competencyTypeOptions.find(type => type.competency_type_id === competency.competency_type_id)
14206 stevensc 209
 
14237 stevensc 210
																return (
211
																	<option
212
																		key={competency.competency_id}
213
																		value={competency.competency_id}>
214
																		{`${competency_type} - ${competency.name}`}
215
																	</option>
216
																)
217
															})
218
														}
219
													</select>
220
													<button
221
														className='btn btn-primary'
222
														onClick={handleSetCompetencies}
223
													>
224
														Agregar Competencia
225
													</button>
226
												</div>
227
											</div>
14205 stevensc 228
										</div>
14197 stevensc 229
										<div className="tab-pane fade" id="contact" role="tabpanel" aria-labelledby="contact-tab">
14206 stevensc 230
 
14197 stevensc 231
										</div>
232
									</div>
233
									<div className="form-group">
234
										<button type="submit" className="btn btn-primary btn-form-save-close mr-2">
235
											Guardar & Cerrar
236
										</button>
237
										<button
238
											type="button"
239
											className="btn btn-secondary btn-edit-cancel"
240
											onClick={() => history.goBack()}
241
										>
242
											Cancelar
243
										</button>
244
									</div>
245
								</div>
246
							</div>
247
						</form>
248
					</div>
249
				</div>
250
			</div>
251
		</section >
252
	)
253
}
254
 
255
export default FormView