Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 14231 | Rev 14233 | 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'])
14232 stevensc 87
				setValue('objectives', data.data['objectives'])
88
				setValue('functions', data.data['functions'])
14205 stevensc 89
				setValue('job_description_id_boss', data.data['job_description_id_boss'])
14197 stevensc 90
 
91
			})
92
	}, [action])
93
 
94
	return (
95
		<section className="content">
96
			<div className="container-fluid">
97
				<div className="row">
98
					<div className="col-12">
99
						<form onSubmit={handleSubmit(onSubmit)}>
14232 stevensc 100
							<div className='card'>
14197 stevensc 101
								<div className="card-header">
102
									<ul className="nav nav-tabs" id="myTab" role="tablist">
103
										<li className="nav-item" role="presentation">
104
											<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>
105
										</li>
106
										<li className="nav-item" role="presentation">
107
											<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>
108
										</li>
109
										<li className="nav-item" role="presentation">
110
											<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>
111
										</li>
112
									</ul>
113
								</div>
114
								<div className="card-body">
115
									<div className="tab-content" id="myTabContent">
116
										<div className="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">
14232 stevensc 117
											<div className="card px-2">
118
												<div className="d-flex">
14205 stevensc 119
													<div className="col-4">
120
														<div className="form-group">
121
															<label>Nombre</label>
14228 stevensc 122
															<input className='form-control' type="text" name='name' ref={register} />
14197 stevensc 123
														</div>
14205 stevensc 124
													</div>
125
													<div className="col-4">
126
														<div className="form-group">
127
															<label>Nombre</label>
14206 stevensc 128
															<select className='form-control' name="job_description_id_boss" ref={register}>
14205 stevensc 129
																<option value="">No aplica</option>
14197 stevensc 130
																{
14207 stevensc 131
																	supervisers.map(({ key, value }) =>
14205 stevensc 132
																		<option key={value} value={value}>{key}</option>
133
																	)
14197 stevensc 134
																}
14205 stevensc 135
															</select>
14197 stevensc 136
														</div>
137
													</div>
14228 stevensc 138
													<div className="col-4">
139
														<div className="form-group">
14231 stevensc 140
															<label>Estatus</label>
14230 stevensc 141
															<ToggleComponent
142
																setValue={(e) => setValue('status', e)}
143
															/>
14228 stevensc 144
														</div>
145
													</div>
14205 stevensc 146
												</div>
14232 stevensc 147
												<div className="d-flex">
148
													<div className="form-group w-100">
14231 stevensc 149
														<label>Objetivo</label>
150
														<CKEditor
151
															onChange={(e) => setValue('objectives', e.editor.getData())}
152
															initData={watch('objectives')}
153
															config={config}
154
															name="objectives"
155
														/>
156
													</div>
157
												</div>
14232 stevensc 158
												<div className="d-flex">
159
													<div className="form-group w-100">
14231 stevensc 160
														<label>Funciones</label>
161
														<CKEditor
162
															onChange={(e) => setValue('functions', e.editor.getData())}
163
															initData={watch('functions')}
164
															config={config}
165
															name="functions"
166
														/>
167
													</div>
168
												</div>
14205 stevensc 169
											</div>
14197 stevensc 170
										</div>
14205 stevensc 171
										<div className="tab-pane fade" id="profile" role="tabpanel" aria-labelledby="profile-tab">
14206 stevensc 172
 
14205 stevensc 173
										</div>
14197 stevensc 174
										<div className="tab-pane fade" id="contact" role="tabpanel" aria-labelledby="contact-tab">
14206 stevensc 175
 
14197 stevensc 176
										</div>
177
									</div>
178
									<div className="form-group">
179
										<button type="submit" className="btn btn-primary btn-form-save-close mr-2">
180
											Guardar & Cerrar
181
										</button>
182
										<button
183
											type="button"
184
											className="btn btn-secondary btn-edit-cancel"
185
											onClick={() => history.goBack()}
186
										>
187
											Cancelar
188
										</button>
189
									</div>
190
								</div>
191
							</div>
192
						</form>
193
					</div>
194
				</div>
195
			</div>
196
		</section >
197
	)
198
}
199
 
200
export default FormView