Rev 15060 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import { Button, Modal } from 'react-bootstrap'
import axios from 'axios'
import React from 'react'
import { useState } from 'react'
import { useForm } from 'react-hook-form'
import { useDispatch } from 'react-redux'
import { addNotification } from '../../../redux/notification/notification.actions'
import { CKEditor } from 'ckeditor4-react'
import { useEffect } from 'react'
import { config } from '../../../shared/helpers/ckeditor_config'
const AddModal = ({ closeModal, email_link, isOpen, add_link, onComplete }) => {
//Hooks
const { register, handleSubmit, watch, setError, errors, setValue, clearErrors } = useForm()
const dispatch = useDispatch()
//States
const [isShowSecondPage, setIsShowSecondPage] = useState(false)
const [pointsOptions] = useState([
{ label: 'Evaluación', value: 0 },
{ label: 'Sugerir otro cargo', value: 0 },
{ label: '25%', value: 1 },
{ label: '50%', value: 2 },
{ label: '75%', value: 3 },
{ label: '100%', value: 4 }
])
const [statusOptions] = useState([
{ label: 'Estatus', value: '' },
{ label: 'Aceptado', value: 'a' },
{ label: 'Rechazado', value: 'r' }
])
const onSubmit = (data) => {
const submitData = new FormData()
Object.entries(data).map(([key, value]) => {
submitData.append(key, value)
})
axios.post(add_link, submitData)
.then(({ data }) => {
if (!data.success) {
typeof data.data === 'string'
?
dispatch(addNotification({
style: 'danger',
msg: data.data
}))
: Object.entries(data.data).map(([key, value]) =>
value.map(err =>
dispatch(addNotification({
style: 'danger',
msg: `${key}: ${err}`
}))
)
)
return
}
clearErrors()
closeModal()
setIsShowSecondPage(false)
onComplete()
dispatch(addNotification({
style: 'success',
msg: 'Usuario registrado'
}))
})
}
const showSecondPage = () => {
if (watch('first_name') && watch('last_name') && watch('email')) setIsShowSecondPage(true)
setError('first_name', { message: 'Este campo es requerido' })
setError('last_name', { message: 'Este campo es requerido' })
setError('email', { message: 'Este campo es requerido' })
}
const checkEmail = () => {
axios.get(email_link, { params: { email: watch('email') } })
.then(({ data }) => {
if (!data.success) {
dispatch(addNotification({
style: 'danger',
msg: data.data
}))
}
setValue('user_id', data.data.user_id)
setValue('first_name', data.data.first_name)
setValue('last_name', data.data.last_name)
clearErrors()
})
}
useEffect(() => register('coment'), [])
return (
<Modal size="md" onHide={closeModal} show={isOpen}>
<Modal.Header closeButton>
<Modal.Title>Nuevo candidato</Modal.Title>
</Modal.Header>
<form onSubmit={handleSubmit(onSubmit)}>
<Modal.Body>
<div style={isShowSecondPage ? { display: 'none' } : { display: 'block' }}>
<div className='form-group'>
<label className="form-label">Correo electrónico</label>
<input type="email" name='email' className='form-control' ref={register({ required: true })} />
{errors.email && <p>{errors.email.message}</p>}
</div>
<button
type="button"
className="btn btn-primary"
onClick={checkEmail}
>
Verificar Email
</button>
<div className='form-group'>
<label className="form-label">Nombre</label>
<input type="text" name='first_name' className='form-control' ref={register({ required: true })} />
{errors.first_name && <p>{errors.first_name.message}</p>}
</div>
<div className='form-group'>
<label className="form-label">Apellido</label>
<input type="text" name='last_name' className='form-control' ref={register({ required: true })} />
{errors.last_name && <p>{errors.last_name.message}</p>}
</div>
</div>
<div style={isShowSecondPage ? { display: 'block' } : { display: 'none' }}>
<div className='form-group'>
<label className="form-label">Comentario</label>
<CKEditor
onChange={(e) => setValue('coment', e.editor.getData())}
config={config}
/>
{errors.coment && <p>{errors.coment.message}</p>}
</div>
<div className='form-group'>
<label className="form-label">Evaluación</label>
<select className='form-control' name='evaluation' ref={register({ required: true })}>
{pointsOptions.map(({ label, value }) =>
<option key={value} value={value}>{label}</option>
)}
</select>
{errors.evaluation && <p>Este campo es requerido</p>}
</div>
<div className='form-group'>
<label className="form-label">Resumen Curricular</label>
<input
className="form-control p-0"
type="file"
name="file"
accept='pdf/docx'
ref={register}
style={{ height: '2rem' }}
/>
</div>
<div className='form-group'>
<label className="form-label">Estatus</label>
<select className='form-control' name='status' ref={register({ required: true })}>
{statusOptions.map(({ label, value }) =>
<option key={value} value={value}>{label}</option>
)}
</select>
{errors.status && <p>Este campo es requerido</p>}
</div>
</div>
</Modal.Body>
<Modal.Footer>
<Button variant="primary" style={isShowSecondPage ? { display: 'none' } : { display: 'block' }} onClick={showSecondPage}>
Siguiente
</Button>
<Button variant="primary" type='submit' style={isShowSecondPage ? { display: 'block' } : { display: 'none' }}>
Enviar
</Button>
<Button variant="danger" onClick={() => setIsShowSecondPage(false)} style={isShowSecondPage ? { display: 'block' } : { display: 'none' }}>
Cancelar
</Button>
</Modal.Footer>
</form>
</Modal >
)
}
export default AddModal