Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 2089 | Autoría | Ultima modificación | Ver Log |

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

import { axios } from '../../utils'
import { addNotification } from '../../redux/notification/notification.actions'
import { useFetchHelper } from '@hooks'

import Modal from 'components/UI/modal/Modal'
import FormErrorFeedback from 'components/UI/form/FormErrorFeedback'
import Input from '../UI/inputs/Input'

const AddGroupModal = ({ show, onHide, fetchGroups }) => {
  const { data: groupTypes } = useFetchHelper('group-types')
  const { data: industries } = useFetchHelper('industries')
  const dispatch = useDispatch()

  const { register, handleSubmit, errors, setError } = useForm()

  const onSubmit = handleSubmit((data) => {
    const formData = new FormData()
    Object.entries(data).forEach(([key, value]) => formData.append(key, value))

    axios
      .post(`/group/my-groups/add`, formData)
      .then(({ data: responseData }) => {
        const { data, success } = responseData

        if (!success) {
          const errorMessage = data
          const isObject = typeof errorMessage === 'object'

          if (isObject) {
            Object.entries(errorMessage).map(([key, value]) =>
              setError(key, {
                type: 'manual',
                message: Array.isArray(value) ? value[0] : value
              })
            )
            return
          }

          throw new Error(errorMessage)
        }

        fetchGroups()
        onHide()
      })
      .catch((err) => {
        dispatch(addNotification({ style: 'danger', msg: err.message }))
      })
  })

  return (
    <Modal title='Nuevo Grupo' show={show} onClose={onHide} onAccept={onSubmit}>
      <Input
        name='name'
        placeholder='Nombre del grupo'
        inputRef={register({
          required: 'Por favor ingrese el nombre del grupo'
        })}
        error={errors.name?.message}
      />

      <div className='form-group'>
        <select
          name='type_id'
          id='type_id'
          defaultValue=''
          ref={register({
            required: 'Por favor eliga un tipo'
          })}
        >
          <option value='' hidden>
            Tipo
          </option>
          {groupTypes.map(({ name, value }) => (
            <option value={value} key={name}>
              {name}
            </option>
          ))}
        </select>
        {errors.type_id && (
          <FormErrorFeedback>{errors.type_id.message}</FormErrorFeedback>
        )}
      </div>

      <div className='form-group'>
        <select
          name='industry_id'
          id='industry_id'
          defaultValue=''
          ref={register({
            required: 'Por favor eliga una industria'
          })}
        >
          <option value='' hidden>
            Industria
          </option>
          {industries.map(({ name, value }) => (
            <option value={value} key={value}>
              {name}
            </option>
          ))}
        </select>
        {errors.industry_id && (
          <FormErrorFeedback>{errors.industry_id.message}</FormErrorFeedback>
        )}
      </div>
    </Modal>
  )
}

export default AddGroupModal