Proyectos de Subversion LeadersLinked - Backend

Rev

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