Proyectos de Subversion LeadersLinked - SPA

Rev

Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3688 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
    () =>
22
      Object.entries(accessibilities).find(
23
        ([name, value]) => value === accessibility
24
      )?.[0] || '',
25
    [accessibilities, accessibility]
26
  )
27
  const accessibilitiesOptions = useMemo(() => {
28
    const options = Object.entries(accessibilities).map(([value, name]) => ({
29
      name,
30
      value
31
    }))
32
 
33
    if (privacy === 'Privado') {
34
      return options.filter((acc) => acc.value !== 'aj')
35
    }
36
 
37
    return options
38
  }, [accessibilities, privacy])
39
  const dispatch = useDispatch()
40
 
41
  const {
42
    control,
43
    handleSubmit,
44
    formState: { errors, isSubmitting }
45
  } = useForm({
46
    defaultValues: {
47
      accessibility: ''
48
    },
49
    values: {
50
      accessibility: accessibilityId
51
    }
52
  })
53
 
54
  const onSubmit = handleSubmit(async ({ accessibility }) => {
55
    const url = `/group/my-groups/accessibility/${groupId}`
56
    const formData = new FormData()
57
    formData.append('accessibility', accessibility)
58
 
59
    try {
60
      const response = await axios.post(url, formData)
61
      const { data, success } = response.data
62
 
63
      if (!success) {
64
        throw new Error('Error al editar el tipo de grupo')
65
      }
66
 
67
      onConfirm(data)
68
      onClose()
69
    } catch (error) {
70
      dispatch(addNotification({ style: 'danger', msg: error.message }))
71
    }
72
  })
73
 
74
  return (
75
    <Modal
76
      title='Accesibilidad'
77
      show={show}
78
      onClose={onClose}
79
      onAccept={onSubmit}
80
      loading={isSubmitting}
81
    >
82
      <Select
83
        name='accessibility'
84
        control={control}
85
        placeholder='Accesibilidad'
86
        rules={{
87
          required: 'Por favor eliga una accesibilidad'
88
        }}
89
        error={errors.accessibility?.message}
90
        options={accessibilitiesOptions}
91
      />
92
    </Modal>
93
  )
94
}