Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
3692 stevensc 1
import React from 'react';
2
import { useDispatch, useSelector } from 'react-redux';
3
import { useForm } from 'react-hook-form';
1456 stevensc 4
 
3692 stevensc 5
import { axios } from '@app/utils';
6
import { useFetchHelper } from '@hooks';
7
import { addNotification } from '@app/redux/notification/notification.actions';
5 stevensc 8
 
3692 stevensc 9
import Modal from '@components/UI/modal/Modal';
10
import Input from '@components/UI/inputs/Input';
11
import Select from '@components/UI/inputs/Select';
1456 stevensc 12
 
3692 stevensc 13
const AddCompanyModal = ({ show = false, onHide = () => null, fetchCompanies = () => [] }) => {
14
  const { data: companySizes } = useFetchHelper('company-sizes');
15
  const { data: industries } = useFetchHelper('industries');
3432 stevensc 16
  const labels = useSelector(({ intl }) => intl.labels);
17
  const dispatch = useDispatch();
5 stevensc 18
 
2799 stevensc 19
  const {
20
    control,
21
    handleSubmit,
3692 stevensc 22
    formState: { errors }
3432 stevensc 23
  } = useForm();
5 stevensc 24
 
1456 stevensc 25
  const onSubmit = handleSubmit((data) => {
3432 stevensc 26
    const formData = new FormData();
27
    Object.entries(data).map(([key, value]) => formData.append(key, value));
1979 stevensc 28
 
5 stevensc 29
    axios
3692 stevensc 30
      .post('/company/my-companies/add', formData)
3432 stevensc 31
      .then((response) => {
32
        const { success, data } = response.data;
33
        if (!success) {
5 stevensc 34
          const errorMessage =
3692 stevensc 35
            typeof data === 'string'
3432 stevensc 36
              ? data
3692 stevensc 37
              : Object.entries(data).map(([key, value]) => `${key}: ${value[0]}`);
5 stevensc 38
 
3692 stevensc 39
          dispatch(addNotification({ style: 'danger', msg: errorMessage }));
3432 stevensc 40
          return;
5 stevensc 41
        }
42
 
3432 stevensc 43
        fetchCompanies();
44
        onHide();
5 stevensc 45
      })
655 stevensc 46
      .catch((err) => {
3692 stevensc 47
        dispatch(addNotification({ style: 'danger', msg: err.message }));
3432 stevensc 48
      });
49
  });
5 stevensc 50
 
51
  return (
3692 stevensc 52
    <Modal title={labels.new_company} show={show} onClose={onHide} onAccept={onSubmit}>
2087 stevensc 53
      <Input
3692 stevensc 54
        name='name'
2087 stevensc 55
        placeholder={labels.name_of_company}
56
        error={errors.name?.message}
2799 stevensc 57
        control={control}
3692 stevensc 58
        rules={{ required: 'Por favor ingrese el nombre de la Empresa' }}
2087 stevensc 59
      />
5 stevensc 60
 
2799 stevensc 61
      <Select
3692 stevensc 62
        name='industry_id'
2799 stevensc 63
        options={industries}
64
        control={control}
65
        rules={{ required: labels.select_industry }}
66
        error={errors.industry_id?.message}
67
      />
5 stevensc 68
 
2799 stevensc 69
      <Select
3692 stevensc 70
        name='company_size_id'
2799 stevensc 71
        options={companySizes}
72
        control={control}
73
        rules={{ required: labels.select_company_size }}
74
        error={errors.company_size_id?.message}
75
      />
5 stevensc 76
    </Modal>
3432 stevensc 77
  );
78
};
5 stevensc 79
 
3432 stevensc 80
export default AddCompanyModal;