Rev 1760 | Rev 2100 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React from 'react'
import { useForm } from 'react-hook-form'
import { useDispatch, useSelector } from 'react-redux'
import { block_options, reasons } from '@app/constants/report'
import { addNotification } from '@app/redux/notification/notification.actions'
import { closeReportModal } from '@app/redux/report/report.actions'
import { sendReport } from '@app/services/reports'
import FormInputText from '../UI/form/FormInputText'
import SelectInput from '../UI/form/SelectField'
import Modal from '../UI/modal/Modal'
export default function ReportModal() {
const { showModal, type, reportUrl, onComplete } = useSelector(
(state) => state.report
)
const dispatch = useDispatch()
const { control, errors, getValues, handleSubmit } = useForm({
defaultValues: {
reason: reasons[0].value,
block_user: block_options[1].value,
comment: ''
}
})
const onSubmit = handleSubmit(async () => {
try {
const formData = getValues()
const { success, data } = await sendReport(reportUrl, formData)
if (!success) {
throw new Error(data)
}
if (onComplete) {
onComplete()
}
dispatch(addNotification({ style: 'success', msg: data.message }))
dispatch(closeReportModal())
} catch (error) {
dispatch(addNotification({ style: 'danger', msg: error.message }))
}
})
const closeModal = () => dispatch(closeReportModal())
return (
<Modal
show={showModal}
onClose={closeModal}
title={`Reportar ${type.toLowerCase()}`}
onAccept={onSubmit}
>
<SelectInput
id='reason'
name='reason'
label='Motivo'
options={reasons}
control={control}
error={errors.reason?.message}
rules={{ required: 'Este campo es requerido' }}
defaultValue={reasons[0].value}
/>
<SelectInput
id='block_user'
name='block_user'
label='Bloquear a este usuario'
options={block_options}
control={control}
error={errors.block_user?.message}
rules={{ required: 'Este campo es requerido' }}
defaultValue={block_options[1].value}
/>
<FormInputText
name='comment'
control={control}
rules={{ required: false }}
error={errors.comment?.message}
label='Comentario'
placeholder='(Opcional)'
/>
</Modal>
)
}