Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3434 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3434 stevensc 1
import React from 'react';
2
import { useDispatch, useSelector } from 'react-redux';
3
import { Controller, useForm } from 'react-hook-form';
1902 stevensc 4
 
3434 stevensc 5
import { axios } from '@utils';
6
import { addNotification } from '@store/notification/notification.actions';
1921 stevensc 7
 
3434 stevensc 8
import Modal from '../modal/Modal';
9
import FormErrorFeedback from '../form/FormErrorFeedback';
10
import DropzoneComponent from '@components/dropzone/DropzoneComponent';
1902 stevensc 11
 
12
const CoverModal = ({
13
  show = false,
3434 stevensc 14
  sizes = '',
1902 stevensc 15
  onClose = () => {},
1921 stevensc 16
  onChange = () => {},
3434 stevensc 17
  url = ''
1902 stevensc 18
}) => {
3416 stevensc 19
  const labels = useSelector(({ intl }) => intl.labels);
20
  const dispatch = useDispatch();
1902 stevensc 21
 
2802 stevensc 22
  const {
3277 stevensc 23
    control,
24
    formState: { isSubmitting },
3434 stevensc 25
    handleSubmit
3416 stevensc 26
  } = useForm();
1902 stevensc 27
 
3450 stevensc 28
  const onSubmit = handleSubmit(async (cover) => {
3277 stevensc 29
    try {
3450 stevensc 30
      const response = await axios.post(url, cover);
3432 stevensc 31
      const { data, success } = response.data;
32
 
3434 stevensc 33
      if (!success) throw new Error('Error al actualizar el portada');
3432 stevensc 34
 
35
      onChange(data);
3416 stevensc 36
      onClose();
3277 stevensc 37
    } catch (error) {
3434 stevensc 38
      dispatch(addNotification({ style: 'danger', msg: error.message }));
3277 stevensc 39
    }
3416 stevensc 40
  });
1921 stevensc 41
 
1902 stevensc 42
  return (
43
    <Modal
44
      title={labels.cover}
45
      show={show}
46
      onClose={onClose}
47
      onAccept={onSubmit}
3277 stevensc 48
      loading={isSubmitting}
1902 stevensc 49
    >
3277 stevensc 50
      <Controller
3434 stevensc 51
        name='cover'
3277 stevensc 52
        control={control}
3434 stevensc 53
        rules={{ required: 'Portada requerida' }}
3277 stevensc 54
        render={({ field: { onChange, value }, fieldState: { error } }) => (
55
          <>
56
            <DropzoneComponent
3434 stevensc 57
              type='IMAGE'
3277 stevensc 58
              onUploaded={onChange}
59
              settedFile={value}
60
              recomendationText={`Imágenes recomendadas de ${sizes}`}
61
            />
62
            {error && <FormErrorFeedback>{error.message}</FormErrorFeedback>}
63
          </>
64
        )}
1902 stevensc 65
      />
66
    </Modal>
3416 stevensc 67
  );
68
};
1902 stevensc 69
 
3416 stevensc 70
export default CoverModal;