Proyectos de Subversion LeadersLinked - SPA

Rev

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

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