Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev Autor Línea Nro. Línea
11049 stevensc 1
import { Button, Modal } from 'react-bootstrap'
11046 stevensc 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'
15131 stevensc 8
import { CKEditor } from 'ckeditor4-react'
9
import { useEffect } from 'react'
10
import { config } from '../../../shared/helpers/ckeditor_config'
11046 stevensc 11
 
15060 stevensc 12
const AddModal = ({ closeModal, email_link, isOpen, add_link, onComplete }) => {
11046 stevensc 13
 
14
	//Hooks
15060 stevensc 15
	const { register, handleSubmit, watch, setError, errors, setValue, clearErrors } = useForm()
11046 stevensc 16
	const dispatch = useDispatch()
17
 
18
	//States
19
	const [isShowSecondPage, setIsShowSecondPage] = useState(false)
20
	const [pointsOptions] = useState([
11065 stevensc 21
		{ label: 'Evaluación', value: 0 },
11046 stevensc 22
		{ label: 'Sugerir otro cargo', value: 0 },
23
		{ label: '25%', value: 1 },
24
		{ label: '50%', value: 2 },
25
		{ label: '75%', value: 3 },
26
		{ label: '100%', value: 4 }
27
	])
28
	const [statusOptions] = useState([
29
		{ label: 'Estatus', value: '' },
30
		{ label: 'Aceptado', value: 'a' },
31
		{ label: 'Rechazado', value: 'r' }
32
	])
33
 
34
	const onSubmit = (data) => {
35
 
36
		const submitData = new FormData()
37
		Object.entries(data).map(([key, value]) => {
38
			submitData.append(key, value)
39
		})
40
 
41
		axios.post(add_link, submitData)
42
			.then(({ data }) => {
43
				if (!data.success) {
14738 stevensc 44
					typeof data.data === 'string'
45
						?
46
						dispatch(addNotification({
47
							style: 'danger',
48
							msg: data.data
49
						}))
50
						: Object.entries(data.data).map(([key, value]) =>
51
							value.map(err =>
52
								dispatch(addNotification({
53
									style: 'danger',
54
									msg: `${key}: ${err}`
55
								}))
56
							)
57
						)
58
					return
11046 stevensc 59
				}
60
 
11051 stevensc 61
				clearErrors()
62
				closeModal()
11061 stevensc 63
				setIsShowSecondPage(false)
15059 stevensc 64
				onComplete()
11046 stevensc 65
				dispatch(addNotification({
66
					style: 'success',
67
					msg: 'Usuario registrado'
68
				}))
69
			})
70
	}
71
 
72
	const showSecondPage = () => {
15131 stevensc 73
		if (watch('first_name') && watch('last_name') && watch('email')) setIsShowSecondPage(true)
11046 stevensc 74
 
75
		setError('first_name', { message: 'Este campo es requerido' })
76
		setError('last_name', { message: 'Este campo es requerido' })
77
		setError('email', { message: 'Este campo es requerido' })
78
	}
79
 
80
	const checkEmail = () => {
81
		axios.get(email_link, { params: { email: watch('email') } })
82
			.then(({ data }) => {
83
				if (!data.success) {
84
					dispatch(addNotification({
11051 stevensc 85
						style: 'danger',
14892 stevensc 86
						msg: data.data
11046 stevensc 87
					}))
88
				}
89
 
90
				setValue('user_id', data.data.user_id)
11051 stevensc 91
				setValue('first_name', data.data.first_name)
92
				setValue('last_name', data.data.last_name)
93
				clearErrors()
11046 stevensc 94
			})
95
	}
96
 
15131 stevensc 97
	useEffect(() => register('coment'), [])
98
 
11046 stevensc 99
	return (
11056 stevensc 100
		<Modal size="md" onHide={closeModal} show={isOpen}>
11046 stevensc 101
			<Modal.Header closeButton>
102
				<Modal.Title>Nuevo candidato</Modal.Title>
103
			</Modal.Header>
104
			<form onSubmit={handleSubmit(onSubmit)}>
11053 stevensc 105
				<Modal.Body>
11059 stevensc 106
					<div style={isShowSecondPage ? { display: 'none' } : { display: 'block' }}>
11057 stevensc 107
						<div className='form-group'>
108
							<label className="form-label">Correo electrónico</label>
109
							<input type="email" name='email' className='form-control' ref={register({ required: true })} />
110
							{errors.email && <p>{errors.email.message}</p>}
111
						</div>
112
						<button
113
							type="button"
114
							className="btn btn-primary"
115
							onClick={checkEmail}
116
						>
117
							Verificar Email
118
						</button>
119
						<div className='form-group'>
120
							<label className="form-label">Nombre</label>
121
							<input type="text" name='first_name' className='form-control' ref={register({ required: true })} />
122
							{errors.first_name && <p>{errors.first_name.message}</p>}
123
						</div>
124
						<div className='form-group'>
125
							<label className="form-label">Apellido</label>
126
							<input type="text" name='last_name' className='form-control' ref={register({ required: true })} />
127
							{errors.last_name && <p>{errors.last_name.message}</p>}
128
						</div>
11055 stevensc 129
					</div>
11059 stevensc 130
					<div style={isShowSecondPage ? { display: 'block' } : { display: 'none' }}>
11057 stevensc 131
						<div className='form-group'>
132
							<label className="form-label">Comentario</label>
15131 stevensc 133
							<CKEditor
134
								onChange={(e) => setValue('coment', e.editor.getData())}
135
								config={config}
11057 stevensc 136
							/>
11065 stevensc 137
							{errors.coment && <p>{errors.coment.message}</p>}
11057 stevensc 138
						</div>
139
						<div className='form-group'>
140
							<label className="form-label">Evaluación</label>
11070 stevensc 141
							<select className='form-control' name='evaluation' ref={register({ required: true })}>
15131 stevensc 142
								{pointsOptions.map(({ label, value }) =>
143
									<option key={value} value={value}>{label}</option>
144
								)}
11057 stevensc 145
							</select>
11237 stevensc 146
							{errors.evaluation && <p>Este campo es requerido</p>}
11057 stevensc 147
						</div>
148
						<div className='form-group'>
149
							<label className="form-label">Resumen Curricular</label>
150
							<input
151
								className="form-control p-0"
152
								type="file"
153
								name="file"
154
								accept='pdf/docx'
155
								ref={register}
156
								style={{ height: '2rem' }}
157
							/>
158
						</div>
159
						<div className='form-group'>
160
							<label className="form-label">Estatus</label>
11070 stevensc 161
							<select className='form-control' name='status' ref={register({ required: true })}>
15131 stevensc 162
								{statusOptions.map(({ label, value }) =>
163
									<option key={value} value={value}>{label}</option>
164
								)}
11057 stevensc 165
							</select>
11237 stevensc 166
							{errors.status && <p>Este campo es requerido</p>}
11057 stevensc 167
						</div>
11055 stevensc 168
					</div>
11053 stevensc 169
				</Modal.Body>
170
				<Modal.Footer>
11060 stevensc 171
					<Button variant="primary" style={isShowSecondPage ? { display: 'none' } : { display: 'block' }} onClick={showSecondPage}>
11057 stevensc 172
						Siguiente
173
					</Button>
11059 stevensc 174
					<Button variant="primary" type='submit' style={isShowSecondPage ? { display: 'block' } : { display: 'none' }}>
11057 stevensc 175
						Enviar
176
					</Button>
11059 stevensc 177
					<Button variant="danger" onClick={() => setIsShowSecondPage(false)} style={isShowSecondPage ? { display: 'block' } : { display: 'none' }}>
11056 stevensc 178
						Cancelar
179
					</Button>
11053 stevensc 180
				</Modal.Footer>
11046 stevensc 181
			</form>
182
		</Modal >
183
	)
184
}
185
 
186
export default AddModal