Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3688 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3719 stevensc 1
import React, { useMemo } from 'react';
2
import { useDispatch } from 'react-redux';
3
import { useForm } from 'react-hook-form';
4
 
5
import { axios } from '@utils';
6
import { addNotification } from '@store/notification/notification.actions';
7
 
8
import Modal from '@components/UI/modal/Modal';
9
import Select from '@components/UI/inputs/Select';
10
 
11
export default function AccessibilityModal({
12
  show = false,
13
  accessibilities = {},
14
  accessibility,
15
  privacy,
16
  groupId = '',
17
  onClose = () => {},
18
  onConfirm = () => {}
19
}) {
20
  const accessibilityId = useMemo(
21
    () => Object.values(accessibilities).find((value) => value === accessibility) || '',
22
    [accessibilities, accessibility]
23
  );
24
  const accessibilitiesOptions = useMemo(() => {
25
    const options = Object.entries(accessibilities).map(([value, name]) => ({
26
      name,
27
      value
28
    }));
29
 
30
    if (privacy === 'Privado') {
31
      return options.filter((acc) => acc.value !== 'aj');
32
    }
33
 
34
    return options;
35
  }, [accessibilities, privacy]);
36
  const dispatch = useDispatch();
37
 
38
  const {
39
    control,
40
    handleSubmit,
41
    formState: { errors, isSubmitting }
42
  } = useForm({
43
    defaultValues: {
44
      accessibility: ''
45
    },
46
    values: {
47
      accessibility: accessibilityId
48
    }
49
  });
50
 
51
  const onSubmit = handleSubmit(async ({ accessibility }) => {
52
    const url = `/group/my-groups/accessibility/${groupId}`;
53
    const formData = new FormData();
54
    formData.append('accessibility', accessibility);
55
 
56
    try {
57
      const response = await axios.post(url, formData);
58
      const { data, success } = response.data;
59
 
60
      if (!success) {
61
        throw new Error('Error al editar el tipo de grupo');
62
      }
63
 
64
      onConfirm(data);
65
      onClose();
66
    } catch (error) {
67
      dispatch(addNotification({ style: 'danger', msg: error.message }));
68
    }
69
  });
70
 
71
  return (
72
    <Modal
73
      title='Accesibilidad'
74
      show={show}
75
      onClose={onClose}
76
      onAccept={onSubmit}
77
      loading={isSubmitting}
78
    >
79
      <Select
80
        name='accessibility'
81
        control={control}
82
        placeholder='Accesibilidad'
83
        rules={{
84
          required: 'Por favor eliga una accesibilidad'
85
        }}
86
        error={errors.accessibility?.message}
87
        options={accessibilitiesOptions}
88
      />
89
    </Modal>
90
  );
91
}