Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 14228 | Rev 14231 | 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'
3
import React, { useEffect, useState } from 'react'
4
import { useForm } from 'react-hook-form'
5
import { useDispatch } from 'react-redux'
6
import { useHistory, useParams } from 'react-router-dom'
7
import { addNotification } from '../../redux/notification/notification.actions'
14230 stevensc 8
import ToggleComponent from '../../shared/ToggleComponent'
14197 stevensc 9
 
10
const FormView = ({
11
	actionLink = '',
12
	setActionLink = function () { }
13
}) => {
14
 
15
	// Hooks
16
	const dispatch = useDispatch()
17
	const history = useHistory()
18
	const { action } = useParams()
19
	const { setValue, register, watch, handleSubmit } = useForm()
20
 
21
	//States
14205 stevensc 22
	const [supervisers, setSupervisers] = useState([])
14197 stevensc 23
 
24
	const onSubmit = () => {
25
 
14206 stevensc 26
		const submitData = new FormData()
14205 stevensc 27
		/* 		const content = []
14197 stevensc 28
		jobDescription.competencies.forEach(competency => competency.behaviors.forEach(behavior => {
29
			content.push({
30
				competencyUuid: behavior.competency_uuid,
31
				behaviorUuid: behavior.uuid,
32
				comment: watch(`${behavior.competency_uuid}-${behavior.uuid}-comment`),
33
				evaluation: watch(`select-${behavior.competency_uuid}-${behavior.uuid}`)
34
			})
35
		}))
36
 
37
		submitData.append('content', JSON.stringify(content))
14205 stevensc 38
		submitData.append('points', watch('points')) */
39
		//.append('comment', watch('comment'))
14197 stevensc 40
 
41
		axios.post(actionLink, submitData)
42
			.then(({ data }) => {
43
				if (!data.success) {
44
					return dispatch(addNotification({
45
						style: 'danger',
46
						msg: typeof data.data === 'string'
47
							? data.data
48
							: 'Ha ocurrido un error'
49
					}))
50
				}
51
 
52
				history.goBack()
53
				setActionLink('')
54
				dispatch(addNotification({
55
					style: 'success',
56
					msg: `Registro ${action === 'edit' ? 'actualizado' : 'añadido'}`
57
				}))
58
			})
59
	}
60
 
61
	useEffect(() => {
14230 stevensc 62
		register('status')
63
	}, [])
64
 
65
	useEffect(() => {
14197 stevensc 66
		axios.get(actionLink)
67
			.then(({ data }) => {
68
				if (!data.success) {
69
					return dispatch(addNotification({
70
						style: 'danger',
71
						msg: 'Ha ocurrido un error'
72
					}))
73
				}
74
 
14206 stevensc 75
				setSupervisers(data.data['supervisers'].map(option => {
76
					return {
77
						key: option.name,
78
						value: option.uuid
79
					}
80
				}))
14205 stevensc 81
				setValue('name', data.data['name'])
82
				setValue('job_description_id_boss', data.data['job_description_id_boss'])
14197 stevensc 83
 
84
			})
85
	}, [action])
86
 
87
	return (
88
		<section className="content">
89
			<div className="container-fluid">
90
				<div className="row">
91
					<div className="col-12">
92
						<form onSubmit={handleSubmit(onSubmit)}>
93
							<div className='card'>
94
								<div className="card-header">
95
									<ul className="nav nav-tabs" id="myTab" role="tablist">
96
										<li className="nav-item" role="presentation">
97
											<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>
98
										</li>
99
										<li className="nav-item" role="presentation">
100
											<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>
101
										</li>
102
										<li className="nav-item" role="presentation">
103
											<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>
104
										</li>
105
									</ul>
106
								</div>
107
								<div className="card-body">
108
									<div className="tab-content" id="myTabContent">
109
										<div className="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">
110
											<div className="card">
14205 stevensc 111
												<div className="row">
112
													<div className="col-4">
113
														<div className="form-group">
114
															<label>Nombre</label>
14228 stevensc 115
															<input className='form-control' type="text" name='name' ref={register} />
14197 stevensc 116
														</div>
14205 stevensc 117
													</div>
118
													<div className="col-4">
119
														<div className="form-group">
120
															<label>Nombre</label>
14206 stevensc 121
															<select className='form-control' name="job_description_id_boss" ref={register}>
14205 stevensc 122
																<option value="">No aplica</option>
14197 stevensc 123
																{
14207 stevensc 124
																	supervisers.map(({ key, value }) =>
14205 stevensc 125
																		<option key={value} value={value}>{key}</option>
126
																	)
14197 stevensc 127
																}
14205 stevensc 128
															</select>
14197 stevensc 129
														</div>
130
													</div>
14228 stevensc 131
													<div className="col-4">
132
														<div className="form-group">
133
															<label>Nombre</label>
14230 stevensc 134
															<ToggleComponent
135
																setValue={(e) => setValue('status', e)}
136
															/>
14228 stevensc 137
														</div>
138
													</div>
14205 stevensc 139
												</div>
140
											</div>
14197 stevensc 141
										</div>
14205 stevensc 142
										<div className="tab-pane fade" id="profile" role="tabpanel" aria-labelledby="profile-tab">
14206 stevensc 143
 
14205 stevensc 144
										</div>
14197 stevensc 145
										<div className="tab-pane fade" id="contact" role="tabpanel" aria-labelledby="contact-tab">
14206 stevensc 146
 
14197 stevensc 147
										</div>
148
									</div>
149
									<div className="form-group">
150
										<button type="submit" className="btn btn-primary btn-form-save-close mr-2">
151
											Guardar & Cerrar
152
										</button>
153
										<button
154
											type="button"
155
											className="btn btn-secondary btn-edit-cancel"
156
											onClick={() => history.goBack()}
157
										>
158
											Cancelar
159
										</button>
160
									</div>
161
								</div>
162
							</div>
163
						</form>
164
					</div>
165
				</div>
166
			</div>
167
		</section >
168
	)
169
}
170
 
171
export default FormView