Proyectos de Subversion LeadersLinked - SPA

Rev

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

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

import { axios } from 'utils/index'
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 AddCompanyModal = ({
  show = false,
  onHide = () => null,
  fetchCompanies = () => []
}) => {
  const { data: companySizes } = useFetchHelper('company-sizes')
  const { data: industries } = useFetchHelper('industries')
  const labels = useSelector(({ intl }) => intl.labels)
  const dispatch = useDispatch()

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

  const onSubmit = handleSubmit((data) => {
    const formData = new FormData()

    Object.entries(data).map(([key, value]) => formData.append(key, value))

    axios
      .post('/company/my-companies/add', formData)
      .then(({ data: response }) => {
        if (!response.success) {
          const errorMessage =
            typeof response.data === 'string'
              ? response.data
              : Object.entries(response.data).map(
                  ([key, value]) => `${key}: ${value[0]}`
                )

          dispatch(addNotification({ style: 'danger', msg: errorMessage }))
          return
        }

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

  return (
    <Modal
      title={labels.new_company}
      show={show}
      onClose={onHide}
      onAccept={onSubmit}
    >
      <Input
        name='name'
        placeholder={labels.name_of_company}
        ref={register({
          required: 'Por favor ingrese el nombre de la Empresa'
        })}
        error={errors.name?.message}
      />

      <div className='form-group'>
        <select
          name='industry_id'
          ref={register({
            required: labels.select_industry
          })}
        >
          <option value='' hidden>
            {labels.industry}
          </option>
          {industries.map(({ name, value }) => (
            <option value={value} key={value}>
              {name}
            </option>
          ))}
        </select>
        {errors.industry_id && (
          <FormErrorFeedback>{errors.industry_id.message}</FormErrorFeedback>
        )}
      </div>

      <div className='form-group'>
        <select
          name='company_size_id'
          ref={register({
            required: labels.select_company_size
          })}
        >
          <option value='' hidden>
            {labels.company_size}
          </option>
          {companySizes.map(({ name, value }) => (
            <option value={value} key={value}>
              {name}
            </option>
          ))}
        </select>
        {errors.company_size_id && (
          <FormErrorFeedback>
            {errors.company_size_id.message}
          </FormErrorFeedback>
        )}
      </div>
    </Modal>
  )
}

export default AddCompanyModal