Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
4359 stevensc 1
/* eslint-disable react/prop-types */
2
import React, { useEffect, useState } from "react";
2716 stevensc 3
import { axios } from "../../../utils";
1 www 4
import { useForm } from "react-hook-form";
5
import { connect } from "react-redux";
6
import { addNotification } from "../../../redux/notification/notification.actions";
4359 stevensc 7
 
8
// Components
1 www 9
import Spinner from "../../../shared/loading-spinner/Spinner";
10
import SwitchInput from "./switch-input/SwitchInput";
11
 
4359 stevensc 12
const Notifications = ({ addNotification }) => {
1 www 13
 
4359 stevensc 14
  const { register, handleSubmit, setValue } = useForm();
1 www 15
  const [loading, setLoading] = useState(false);
16
 
17
  const handleOnSubmit = async (data) => {
18
    setLoading(true);
19
    const formData = new FormData();
20
    Object.entries(data).map(([key, value]) => {
3284 stevensc 21
      if (value) formData.append(key, value === 'y' ? value : 'n');
1 www 22
    });
23
    await axios
24
      .post("/account-settings/notification", formData)
25
      .then((response) => {
26
        const resData = response.data;
27
        if (resData.success) {
28
          addNotification({
29
            style: "success",
30
            msg: resData.data,
31
          });
32
        } else {
33
          const errorMessage =
34
            typeof resData.data === "string"
35
              ? resData.data
36
              : "Ha ocurrido un error, Por favor intente mas tarde";
37
          addNotification({
38
            style: "danger",
39
            msg: errorMessage,
40
          });
41
        }
42
      });
43
    setLoading(false);
44
  };
45
 
46
  useEffect(async () => {
47
    setLoading(true);
48
    await axios.get("/account-settings/notification").then((response) => {
49
      const resData = response.data;
50
      if (resData.success) {
51
        Object.entries(resData.data).map(([key, value]) => {
52
          setValue(key, value);
53
        });
54
      }
55
    });
56
    setLoading(false);
57
  }, []);
58
 
4359 stevensc 59
  const NOTIFICATION_OPTIONS = [
60
    {
61
      label: 'Cuando recibo una solicitud de conexión',
62
      input_name: 'receive_connection_request'
63
    },
64
    {
65
      label: 'Cuando recibo una solicitud para unirme a un grupo',
4360 stevensc 66
      input_name: "receive_invitation_group"
4359 stevensc 67
    },
68
 
69
    {
70
      label: 'Cuando aceptan mi solicitud para unirme a un grupo',
4360 stevensc 71
      input_name: "accept_my_request_join_group"
4359 stevensc 72
    },
73
    {
74
      label: 'Cuando recibo una solicitud para unirme a una empresa',
4360 stevensc 75
      input_name: "receive_invitation_company"
4359 stevensc 76
    },
77
    {
78
      label: 'Cuando le dan me gusta a una de mis publicaciones',
4360 stevensc 79
      input_name: "like_my_feed"
4359 stevensc 80
    },
81
    {
82
      label: 'Cuando comentan una de mis publicaciones',
4360 stevensc 83
      input_name: "comment_my_feed"
4359 stevensc 84
    },
85
    {
86
      label: 'Cuando comparten una de mis publicaciones',
4360 stevensc 87
      input_name: "share_my_feed"
4359 stevensc 88
    },
89
    {
90
      label: 'Cuando recibo un mensaje',
4360 stevensc 91
      input_name: "receive_inmail"
4359 stevensc 92
    },
93
    {
94
      label: 'Cuando recibo una solicitud para unirse a mi grupo',
95
      name: "receive_request_join_my_group"
96
    }
97
  ]
98
 
1 www 99
  return (
4359 stevensc 100
    <div className="acc-setting">
1011 stevensc 101
      <h3>Notificaciones</h3>
4359 stevensc 102
      {loading
103
        ? <Spinner />
104
        :
105
        <form onSubmit={handleSubmit(handleOnSubmit)}>
4360 stevensc 106
          {NOTIFICATION_OPTIONS.map((option , index) => {
4359 stevensc 107
            return (
108
              <div className="notbat" key={index}>
109
                <span>
110
                  {option.label}
111
                </span>
112
                <SwitchInput register={register} name={option.input_name} />
113
              </div>
114
            )
115
          })}
116
          <button type="submit" className="btn btn-primary">
117
            Guardar
118
          </button>
119
        </form>
120
      }
121
    </div>
1 www 122
  );
123
};
124
 
125
const mapDispatchToProps = {
126
  addNotification: (notification) => addNotification(notification),
127
};
128
 
129
export default connect(null, mapDispatchToProps)(Notifications);