Proyectos de Subversion LeadersLinked - Backend

Rev

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