Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
3730 stevensc 1
/* eslint-disable react/prop-types */
1 www 2
import React from "react";
3
import { useState } from "react";
4
import { useForm } from "react-hook-form";
3730 stevensc 5
import { axios } from "../../../../../utils";
1 www 6
import Spinner from "../../../../loading-spinner/Spinner";
7
import { profileTypes } from "../../../Profile.types";
8
import { Button, Modal } from "react-bootstrap";
9
import styled from "styled-components";
3730 stevensc 10
import { addNotification } from "../../../../../redux/notification/notification.actions";
1 www 11
 
12
const StyledSpinnerContainer = styled.div`
13
  position: absolute;
14
  left: 0;
15
  top: 0;
16
  width: 100%;
17
  height: 100%;
18
  background: rgba(255, 255, 255, 0.4);
19
  display: flex;
20
  justify-content: center;
21
  align-items: center;
22
  z-index: 300;
23
`;
24
 
3730 stevensc 25
const SocialNetworks = ({
26
  facebook = '',
27
  twitter = '',
28
  instagram = '',
29
  profileId = '',
30
  profileType = ''
31
}) => {
1 www 32
 
33
  const { register, handleSubmit, setValue, getValues, setError } = useForm();
34
  const [isModalOpen, setIsModalOpen] = useState(false);
35
  const [modalLoading, setModalLoading] = useState(false);
36
  const [settedFacebook, setSettedtedFacebook] = useState(facebook);
37
  const [settedTwitter, setSettedTwitter] = useState(twitter);
38
  const [settedInstagram, setSettedInstagram] = useState(instagram);
39
 
40
  const handleModalOpen = (event) => {
41
    event && event.preventDefault();
42
    setIsModalOpen(!isModalOpen);
43
  };
44
 
45
  const handleEdit = (event) => {
46
    event.preventDefault();
47
    handleModalOpen();
48
    setValue("facebook", settedFacebook);
49
    setValue("twitter", settedTwitter);
50
    setValue("instagram", settedInstagram);
51
  };
52
 
53
  const onSubmitHandler = async (data) => {
54
    setModalLoading(true);
55
    let postPath = "";
56
    switch (profileType) {
57
      case profileTypes.USER:
58
        postPath = `/profile/my-profiles/social-network/${profileId}`;
59
        break;
60
      case profileTypes.COMPANY:
61
        postPath = `/my-company/${profileId}/profile/social-network`;
62
        break;
63
      default:
64
        break;
65
    }
66
    const formData = new FormData();
67
    Object.entries(data).map(([key, value]) => {
68
      formData.append(key, value);
69
    });
70
    await axios.post(postPath, formData).then((response) => {
71
      const resData = response.data;
3730 stevensc 72
      (resData);
1 www 73
      if (resData.success) {
74
        setSettedtedFacebook(resData.data.facebook);
75
        setSettedTwitter(resData.data.twitter);
76
        setSettedInstagram(resData.data.instagram);
77
        setIsModalOpen();
78
      } else {
79
        const resError = resData.data;
80
        if (resError.constructor.name === "Object") {
81
          Object.entries(resError).map(([key, value]) => {
82
            if (key in getValues()) {
83
              setError(key, {
84
                type: "manual",
85
                message: Array.isArray(value) ? value[0] : value,
86
              });
87
            }
88
          });
89
        } else {
90
          addNotification({
91
            style: "danger",
92
            msg: resError,
93
          });
94
        }
95
      }
96
    });
97
    setModalLoading(false);
98
  };
99
 
100
  return (
101
    <React.Fragment>
102
      <div className="user-social-network-ov">
103
        <h3>
104
          Redes Sociales
105
          <a
106
            href="#"
107
            title=""
108
            className="btn-social-network-edit"
109
            onClick={handleEdit}
110
          >
111
            <i className="fa fa-pencil"></i>
112
          </a>
113
        </h3>
114
      </div>
115
 
116
      <ul id="social-networks" className="social_links">
117
        {settedFacebook && (
118
          <li>
3730 stevensc 119
            <a href={settedFacebook} target="_blank" title="" rel="noreferrer">
1 www 120
              <i className="fa fa-facebook-square"></i>{" "}
121
              {settedFacebook.length > 32
122
                ? `${settedFacebook.substr(0, 32)}...`
123
                : settedFacebook}
124
            </a>
125
          </li>
126
        )}
127
        {settedTwitter && (
128
          <li>
3730 stevensc 129
            <a href={settedTwitter} title="" target="_blank" rel="noreferrer">
1 www 130
              <i className="fa fa-twitter"></i>
131
              {settedTwitter.length > 32
132
                ? `${settedTwitter.substr(0, 32)}...`
133
                : settedTwitter}
134
            </a>
135
          </li>
136
        )}
137
        {settedInstagram && (
138
          <li>
3730 stevensc 139
            <a href={settedInstagram} target="_blank" title="" rel="noreferrer">
1 www 140
              <i className="fa fa-instagram"></i>{" "}
141
              {settedInstagram.length > 32
142
                ? `${settedInstagram.substr(0, 32)}...`
143
                : settedInstagram}
144
            </a>
145
          </li>
146
        )}
147
      </ul>
148
 
149
      {/* modal */}
150
      <Modal
151
        show={isModalOpen}
152
        onHide={handleModalOpen}
153
        style={{ overflowY: "scroll" }}
154
      >
155
        <Modal.Header closeButton>
156
          <Modal.Title>Redes Sociales</Modal.Title>
157
        </Modal.Header>
158
        <form onSubmit={handleSubmit(onSubmitHandler)}>
159
          <Modal.Body>
160
            <div className="form-group">
161
              <input
162
                type="text"
163
                name="facebook"
164
                placeholder="Perfil de Facebook"
165
                ref={register}
166
                defaultValue={settedFacebook}
167
              />
168
            </div>
169
            <div className="form-group">
170
              <input
171
                type="text"
172
                name="twitter"
173
                placeholder="Perfil de Twitter"
174
                ref={register}
175
                defaultValue={settedTwitter}
176
              />
177
            </div>
178
            <div className="form-group">
179
              <input
180
                type="text"
181
                name="instagram"
182
                placeholder="Perfil de Instagram"
183
                ref={register}
184
                defaultValue={settedInstagram}
185
              />
186
            </div>
187
          </Modal.Body>
188
          <Modal.Footer>
189
            <Button type="submit">Enviar</Button>
190
            <Button variant="danger" onClick={handleModalOpen}>
1010 steven 191
              Cancelar
1 www 192
            </Button>
193
          </Modal.Footer>
194
        </form>
195
        {modalLoading && (
196
          <StyledSpinnerContainer>
197
            <Spinner />
198
          </StyledSpinnerContainer>
199
        )}
200
      </Modal>
201
    </React.Fragment>
202
  );
203
};
204
 
205
export default SocialNetworks;