Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 15123 | Rev 15130 | 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
 
15129 stevensc 12
	const { register, handleSubmit, watch, errors, setValue, clearErrors } = 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
 
15129 stevensc 66
	const getData = ({ editor }) => {
11056 stevensc 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))
15129 stevensc 78
				Object.entries(data.data).map(([key, value]) => {
79
					key === 'coment' && editor.setData(value)
80
					key !== 'file' && setValue(key, value)
81
				})
11056 stevensc 82
				clearErrors()
83
			})
84
	}
85
 
15122 stevensc 86
	useEffect(() => getData(), [isOpen])
11061 stevensc 87
 
11056 stevensc 88
	return (
89
		<Modal size="md" onHide={closeModal} show={isOpen}>
90
			<Modal.Header closeButton>
15120 stevensc 91
				<Modal.Title>Editar candidato</Modal.Title>
11056 stevensc 92
			</Modal.Header>
93
			<form onSubmit={handleSubmit(onSubmit)}>
94
				<Modal.Body>
95
					<div className='form-group'>
11061 stevensc 96
						<label className="form-label">Nombre</label>
97
						<input type="text" name='first_name' className='form-control' ref={register({ required: true })} />
98
						{errors.first_name && <p>{errors.first_name.message}</p>}
99
					</div>
100
					<div className='form-group'>
101
						<label className="form-label">Apellido</label>
102
						<input type="text" name='last_name' className='form-control' ref={register({ required: true })} />
103
						{errors.last_name && <p>{errors.last_name.message}</p>}
104
					</div>
105
					<div className='form-group'>
106
						<label className="form-label">Correo electrónico</label>
107
						<input type="email" name='email' className='form-control' ref={register({ required: true })} />
108
						{errors.email && <p>{errors.email.message}</p>}
109
					</div>
110
					<div className='form-group'>
11056 stevensc 111
						<label className="form-label">Comentario</label>
15121 stevensc 112
						<CKEditor
113
							onChange={(e) => setValue('coment', e.editor.getData())}
15129 stevensc 114
							onInstanceReady={getData}
15121 stevensc 115
							config={config} />
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 })}>
15121 stevensc 121
							{pointsOptions.map(({ label, value }) =>
122
								<option
123
									key={value}
124
									selected={watch('evaluation') === value}
125
									value={value}>
126
									{label}
127
								</option>
128
							)}
11056 stevensc 129
						</select>
11237 stevensc 130
						{errors.evaluation && <p>Este campo es requerido</p>}
11056 stevensc 131
					</div>
132
					<div className='form-group'>
133
						<label className="form-label">Resumen Curricular</label>
134
						<input
135
							className="form-control p-0"
136
							type="file"
137
							name="file"
138
							accept='pdf/docx'
139
							ref={register}
140
							style={{ height: '2rem' }}
141
						/>
142
					</div>
11071 stevensc 143
					<a href={fileUrl} className="btn btn-primary" target='_blank' rel="noreferrer">
144
						CV Actual
11061 stevensc 145
					</a>
11056 stevensc 146
					<div className='form-group'>
147
						<label className="form-label">Estatus</label>
11070 stevensc 148
						<select className='form-control' name='status' ref={register({ required: true })}>
15121 stevensc 149
							{statusOptions.map(({ label, value }) =>
150
								<option
151
									key={value}
152
									selected={watch('status') === value}
153
									value={value}>
154
									{label}
155
								</option>
156
							)}
11056 stevensc 157
						</select>
11237 stevensc 158
						{errors.status && <p>Este campo es requerido</p>}
11056 stevensc 159
					</div>
160
				</Modal.Body>
161
				<Modal.Footer>
15121 stevensc 162
					<Button variant="primary" type='submit'>
11071 stevensc 163
						Enviar
11056 stevensc 164
					</Button>
11238 stevensc 165
					<Button variant="danger" onClick={closeModal}>
166
						Cancelar
167
					</Button>
11056 stevensc 168
				</Modal.Footer>
169
			</form>
170
		</Modal >
171
	)
172
}
173
 
174
export default EditModal