Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 2651 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
2650 stevensc 1
import { axios } from "../../../utils";
1 www 2
import React, { useEffect, useState } from "react";
3
import { connect } from "react-redux";
4
import { addNotification } from "../../../redux/notification/notification.actions";
5
import Spinner from "../../../shared/loading-spinner/Spinner";
2651 stevensc 6
import styled from "styled-components";
1 www 7
 
2650 stevensc 8
const StyledSwitch = styled.label`
9
  position: relative;
10
  display: inline-block;
11
  width: 60px;
12
  height: 34px;
13
  input {
14
    opacity: 0;
15
    width: 0;
16
    height: 0;
17
  }
18
  .slider {
19
    position: absolute;
20
    cursor: pointer;
21
    top: 0;
22
    left: 0;
23
    right: 0;
24
    bottom: 0;
25
    background-color: #ccc;
26
    -webkit-transition: 0.4s;
27
    transition: 0.4s;
28
  }
29
  .slider:before {
30
    position: absolute;
31
    content: "";
32
    height: 26px;
33
    width: 26px;
34
    left: 4px;
35
    bottom: 4px;
36
    background-color: white;
37
    -webkit-transition: 0.4s;
38
    transition: 0.4s;
39
  }
40
  input:checked + .slider {
41
    background-color: #2196f3;
42
  }
43
  input:focus + .slider {
44
    box-shadow: 0 0 1px #2196f3;
45
  }
46
  input:checked + .slider:before {
47
    -webkit-transform: translateX(26px);
48
    -ms-transform: translateX(26px);
49
    transform: translateX(26px);
50
  }
51
  .slider.round {
52
    border-radius: 34px;
53
  }
54
 
55
  .slider.round:before {
56
    border-radius: 50%;
57
  }
58
`;
59
 
1 www 60
const SocialNetworks = (props) => {
61
  // redux destructuring
62
  const { addNotification } = props;
63
 
64
  // props destructuring
65
  const { facebook, google, twitter, socialNetworkRoutes } = props;
66
 
67
  // states
68
  const [loading, setLoading] = useState(false);
69
  const [facebookConnected, setFacebookConnected] = useState(Boolean(facebook));
70
  const [twitterConnected, setTwitterConnected] = useState(Boolean(twitter));
71
  const [googleConnected, setGoogleConnected] = useState(Boolean(google));
72
 
73
  const handleAddSocialNetwork = (event, getOauthLink) => {
74
    event.preventDefault();
75
    setLoading(true);
76
    axios.get(getOauthLink).then((response) => {
77
      const resData = response.data;
78
      if (!resData.success) {
79
        return addNotification({
80
          style: "danger",
81
          msg: "Ha ocurrido un error, Por favor intente más tarde",
82
        });
83
      }
84
      const OauthLink = resData.data;
85
      window.location.replace(OauthLink);
86
    });
87
  };
88
 
89
  const handleRemoveSocialNetwork = (event, removeRoute) => {
90
    const network = event.currentTarget.dataset.network;
91
    event.preventDefault();
92
    setLoading(true);
93
    axios.post(removeRoute).then((response) => {
94
      const resData = response.data;
95
      if (!resData.success) {
96
        return addNotification({
97
          style: "danger",
98
          msg: resData.data,
99
        });
100
      }
101
      if (network === "facebook") setFacebookConnected(false);
102
      if (network === "twitter") setTwitterConnected(false);
103
      if (network === "google") setGoogleConnected(false);
104
      addNotification({
105
        style: "success",
106
        msg: resData.data,
107
      });
108
    });
109
    setLoading(false);
110
  };
111
 
112
  return (
2650 stevensc 113
    <div className="settings-container">
114
      <h2>Cambiar Configuración de las redes sociales</h2>
115
      <div className="acc-setting_content">
116
        <div className="d-flex align-items-center justify-content-between">
117
          <span>
118
            Facebook
119
          </span>
2652 stevensc 120
          <div className="input-c p-0 d-flex align-items-center" style={{ gap: '1rem' }}>
2650 stevensc 121
            <label htmlFor="is_current">{facebookConnected ? 'Desconectar' : 'Conectar'}</label>
122
            <div className="form-group">
123
              <StyledSwitch className="switch">
124
                <input
125
                  type="checkbox"
126
                  name="is_current"
1 www 127
                  data-network="facebook"
128
                  onClick={(e) =>
2650 stevensc 129
                    facebookConnected
130
                      ? handleRemoveSocialNetwork(e, socialNetworkRoutes.facebook.remove)
131
                      : handleAddSocialNetwork(e, socialNetworkRoutes.facebook.add)
1 www 132
                  }
2650 stevensc 133
                />
134
                <span className="slider round"></span>
135
              </StyledSwitch>
136
            </div>
137
          </div>
138
        </div>
139
        <div className="d-flex align-items-center justify-content-between">
140
          <span>
141
            Twitter
142
          </span>
2652 stevensc 143
          <div className="input-c p-0 d-flex align-items-center" style={{ gap: '1rem' }}>
2650 stevensc 144
            <label htmlFor="is_current">{twitterConnected ? 'Desconectar' : 'Conectar'}</label>
145
            <div className="form-group">
146
              <StyledSwitch className="switch">
147
                <input
148
                  type="checkbox"
149
                  name="is_current"
1 www 150
                  data-network="twitter"
151
                  onClick={(e) =>
2650 stevensc 152
                    twitterConnected
153
                      ? handleRemoveSocialNetwork(e, socialNetworkRoutes.twitter.remove)
154
                      : handleAddSocialNetwork(e, socialNetworkRoutes.twitter.add)
1 www 155
                  }
2650 stevensc 156
                />
157
                <span className="slider round"></span>
158
              </StyledSwitch>
159
            </div>
160
          </div>
161
        </div>
162
        <div className="d-flex align-items-center justify-content-between">
163
          <span>
164
            Google
165
          </span>
2652 stevensc 166
          <div className="input-c p-0 d-flex align-items-center" style={{ gap: '1rem' }}>
2650 stevensc 167
            <label htmlFor="is_current">{googleConnected ? 'Desconectar' : 'Conectar'}</label>
168
            <div className="form-group">
169
              <StyledSwitch className="switch">
170
                <input
171
                  type="checkbox"
172
                  name="is_current"
1 www 173
                  data-network="google"
174
                  onClick={(e) =>
2650 stevensc 175
                    googleConnected
176
                      ? handleRemoveSocialNetwork(e, socialNetworkRoutes.google.remove)
177
                      : handleAddSocialNetwork(e, socialNetworkRoutes.google.add)
1 www 178
                  }
2650 stevensc 179
                />
180
                <span className="slider round"></span>
181
              </StyledSwitch>
182
            </div>
183
          </div>
184
        </div>
185
      </div>
186
      {
187
        loading &&
1 www 188
        <div className="spinner-container">
189
          <Spinner />
190
        </div>
2650 stevensc 191
      }
192
    </div >
1 www 193
  );
194
};
195
 
196
const mapDispatchToProps = {
197
  addNotification: (notification) => addNotification(notification),
198
};
199
 
200
export default connect(null, mapDispatchToProps)(SocialNetworks);