Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 15130 | | Comparar con el anterior | Ultima modificación | Ver Log |

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