Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3450 | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

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