Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 2801 | 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 { sendReport } from '@app/services/reports';
import { addNotification } from '@app/redux/notification/notification.actions';
import { closeReportModal } from '@app/redux/report/report.actions';

import Modal from '@components/UI/modal/Modal';
import Input from '@components/UI/inputs/Input';
import Select from '@components/UI/inputs/Select';

export default function ReportModal() {
  const { showModal, type, reportUrl, onComplete } = useSelector((state) => state.report);
  const dispatch = useDispatch();

  const {
    control,
    getValues,
    handleSubmit,
    formState: { isSubmitting, errors }
  } = 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}
      loading={isSubmitting}
    >
      <Select
        label='Motivo'
        name='reason'
        placeholder='Seleccione un motivo'
        options={reasons}
        control={control}
        rules={{ required: 'Este campo es requerido' }}
        error={errors.reason?.message}
        defaultValue={reasons[0].value}
      />

      <Select
        name='block_user'
        label='Bloquear a este usuario'
        options={block_options}
        placeholder='Seleccione un opción'
        control={control}
        rules={{ required: 'Este campo es requerido' }}
        error={errors.block_user?.message}
        defaultValue={block_options[1].value}
      />

      <Input
        name='comment'
        label='Comentario'
        placeholder='(Opcional)'
        control={control}
        error={errors.comment?.message}
      />
    </Modal>
  );
}