Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 2781 | 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, { useState } from "react";
2
import { connect } from "react-redux";
2781 stevensc 3
 
3432 stevensc 4
import { axios } from "utils";
5
import { addNotification } from "@app/redux/notification/notification.actions";
2781 stevensc 6
 
3432 stevensc 7
import Widget from "@components/UI/Widget";
8
import Spinner from "@components/UI/Spinner";
9
import SwitchInput from "@components/UI/SwitchInput";
2781 stevensc 10
 
11
const SocialNetworks = ({
12
  facebook,
13
  google,
14
  twitter,
3432 stevensc 15
  addNotification, // Redux action
2781 stevensc 16
}) => {
3432 stevensc 17
  const [loading, setLoading] = useState(false);
2781 stevensc 18
 
19
  const addSocialNetwork = (network) => {
3432 stevensc 20
    setLoading(true);
2781 stevensc 21
 
22
    axios
23
      .get(`/account-settings/add-${network.toLowerCase()}`)
24
      .then((response) => {
3432 stevensc 25
        const resData = response.data;
2781 stevensc 26
        if (!resData.success) {
27
          return addNotification({
3432 stevensc 28
            style: "danger",
29
            msg: "Ha ocurrido un error, Por favor intente más tarde",
30
          });
2781 stevensc 31
        }
3432 stevensc 32
        const OauthLink = resData.data;
33
        window.location.replace(OauthLink);
34
      });
35
  };
2781 stevensc 36
 
37
  const removeSocialNetwork = (network) => {
3432 stevensc 38
    setLoading(true);
2781 stevensc 39
 
40
    axios
41
      .post(`/account-settings/add-${network.toLowerCase()}`)
3432 stevensc 42
      .then((response) => {
43
        const { success, data } = response.data;
2781 stevensc 44
 
45
        if (!success) {
3432 stevensc 46
          throw new Error(data);
2781 stevensc 47
        }
48
 
3432 stevensc 49
        addNotification({ style: "success", msg: data });
2781 stevensc 50
      })
3432 stevensc 51
      .catch((err) => addNotification({ style: "danger", msg: err.message }))
52
      .finally(() => setLoading(false));
53
  };
2781 stevensc 54
 
55
  const socialNetworks = [
56
    {
3432 stevensc 57
      name: "Facebook",
58
      status: facebook,
2781 stevensc 59
    },
60
    {
3432 stevensc 61
      name: "Google",
62
      status: google,
2781 stevensc 63
    },
64
    {
3432 stevensc 65
      name: "Twitter",
66
      status: twitter,
67
    },
68
  ];
2781 stevensc 69
 
70
  return (
71
    <Widget>
3432 stevensc 72
      <Widget.Header title="Cambiar Configuración de las redes sociales" />
2781 stevensc 73
 
74
      <Widget.Body>
75
        {loading && <Spinner />}
76
        {!!socialNetworks.length &&
77
          socialNetworks.map(({ name, status }) => (
78
            <div
79
              key={name}
3432 stevensc 80
              className="d-flex align-items-center justify-content-between"
2781 stevensc 81
            >
82
              <span>{name}</span>
83
 
3432 stevensc 84
              <div className="d-flex align-items-center">
85
                <label htmlFor="is_current">
86
                  {status ? "Desconectar" : "Conectar"}
2781 stevensc 87
                </label>
3432 stevensc 88
                <div className="form-group">
2781 stevensc 89
                  <SwitchInput
90
                    isChecked={status}
91
                    setValue={(connect) =>
92
                      connect
93
                        ? removeSocialNetwork(name)
94
                        : addSocialNetwork(name)
95
                    }
96
                  />
97
                </div>
98
              </div>
99
            </div>
100
          ))}
101
      </Widget.Body>
102
    </Widget>
3432 stevensc 103
  );
104
};
2781 stevensc 105
 
106
const mapDispatchToProps = {
3432 stevensc 107
  addNotification: (notification) => addNotification(notification),
108
};
2781 stevensc 109
 
3432 stevensc 110
export default connect(null, mapDispatchToProps)(SocialNetworks);