Proyectos de Subversion LeadersLinked - SPA

Rev

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

import React, { useMemo } from 'react'
import { useDispatch } from 'react-redux'
import { useForm } from 'react-hook-form'

import { axios } from '@utils'
import { addNotification } from '@store/notification/notification.actions'

import Modal from '@components/UI/modal/Modal'
import Select from '@components/UI/inputs/Select'

export default function AccessibilityModal({
  show = false,
  accessibilities = {},
  accessibility,
  privacy,
  groupId = '',
  onClose = () => {},
  onConfirm = () => {}
}) {
  const accessibilityId = useMemo(
    () =>
      Object.entries(accessibilities).find(
        ([name, value]) => value === accessibility
      )?.[0] || '',
    [accessibilities, accessibility]
  )
  const accessibilitiesOptions = useMemo(() => {
    const options = Object.entries(accessibilities).map(([value, name]) => ({
      name,
      value
    }))

    if (privacy === 'Privado') {
      return options.filter((acc) => acc.value !== 'aj')
    }

    return options
  }, [accessibilities, privacy])
  const dispatch = useDispatch()

  const {
    control,
    handleSubmit,
    formState: { errors, isSubmitting }
  } = useForm({
    defaultValues: {
      accessibility: ''
    },
    values: {
      accessibility: accessibilityId
    }
  })

  const onSubmit = handleSubmit(async ({ accessibility }) => {
    const url = `/group/my-groups/accessibility/${groupId}`
    const formData = new FormData()
    formData.append('accessibility', accessibility)

    try {
      const response = await axios.post(url, formData)
      const { data, success } = response.data

      if (!success) {
        throw new Error('Error al editar el tipo de grupo')
      }

      onConfirm(data)
      onClose()
    } catch (error) {
      dispatch(addNotification({ style: 'danger', msg: error.message }))
    }
  })

  return (
    <Modal
      title='Accesibilidad'
      show={show}
      onClose={onClose}
      onAccept={onSubmit}
      loading={isSubmitting}
    >
      <Select
        name='accessibility'
        control={control}
        placeholder='Accesibilidad'
        rules={{
          required: 'Por favor eliga una accesibilidad'
        }}
        error={errors.accessibility?.message}
        options={accessibilitiesOptions}
      />
    </Modal>
  )
}