Proyectos de Subversion LeadersLinked - Backend

Rev

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

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