Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev Autor Línea Nro. Línea
11065 stevensc 1
import React, { useState, useEffect } from 'react'
15121 stevensc 2
import axios from 'axios'
11056 stevensc 3
import { Button, Modal } from 'react-bootstrap'
4
import { useForm } from 'react-hook-form'
15121 stevensc 5
import { CKEditor } from 'ckeditor4-react'
11056 stevensc 6
import { useDispatch } from 'react-redux'
7
import { addNotification } from '../../../redux/notification/notification.actions'
15121 stevensc 8
import { config } from '../../../shared/helpers/ckeditor_config'
11056 stevensc 9
 
11227 stevensc 10
const EditModal = ({ closeModal, isOpen, edit_link, resetLink }) => {
11056 stevensc 11
 
15121 stevensc 12
	const { register, handleSubmit, watch, errors, setValue, clearErrors, getValues } = useForm()
11056 stevensc 13
	const dispatch = useDispatch()
11069 stevensc 14
 
11067 stevensc 15
	const [fileUrl, setFileUrl] = useState('')
11056 stevensc 16
	const [pointsOptions] = useState([
11065 stevensc 17
		{ label: 'Evaluación', value: 0 },
11056 stevensc 18
		{ label: 'Sugerir otro cargo', value: 0 },
19
		{ label: '25%', value: 1 },
20
		{ label: '50%', value: 2 },
21
		{ label: '75%', value: 3 },
22
		{ label: '100%', value: 4 }
23
	])
24
	const [statusOptions] = useState([
25
		{ label: 'Estatus', value: '' },
26
		{ label: 'Aceptado', value: 'a' },
27
		{ label: 'Rechazado', value: 'r' }
28
	])
29
 
30
	const onSubmit = (data) => {
31
 
32
		const submitData = new FormData()
15121 stevensc 33
		Object.entries(data)
34
			.map(([key, value]) => submitData.append(key, value))
11056 stevensc 35
 
36
		axios.post(edit_link, submitData)
37
			.then(({ data }) => {
38
				if (!data.success) {
14738 stevensc 39
					typeof data.data === 'string'
40
						?
41
						dispatch(addNotification({
42
							style: 'danger',
43
							msg: data.data
44
						}))
45
						: Object.entries(data.data).map(([key, value]) =>
46
							value.map(err =>
47
								dispatch(addNotification({
48
									style: 'danger',
49
									msg: `${key}: ${err}`
50
								}))
51
							)
52
						)
53
					return
11056 stevensc 54
				}
55
 
56
				clearErrors()
57
				closeModal()
11227 stevensc 58
				resetLink()
11056 stevensc 59
				dispatch(addNotification({
60
					style: 'success',
11061 stevensc 61
					msg: 'Registro actualizado'
11056 stevensc 62
				}))
63
			})
64
	}
65
 
66
	const getData = () => {
67
		axios.get(edit_link)
68
			.then(({ data }) => {
69
				if (!data.success) {
11067 stevensc 70
					return dispatch(addNotification({
11056 stevensc 71
						style: 'danger',
72
						msg: 'Ha ocurrido un error'
73
					}))
74
				}
11070 stevensc 75
 
11068 stevensc 76
				setFileUrl(data.data.file)
11061 stevensc 77
				Object.keys(data.data).map((key) => register(key))
11068 stevensc 78
				Object.entries(data.data).map(([key, value]) => key !== 'file' && setValue(key, value))
11056 stevensc 79
				clearErrors()
80
			})
81
	}
82
 
11063 stevensc 83
	useEffect(() => getData(), [edit_link])
11061 stevensc 84
 
11056 stevensc 85
	return (
86
		<Modal size="md" onHide={closeModal} show={isOpen}>
87
			<Modal.Header closeButton>
15120 stevensc 88
				<Modal.Title>Editar candidato</Modal.Title>
11056 stevensc 89
			</Modal.Header>
90
			<form onSubmit={handleSubmit(onSubmit)}>
91
				<Modal.Body>
92
					<div className='form-group'>
11061 stevensc 93
						<label className="form-label">Nombre</label>
94
						<input type="text" name='first_name' className='form-control' ref={register({ required: true })} />
95
						{errors.first_name && <p>{errors.first_name.message}</p>}
96
					</div>
97
					<div className='form-group'>
98
						<label className="form-label">Apellido</label>
99
						<input type="text" name='last_name' className='form-control' ref={register({ required: true })} />
100
						{errors.last_name && <p>{errors.last_name.message}</p>}
101
					</div>
102
					<div className='form-group'>
103
						<label className="form-label">Correo electrónico</label>
104
						<input type="email" name='email' className='form-control' ref={register({ required: true })} />
105
						{errors.email && <p>{errors.email.message}</p>}
106
					</div>
107
					<div className='form-group'>
11056 stevensc 108
						<label className="form-label">Comentario</label>
15121 stevensc 109
						<CKEditor
110
							onChange={(e) => setValue('coment', e.editor.getData())}
111
							onInstanceReady={(e) =>
112
								getValues('coment')
113
									? e.editor.setData(getValues('coment'))
114
									: e.editor.setData('')
115
							}
116
							config={config} />
11065 stevensc 117
						{errors.coment && <p>{errors.coment.message}</p>}
11056 stevensc 118
					</div>
119
					<div className='form-group'>
120
						<label className="form-label">Evaluación</label>
11070 stevensc 121
						<select className='form-control' name='evaluation' ref={register({ required: true })}>
15121 stevensc 122
							{pointsOptions.map(({ label, value }) =>
123
								<option
124
									key={value}
125
									selected={watch('evaluation') === value}
126
									value={value}>
127
									{label}
128
								</option>
129
							)}
11056 stevensc 130
						</select>
11237 stevensc 131
						{errors.evaluation && <p>Este campo es requerido</p>}
11056 stevensc 132
					</div>
133
					<div className='form-group'>
134
						<label className="form-label">Resumen Curricular</label>
135
						<input
136
							className="form-control p-0"
137
							type="file"
138
							name="file"
139
							accept='pdf/docx'
140
							ref={register}
141
							style={{ height: '2rem' }}
142
						/>
143
					</div>
11071 stevensc 144
					<a href={fileUrl} className="btn btn-primary" target='_blank' rel="noreferrer">
145
						CV Actual
11061 stevensc 146
					</a>
11056 stevensc 147
					<div className='form-group'>
148
						<label className="form-label">Estatus</label>
11070 stevensc 149
						<select className='form-control' name='status' ref={register({ required: true })}>
15121 stevensc 150
							{statusOptions.map(({ label, value }) =>
151
								<option
152
									key={value}
153
									selected={watch('status') === value}
154
									value={value}>
155
									{label}
156
								</option>
157
							)}
11056 stevensc 158
						</select>
11237 stevensc 159
						{errors.status && <p>Este campo es requerido</p>}
11056 stevensc 160
					</div>
161
				</Modal.Body>
162
				<Modal.Footer>
15121 stevensc 163
					<Button variant="primary" type='submit'>
11071 stevensc 164
						Enviar
11056 stevensc 165
					</Button>
11238 stevensc 166
					<Button variant="danger" onClick={closeModal}>
167
						Cancelar
168
					</Button>
11056 stevensc 169
				</Modal.Footer>
170
			</form>
171
		</Modal >
172
	)
173
}
174
 
175
export default EditModal