Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
1 www 1
import React, { useEffect, useRef } from "react";
2
import { useState } from "react";
3
import { connect } from "react-redux";
4
import styled from "styled-components";
1105 stevensc 5
import { axios } from "../../../utils";
1 www 6
import CompanyFollowersHelper from "../../../shared/helpers/company-followers-helper/CompanyFollowers";
7
import parse from "html-react-parser";
8
import { addNotification } from "../../../redux/notification/notification.actions";
9
import Spinner from "../../../shared/loading-spinner/Spinner";
10
import { setTimelineUrl } from "../../../redux/feed/feed.actions";
11
import FeedSection from "../../../dashboard/components/feed-section/FeedSection";
12
 
13
const TABS = {
14
  FEEDS: "FEEDS",
15
  INFO: "INFO",
16
};
17
 
18
const View = (props) => {
19
  // backendVars destructuring
20
  const {
21
    companyId,
22
    cover,
23
    image,
24
    totalFollowers,
25
    facebook,
26
    twitter,
27
    instagram,
28
    companyName,
29
    overview,
30
    locations,
31
    industry,
32
    companySize,
33
    foundationYear,
34
    website,
35
    timeline,
36
  } = props.backendVars;
37
 
38
  // redux destructuring
39
  const { addNotification, setTimelineUrl } = props;
40
 
41
  // const [isFollower, setIsFollower] = useState(!!+follower);
42
  const [authorizedLinks, setAuthorizedLinks] = useState(null);
43
  const [loading, setLoading] = useState(false);
44
  const [followers, setFollowers] = useState(totalFollowers);
45
  const [initialLoading, setInitialLoading] = useState(true);
1108 stevensc 46
  const [isFollower, setIsFollower] = useState(false);
1107 stevensc 47
  const [currentTab, setCurrentTab] = useState(TABS.INFO);
1 www 48
  const [suggestionCompanies, setSuggestionCompanies] = useState([])
1705 steven 49
  const [lookMore, setLookMore] = useState(false);
1 www 50
  const shouldSetInitialTab = useRef(true);
51
 
1110 stevensc 52
  useEffect(() => {
1 www 53
    setTimelineUrl(timeline);
1110 stevensc 54
    fetchAuthorizedLinks();
1 www 55
    shouldSetInitialTab.current = false;
56
    setInitialLoading(false);
57
    getSuggestionCompanies()
58
  }, []);
1108 stevensc 59
 
1 www 60
  const getSuggestionCompanies = async () => {
61
    try {
62
      setLoading(true);
63
      const response = await axios.get(`/helpers/company-suggestion/${companyId}`);
1105 stevensc 64
      if (response.data.success)
1 www 65
        setSuggestionCompanies(response.data.data)
66
    } catch (error) {
67
      console.log('>>: error > ', error)
1105 stevensc 68
    } finally {
1 www 69
      setLoading(false)
70
    }
71
  }
72
 
1107 stevensc 73
  useEffect(() => {
74
    isFollower
1108 stevensc 75
      ? setCurrentTab(TABS.FEEDS)
76
      : setCurrentTab(TABS.INFO)
1114 stevensc 77
  }, [isFollower]);
1107 stevensc 78
 
1 www 79
  const fetchAuthorizedLinks = async () => {
80
    setLoading(true);
81
    const response = await axios.get(`/company/view/${companyId}`);
82
    const resData = response.data;
1105 stevensc 83
    (resData);
1 www 84
    if (resData.success) {
85
      setAuthorizedLinks(resData.data);
86
      setFollowers(resData.data.total_followers);
87
      if (resData.data.link_unfollow) {
88
        setIsFollower(true);
89
        if (shouldSetInitialTab.current) setCurrentTab(TABS.FEEDS);
90
      } else {
91
        setIsFollower(false);
92
      }
93
    }
94
    return setLoading(false);
95
  };
96
 
97
  const handleButtonAction = async (link) => {
98
    setLoading(true);
99
    const response = await axios.post(link);
100
    const resData = response.data;
101
    if (resData.success) {
102
      addNotification({
103
        style: "success",
104
        msg: resData.data,
105
      });
106
      fetchAuthorizedLinks();
107
    } else {
108
      setLoading(false);
109
      addNotification({
110
        style: "danger",
111
        msg: "ha ocurrido un error",
112
      });
113
    }
114
  };
115
  const changeCurrentTab = (tab) => {
116
    setCurrentTab(tab)
117
  }
1705 steven 118
 
119
  const getData = () => {
1706 steven 120
    let infoFollows = [...suggestionCompanies]
2258 stevensc 121
    if (!lookMore) {
1705 steven 122
      infoFollows = infoFollows.slice(0, 5);
123
    }
124
    return infoFollows
125
  }
1 www 126
  return (
127
    <React.Fragment>
128
      <section className="cover-sec">
129
        <img
130
          id="user-cover-img"
1105 stevensc 131
          src={`/storage/type/company-cover/code/${companyId}/${cover ? `filename/${cover}` : ""
132
            }`}
1 www 133
          alt="cover-image"
134
        />
135
      </section>
136
      <main>
137
        <div className="main-section">
1755 steven 138
          <div className="ph-5">
1 www 139
            <div className="main-section-data">
2442 stevensc 140
              <div className="main-left-sidebar">
141
                <div className="user_profile border-gray border-radius pb-5">
142
                  <div className="user-pro-img">
143
                    <img
144
                      id="company-img"
2443 stevensc 145
                      src={`/storage/type/company/code/${companyId}/${image ? `filename/${image}` : ""}`}
2442 stevensc 146
                      alt="profile-image"
147
                    />
148
                  </div>
149
                  <div className="user_pro_status">
150
                    <h1>{companyName}</h1>
151
                    <div
152
                      className="row"
2443 stevensc 153
                      style={{ marginTop: '10px' }}
2442 stevensc 154
                    >
155
                      {
2443 stevensc 156
                        facebook &&
157
                        <div className="col col-md col-sm">
158
                          <i onClick={() => window.location.href = facebook} className="cursor-pointer fa fa-facebook" style={{ fontSize: '1.4rem' }} />
159
                        </div>
2442 stevensc 160
                      }
161
                      {
2443 stevensc 162
                        twitter &&
163
                        <div className="col col-md col-sm">
164
                          <i onClick={() => window.location.href = twitter} className="cursor-pointer fa fa-twitter" style={{ fontSize: '1.4rem' }} />
165
                        </div>
2442 stevensc 166
                      }
167
                      {
2443 stevensc 168
                        instagram &&
169
                        <div className="col col-md col-sm">
170
                          <i onClick={() => window.location.href = instagram} className="fa fa-instagram cursor-pointer" style={{ fontSize: '1.4rem' }} />
171
                        </div>
2442 stevensc 172
                      }
173
                    </div>
2443 stevensc 174
                    <div className="container horizontal-list">
175
                      <div className="row ">
176
                        <div className="col">
2442 stevensc 177
                          <p style={{ fontSize: '1rem' }} className="ellipsis">
178
                            Seguidores
179
                          </p>
180
                          <b style={{ fontSize: '1rem' }} id="total-followers">{followers}</b>
181
                          <br />
1701 steven 182
                        </div>
2443 stevensc 183
                        {authorizedLinks?.link_unfollow &&
184
                          <div className="col">
2442 stevensc 185
                            <button
186
                              className="btn btn-primary"
2443 stevensc 187
                              onClick={() => handleButtonAction(authorizedLinks?.link_unfollow)}
1702 steven 188
                            >
2442 stevensc 189
                              <span className="ellipsis w-100">
190
                                Dejar de seguir
191
                              </span>
192
                            </button>
193
                          </div>
2443 stevensc 194
                        }
195
                        {authorizedLinks?.link_follow &&
196
                          <div className="col" >
2442 stevensc 197
                            <button
198
                              className="btn btn-primary"
2443 stevensc 199
                              onClick={() => handleButtonAction(authorizedLinks?.link_follow)}
2442 stevensc 200
                            >
201
                              <span className="ellipsis">
202
                                Seguir
203
                              </span>
204
                            </button>
205
                          </div>
2443 stevensc 206
                        }
207
                        {authorizedLinks?.link_request &&
208
                          <div className="col">
2442 stevensc 209
                            <button
210
                              className="btn btn-primary"
2443 stevensc 211
                              onClick={() => handleButtonAction(authorizedLinks?.link_request)}
2442 stevensc 212
                            >
213
                              <span className="ellipsis">
214
                                Trabaja en esta empresa?
215
                              </span>
216
                            </button>
217
                          </div>
2443 stevensc 218
                        }
219
                        {authorizedLinks?.link_accept &&
220
                          <div className="col">
2442 stevensc 221
                            <button
222
                              className="btn btn-primary"
2443 stevensc 223
                              onClick={() => handleButtonAction(authorizedLinks?.link_accept)}
2442 stevensc 224
                            >
225
                              <span className="ellipsis">
226
                                Aceptar
227
                              </span>
228
                            </button>
229
                          </div>
2443 stevensc 230
                        }
231
                        {authorizedLinks?.link_cancel &&
232
                          <div className="col">
2442 stevensc 233
                            <button
234
                              title=""
235
                              className="btn btn-primary"
2443 stevensc 236
                              onClick={() => handleButtonAction(authorizedLinks?.link_cancel)}
2442 stevensc 237
                            >
238
                              <span className="ellipsis">
239
                                Cancelar
240
                              </span>
241
                            </button>
242
                          </div>
2443 stevensc 243
                        }
244
                        {authorizedLinks?.link_reject &&
245
                          <div className="col">
2442 stevensc 246
                            <button
247
                              title=""
248
                              className="btn btn-primary"
2443 stevensc 249
                              onClick={() => handleButtonAction(authorizedLinks?.link_reject)}
2442 stevensc 250
                            >
251
                              <span className="ellipsis">
252
                                Rechazar
253
                              </span>
254
                            </button>
255
                          </div>
2443 stevensc 256
                        }
257
                        {authorizedLinks?.link_leave &&
258
                          <div className="col">
2442 stevensc 259
                            <button
260
                              data-link="{{>link_leave}}"
261
                              title=""
262
                              className="btn btn-primary"
2443 stevensc 263
                              onClick={() => handleButtonAction(authorizedLinks?.link_leave)}
2442 stevensc 264
                            >
265
                              <span className="ellipsis">
266
                                Abandonar esta empresa
267
                              </span>
268
                            </button>
1702 steven 269
                          </div>
2443 stevensc 270
                        }
271
                        {authorizedLinks?.link_contact &&
2442 stevensc 272
                          <div className="col">
273
                            <a
274
                              href={authorizedLinks?.link_contact}
275
                              className="btn btn-primary"
276
                            >
277
                              <span className="ellipsis">
278
                                Mensaje
279
                              </span>
280
                            </a>
281
                          </div>
2443 stevensc 282
                        }
1 www 283
                      </div>
284
                    </div>
285
                  </div>
286
                </div>
2442 stevensc 287
                <CompanyFollowersHelper companyId={companyId} />
288
              </div>
289
              <div className="main-ws-sec">
290
                <div className="user-tab-sec rewivew">
291
                  {
292
                    !initialLoading
293
                    &&
294
                    <div
295
                      className="row"
296
                    >
1108 stevensc 297
                      {
2442 stevensc 298
                        isFollower
1108 stevensc 299
                        &&
1 www 300
                        <div
2442 stevensc 301
                          className="col text-left pl-0"
1 www 302
                        >
2442 stevensc 303
                          <button
304
                            className="btn btn-link p-0 text-decoration-none"
305
                            onClick={() => changeCurrentTab(TABS.FEEDS)}
1 www 306
                          >
2442 stevensc 307
                            <span className="p-2 default-link font-weight-bold text-dark">Ver Publicaciones</span>
308
                          </button>
1 www 309
                        </div>
1108 stevensc 310
                      }
2442 stevensc 311
                      <div
312
                        className="col text-right pl-0"
313
                      >
314
                        <button
315
                          className="btn btn-link p-0 text-decoration-none"
316
                          onClick={() => changeCurrentTab(TABS.INFO)}
317
                        >
318
                          <span className="p-2 default-link font-weight-bold text-dark">Ver Información</span>
319
                        </button>
320
                      </div>
1 www 321
                    </div>
2442 stevensc 322
                  }
323
                  {/* <!-- tab-feed end--> */}
324
                </div>
325
                {
326
                  currentTab === TABS.FEEDS
327
                  &&
328
                  <div
329
                    className="product-feed-tab animated fadeIn"
330
                    id="feed-dd feed"
331
                    style={{ display: 'block' }}
332
                  >
333
                    <div className="posts-section">
334
                      <FeedSection routeTimeline={timeline} />
335
                    </div>
336
                  </div>
337
                }
338
                {
339
                  currentTab === TABS.INFO
340
                  &&
341
                  < div
342
                    className="product-feed-tab animated fadeIn"
343
                    id="feed-dd info"
344
                    style={{ display: 'block' }}
345
                  >
1109 stevensc 346
                    {
2442 stevensc 347
                      overview
1105 stevensc 348
                      &&
2442 stevensc 349
                      <div className="user-profile-extended-ov">
350
                        <h3>Visión general</h3>
351
                        <span>{parse(overview)}</span>
1109 stevensc 352
                      </div>
353
                    }
354
                    {
2442 stevensc 355
                      locations
1109 stevensc 356
                      &&
2442 stevensc 357
                      <div className="user-profile-extended-ov st2">
358
                        <h3>Ubicación</h3>
359
                        <span>
360
                          {locations.map(
361
                            ({ formatted_address, is_main }, index) => (
362
                              <React.Fragment key={index}>
363
                                {index >= 0 ? <hr /> : ""}
364
                                <p>
365
                                  {`${formatted_address} ${is_main === "y" ? "(Principal)" : ""
366
                                    }`}
367
                                </p>
368
                              </React.Fragment>
369
                            )
370
                          )}
371
                        </span>
1109 stevensc 372
                      </div>
1105 stevensc 373
                    }
1110 stevensc 374
                    {
2442 stevensc 375
                      industry
1110 stevensc 376
                      &&
2442 stevensc 377
                      <div className="user-profile-ov">
378
                        <h3>Industria</h3>
379
                        <span>{industry}</span>
1 www 380
                      </div>
1110 stevensc 381
                    }
2442 stevensc 382
                    {
383
                      companySize
384
                      &&
385
                      <div className="user-profile-ov">
386
                        <h3>Tamaño de la empresa</h3>
387
                        <span>{companySize}</span>
1701 steven 388
                      </div>
2442 stevensc 389
                    }
390
                    {
391
                      foundationYear
392
                      &&
393
                      <div className="user-profile-ov">
394
                        <h3>Año de fundación</h3>
395
                        <span>{foundationYear}</span>
1105 stevensc 396
                      </div>
2442 stevensc 397
                    }
398
                    {
399
                      website
400
                      &&
401
                      <div className="user-profile-ov">
402
                        <h3>Página web</h3>
403
                        <span>{website}</span>
404
                      </div>
405
                    }
406
                  </div>
407
                }
408
                {
409
                  initialLoading
410
                  &&
411
                  <div
412
                    style={{
413
                      display: "flex",
414
                      justifyContent: "center",
415
                      alignItems: "center",
416
                    }}
417
                  >
418
                    <Spinner />
419
                  </div>
420
                }
421
              </div>
2443 stevensc 422
              <div className="right-sidebar" style={{ maxHeight: '450px' }}>
423
                {loading &&
2442 stevensc 424
                  <div className="spinner-container">
425
                    <Spinner />
426
                  </div>
2443 stevensc 427
                }
2442 stevensc 428
                <div
429
                  className="widget suggestions full-width d-none d-md-block d-lg-block border-gray border-radius"
2443 stevensc 430
                  style={{ height: "auto", overflowY: "auto" }}
2442 stevensc 431
                >
432
                  <div className="sd-title">
433
                    <h3>Empresas similares</h3>
434
                  </div>
2443 stevensc 435
                  <div className="mb-2" id="suggestions-similar-groups" style={{ height: '80%', overflowY: 'auto' }}>
436
                    {suggestionCompanies.length
437
                      ? getData().map(element => {
438
                        return (
439
                          <div className="suggestion-usd d-flex justify-content-start align-items-center " key={element.id}>
440
                            <img
441
                              style={{ width: "10%", height: "auto" }}
442
                              src={element.image}
443
                              alt=""
444
                            />
445
                            <div
446
                              className="sgt-text"
447
                            >
448
                              <a href={element.profile} target="_blank">
449
                                <h4 className="text-dark">{element.name}</h4>
450
                              </a>
451
                            </div>
1771 steven 452
                          </div>
2443 stevensc 453
                        )
454
                      })
455
                      : <div className="view-more">Sin empresas similares</div>
456
                    }
457
                  </div>
2442 stevensc 458
                  {
2443 stevensc 459
                    suggestionCompanies.length >= 5
460
                    &&
461
                    <div className="w-100 text-center">
462
                      <button className="btn btn-primary" onClick={() => setLookMore(!lookMore)}>
463
                        {lookMore ? 'Ver menos' : 'Ver mas'}
464
                      </button>
465
                    </div>
2442 stevensc 466
                  }
1 www 467
                </div>
468
              </div>
469
            </div>
470
          </div>
471
        </div>
2442 stevensc 472
      </main >
1105 stevensc 473
    </React.Fragment >
1 www 474
  );
475
};
476
 
477
// const mapStateToProps = (state) => ({
478
 
479
// })
480
 
481
const mapDispatchToProps = {
482
  addNotification: (notification) => addNotification(notification),
483
  setTimelineUrl: (url) => setTimelineUrl(url),
484
};
485
 
486
export default connect(null, mapDispatchToProps)(View);