Proyectos de Subversion LeadersLinked - SPA

Rev

Autoría | Ultima modificación | Ver Log |

import React, { useState } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { useForm } from 'react-hook-form';
import { Button } from '@mui/material';

import { axios } from '@utils';
import { addNotification } from '@store/notification/notification.actions';
import FormErrorFeedback from '@components/UI/form/FormErrorFeedback';

const CommentForm = ({ linkCommentAdd = '' }) => {
  const [rating, setRating] = useState(1);
  const labels = useSelector(({ intl }) => intl.labels);
  const dispatch = useDispatch();

  const {
    register,
    handleSubmit,
    reset,
    formState: { errors }
  } = useForm({ mode: 'onBlur' });

  const addComment = handleSubmit(({ comment }) => {
    axios
      .post(linkCommentAdd, { comment, rating })
      .then((response) => {
        const { data, success } = response.data;

        if (!success) {
          const errorMessage = typeof data === 'string' ? data : JSON.stringify(data);
          throw new Error(errorMessage);
        }

        dispatch(addNotification({ style: 'success', msg: data.message }));
        setRating(1);
        reset();
      })
      .catch((err) => {
        dispatch(addNotification({ style: 'danger', msg: err.message }));
      });
  });

  return (
    <>
      <form onSubmit={addComment}>
        <div className='form-group'>
          <label htmlFor='comment'>Comentario</label>
          <textarea
            className='form-control'
            rows='4'
            name='comment'
            id='comment-add'
            placeholder={labels.write_a_post}
            maxLength={250}
            ref={register({ required: 'Este campo es requerido' })}
          />
          {errors.comment && <FormErrorFeedback>{errors.comment.message}</FormErrorFeedback>}
        </div>

        <Button
          color='primary'
          disabled={!rating}
          type='submit'
          sx={{ width: '100%', mt: 1, p: 1 }}
        >
          Enviar
        </Button>
      </form>
    </>
  );
};

export default CommentForm;