Proyectos de Subversion LeadersLinked - SPA

Rev

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

import React, { useState } from "react";
import { connect } from "react-redux";

import { axios } from "utils";
import { addNotification } from "@app/redux/notification/notification.actions";

import Widget from "@components/UI/Widget";
import Spinner from "@components/UI/Spinner";
import SwitchInput from "@components/UI/SwitchInput";

const SocialNetworks = ({
  facebook,
  google,
  twitter,
  addNotification, // Redux action
}) => {
  const [loading, setLoading] = useState(false);

  const addSocialNetwork = (network) => {
    setLoading(true);

    axios
      .get(`/account-settings/add-${network.toLowerCase()}`)
      .then((response) => {
        const resData = response.data;
        if (!resData.success) {
          return addNotification({
            style: "danger",
            msg: "Ha ocurrido un error, Por favor intente más tarde",
          });
        }
        const OauthLink = resData.data;
        window.location.replace(OauthLink);
      });
  };

  const removeSocialNetwork = (network) => {
    setLoading(true);

    axios
      .post(`/account-settings/add-${network.toLowerCase()}`)
      .then((response) => {
        const { success, data } = response.data;

        if (!success) {
          throw new Error(data);
        }

        addNotification({ style: "success", msg: data });
      })
      .catch((err) => addNotification({ style: "danger", msg: err.message }))
      .finally(() => setLoading(false));
  };

  const socialNetworks = [
    {
      name: "Facebook",
      status: facebook,
    },
    {
      name: "Google",
      status: google,
    },
    {
      name: "Twitter",
      status: twitter,
    },
  ];

  return (
    <Widget>
      <Widget.Header title="Cambiar Configuración de las redes sociales" />

      <Widget.Body>
        {loading && <Spinner />}
        {!!socialNetworks.length &&
          socialNetworks.map(({ name, status }) => (
            <div
              key={name}
              className="d-flex align-items-center justify-content-between"
            >
              <span>{name}</span>

              <div className="d-flex align-items-center">
                <label htmlFor="is_current">
                  {status ? "Desconectar" : "Conectar"}
                </label>
                <div className="form-group">
                  <SwitchInput
                    isChecked={status}
                    setValue={(connect) =>
                      connect
                        ? removeSocialNetwork(name)
                        : addSocialNetwork(name)
                    }
                  />
                </div>
              </div>
            </div>
          ))}
      </Widget.Body>
    </Widget>
  );
};

const mapDispatchToProps = {
  addNotification: (notification) => addNotification(notification),
};

export default connect(null, mapDispatchToProps)(SocialNetworks);