Rev 11486 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useState, useEffect } from 'react'
import { Button, Modal } from 'react-bootstrap'
import axios from 'axios'
import { useForm } from 'react-hook-form'
import { useDispatch } from 'react-redux'
import { addNotification } from '../../../redux/notification/notification.actions'
const EditAndAddModal = ({ action_link, closeModal, type, onComplete }) => {
//Hooks
const { register, handleSubmit, errors, setValue, clearErrors } = useForm()
const [isActive, setIsActive] = useState(false)
const dispatch = useDispatch()
const onSubmit = (data) => {
const submitData = new FormData()
Object.entries({
...data,
status: isActive ? 'a' : 'i'
}).map(([key, value]) => {
submitData.append(key, value)
})
axios.post(action_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()
onComplete()
dispatch(addNotification({
style: 'success',
msg: 'Usuario registrado'
}))
})
}
useEffect(() => {
if (type === 'edit') {
axios.get(action_link)
.then(({ data }) => {
if (!data.success) {
return dispatch(addNotification({
style: 'danger',
msg: 'Ha ocurrido un error'
}))
}
Object.entries(data.data).map(([key, value]) => {
if (key === 'status') {
return setIsActive(value === 'a' ? true : false)
}
setValue(key, value)
})
})
}
}, [type])
return (
<Modal size="md" onHide={closeModal} show={type === 'add' || type === ('edit')}>
<Modal.Header closeButton>
<Modal.Title>
{
type === 'add'
? 'Agregar Meta'
: 'Editar Meta'
}
</Modal.Title>
</Modal.Header>
<form onSubmit={handleSubmit(onSubmit)}>
<Modal.Body>
<div className="d-flex" style={{ gap: '10px' }}>
<div className='form-group'>
<label className="form-label">Título</label>
<input type="text" name='title' className='form-control' ref={register({ required: true })} />
{errors.title && <p>{errors.title.message}</p>}
</div>
<div className='form-group'>
<label className="form-label">Estatus</label>
<div
className={`toggle d-block btn btn-primary ${!isActive && 'off'}`}
data-toggle="toggle"
role="button"
style={{ width: '130px' }}
onClick={() => setIsActive(!isActive)}
>
<input
type="checkbox"
checked={isActive}
/>
<div className="toggle-group">
<label htmlFor="status" className="btn btn-primary toggle-on">Activo</label>
<label htmlFor="status" className="btn btn-light toggle-off">Inactivo</label>
<span className="toggle-handle btn btn-light"></span>
</div>
</div>
</div>
</div>
<div className='form-group'>
<label className="form-label">Descripción</label>
<textarea type="text" name='description' className='form-control' rows='3' ref={register({ required: true })} />
{errors.description && <p>{errors.description.message}</p>}
</div>
</Modal.Body>
<Modal.Footer>
<Button variant="primary" type='submit'>
Enviar
</Button>
<Button variant="danger" onClick={closeModal}>
Cancelar
</Button>
</Modal.Footer>
</form>
</Modal >
)
}
export default EditAndAddModal