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 PrivacyModal({
12
  show = false,
13
  privacies = {},
14
  privacy,
15
  groupId = '',
16
  onClose = () => {},
17
  onConfirm = () => {}
18
}) {
19
  const privacyId = useMemo(() => {
20
    const privaciesEntries = Object.entries(privacies)
21
    const currentPrivacy = privaciesEntries.find((priv) => priv[1] === privacy)
22
    return currentPrivacy?.[0] || ''
23
  }, [privacies, privacy])
24
 
25
  const privaciesOptions = useMemo(
26
    () => Object.entries(privacies).map(([value, name]) => ({ name, value })),
27
    [privacies]
28
  )
29
  const dispatch = useDispatch()
30
 
31
  const {
32
    control,
33
    handleSubmit,
34
    formState: { errors, isSubmitting }
35
  } = useForm({
36
    defaultValues: {
37
      privacy: ''
38
    },
39
    values: {
40
      privacy: privacyId
41
    }
42
  })
43
 
44
  const onSubmit = handleSubmit(async ({ privacy }) => {
45
    const url = `/group/my-groups/privacy/${groupId}`
46
    const formData = new FormData()
47
    formData.append('privacy', privacy)
48
 
49
    try {
50
      const response = await axios.post(url, formData)
51
      const { data, success } = response.data
52
 
53
      if (!success) {
54
        throw new Error('Error al editar el tipo de grupo')
55
      }
56
 
57
      onConfirm(data)
58
      onClose()
59
    } catch (error) {
60
      dispatch(addNotification({ style: 'danger', msg: error.message }))
61
    }
62
  })
63
 
64
  return (
65
    <Modal
66
      title='Privacidad'
67
      show={show}
68
      onClose={onClose}
69
      onAccept={onSubmit}
70
      loading={isSubmitting}
71
    >
72
      <Select
73
        name='privacy'
74
        control={control}
75
        placeholder='Privacidad'
76
        rules={{
77
          required: 'Por favor eliga una privacidad'
78
        }}
79
        error={errors.privacy?.message}
80
        options={privaciesOptions}
81
      />
82
    </Modal>
83
  )
84
}