Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
3552 stevensc 1
/* eslint-disable react/prop-types */
1 www 2
import React, { useEffect, useRef } from "react";
3
import { useState } from "react";
4
import { connect } from "react-redux";
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) {
2943 stevensc 122
      infoFollows = infoFollows.slice(0, 3);
1705 steven 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>
2495 stevensc 149
                  <div className="user_pro_status horizontal-list">
2442 stevensc 150
                    <h1>{companyName}</h1>
2496 stevensc 151
                    <div className="row px-5" style={{ marginTop: '10px' }}>
2442 stevensc 152
                      {
2443 stevensc 153
                        facebook &&
2495 stevensc 154
                        <i
155
                          onClick={() => window.location.href = facebook}
156
                          className="cursor-pointer fa fa-facebook"
157
                          style={{ fontSize: '1.4rem' }}
158
                        />
2442 stevensc 159
                      }
160
                      {
2443 stevensc 161
                        twitter &&
2495 stevensc 162
                        <i
163
                          onClick={() => window.location.href = twitter}
164
                          className="cursor-pointer fa fa-twitter"
165
                          style={{ fontSize: '1.4rem' }}
166
                        />
2442 stevensc 167
                      }
168
                      {
2443 stevensc 169
                        instagram &&
2495 stevensc 170
                        <i
171
                          onClick={() => window.location.href = instagram}
172
                          className="fa fa-instagram cursor-pointer"
173
                          style={{ fontSize: '1.4rem' }}
174
                        />
2442 stevensc 175
                      }
176
                    </div>
2443 stevensc 177
                    <div className="container horizontal-list">
178
                      <div className="row ">
2495 stevensc 179
                        <div className="members_count">
2442 stevensc 180
                          <b style={{ fontSize: '1rem' }} id="total-followers">{followers}</b>
2495 stevensc 181
                          <p style={{ fontSize: '1rem' }} className="ellipsis">Seguidores</p>
1701 steven 182
                        </div>
2443 stevensc 183
                        {authorizedLinks?.link_unfollow &&
2495 stevensc 184
                          <button
2945 stevensc 185
                            className="btn btn-secondary"
2495 stevensc 186
                            onClick={() => handleButtonAction(authorizedLinks?.link_unfollow)}
187
                          >
188
                            <span className="ellipsis w-100">
189
                              Dejar de seguir
190
                            </span>
191
                          </button>
2443 stevensc 192
                        }
193
                        {authorizedLinks?.link_follow &&
2495 stevensc 194
                          <button
2945 stevensc 195
                            className="btn btn-secondary"
2495 stevensc 196
                            onClick={() => handleButtonAction(authorizedLinks?.link_follow)}
197
                          >
198
                            <span className="ellipsis">
199
                              Seguir
200
                            </span>
201
                          </button>
2443 stevensc 202
                        }
2734 stevensc 203
                        {
204
                          (authorizedLinks?.link_request && authorizedLinks?.link_unfollow)
205
                          &&
2495 stevensc 206
                          <button
2945 stevensc 207
                            className="btn btn-tertiary"
2495 stevensc 208
                            onClick={() => handleButtonAction(authorizedLinks?.link_request)}
209
                          >
210
                            <span className="ellipsis">
211
                              Trabaja en esta empresa?
212
                            </span>
213
                          </button>
2443 stevensc 214
                        }
215
                        {authorizedLinks?.link_accept &&
2495 stevensc 216
                          <button
2945 stevensc 217
                            className="btn btn-tertiary"
2495 stevensc 218
                            onClick={() => handleButtonAction(authorizedLinks?.link_accept)}
219
                          >
220
                            <span className="ellipsis">
221
                              Aceptar
222
                            </span>
223
                          </button>
2443 stevensc 224
                        }
225
                        {authorizedLinks?.link_cancel &&
2495 stevensc 226
                          <button
227
                            title=""
2945 stevensc 228
                            className="btn btn-tertiary"
2495 stevensc 229
                            onClick={() => handleButtonAction(authorizedLinks?.link_cancel)}
230
                          >
231
                            <span className="ellipsis">
232
                              Cancelar
233
                            </span>
234
                          </button>
2443 stevensc 235
                        }
236
                        {authorizedLinks?.link_reject &&
2495 stevensc 237
                          <button
238
                            title=""
2945 stevensc 239
                            className="btn btn-tertiary"
2495 stevensc 240
                            onClick={() => handleButtonAction(authorizedLinks?.link_reject)}
241
                          >
242
                            <span className="ellipsis">
243
                              Rechazar
244
                            </span>
245
                          </button>
2443 stevensc 246
                        }
247
                        {authorizedLinks?.link_leave &&
2495 stevensc 248
                          <button
249
                            data-link="{{>link_leave}}"
250
                            title=""
2945 stevensc 251
                            className="btn btn-tertiary"
2495 stevensc 252
                            onClick={() => handleButtonAction(authorizedLinks?.link_leave)}
253
                          >
254
                            <span className="ellipsis">
255
                              Abandonar esta empresa
256
                            </span>
257
                          </button>
2443 stevensc 258
                        }
259
                        {authorizedLinks?.link_contact &&
2495 stevensc 260
                          <a
261
                            href={authorizedLinks?.link_contact}
262
                            className="btn btn-primary"
263
                          >
264
                            <span className="ellipsis">
265
                              Mensaje
266
                            </span>
267
                          </a>
2443 stevensc 268
                        }
1 www 269
                      </div>
270
                    </div>
271
                  </div>
272
                </div>
2442 stevensc 273
                <CompanyFollowersHelper companyId={companyId} />
274
              </div>
275
              <div className="main-ws-sec">
276
                <div className="user-tab-sec rewivew">
277
                  {
278
                    !initialLoading
279
                    &&
280
                    <div
281
                      className="row"
282
                    >
1108 stevensc 283
                      {
2442 stevensc 284
                        isFollower
1108 stevensc 285
                        &&
1 www 286
                        <div
2442 stevensc 287
                          className="col text-left pl-0"
1 www 288
                        >
2442 stevensc 289
                          <button
290
                            className="btn btn-link p-0 text-decoration-none"
291
                            onClick={() => changeCurrentTab(TABS.FEEDS)}
2574 stevensc 292
                            style={{ padding: '0 !important' }}
1 www 293
                          >
2573 stevensc 294
                            <span className="p-0 default-link font-weight-bold text-dark">Ver Publicaciones</span>
2442 stevensc 295
                          </button>
1 www 296
                        </div>
1108 stevensc 297
                      }
2442 stevensc 298
                      <div
299
                        className="col text-right pl-0"
300
                      >
301
                        <button
302
                          className="btn btn-link p-0 text-decoration-none"
303
                          onClick={() => changeCurrentTab(TABS.INFO)}
2574 stevensc 304
                          style={{ padding: '0 !important' }}
2442 stevensc 305
                        >
2573 stevensc 306
                          <span className="p-0 default-link font-weight-bold text-dark">Ver Información</span>
2442 stevensc 307
                        </button>
308
                      </div>
1 www 309
                    </div>
2442 stevensc 310
                  }
311
                  {/* <!-- tab-feed end--> */}
312
                </div>
313
                {
314
                  currentTab === TABS.FEEDS
315
                  &&
316
                  <div
317
                    className="product-feed-tab animated fadeIn"
318
                    id="feed-dd feed"
319
                    style={{ display: 'block' }}
320
                  >
321
                    <div className="posts-section">
2894 stevensc 322
                      <FeedSection
323
                        routeTimeline={timeline}
2895 stevensc 324
                        image={`/storage/type/company/code/${companyId}/${image ? `filename/${image}` : ""}`}
2894 stevensc 325
                      />
2442 stevensc 326
                    </div>
327
                  </div>
328
                }
329
                {
330
                  currentTab === TABS.INFO
331
                  &&
332
                  < div
333
                    className="product-feed-tab animated fadeIn"
334
                    id="feed-dd info"
335
                    style={{ display: 'block' }}
336
                  >
1109 stevensc 337
                    {
2442 stevensc 338
                      overview
1105 stevensc 339
                      &&
2442 stevensc 340
                      <div className="user-profile-extended-ov">
341
                        <h3>Visión general</h3>
342
                        <span>{parse(overview)}</span>
1109 stevensc 343
                      </div>
344
                    }
345
                    {
2442 stevensc 346
                      locations
1109 stevensc 347
                      &&
2442 stevensc 348
                      <div className="user-profile-extended-ov st2">
349
                        <h3>Ubicación</h3>
350
                        <span>
351
                          {locations.map(
352
                            ({ formatted_address, is_main }, index) => (
353
                              <React.Fragment key={index}>
354
                                {index >= 0 ? <hr /> : ""}
355
                                <p>
356
                                  {`${formatted_address} ${is_main === "y" ? "(Principal)" : ""
357
                                    }`}
358
                                </p>
359
                              </React.Fragment>
360
                            )
361
                          )}
362
                        </span>
1109 stevensc 363
                      </div>
1105 stevensc 364
                    }
1110 stevensc 365
                    {
2442 stevensc 366
                      industry
1110 stevensc 367
                      &&
2442 stevensc 368
                      <div className="user-profile-ov">
369
                        <h3>Industria</h3>
370
                        <span>{industry}</span>
1 www 371
                      </div>
1110 stevensc 372
                    }
2442 stevensc 373
                    {
374
                      companySize
375
                      &&
376
                      <div className="user-profile-ov">
377
                        <h3>Tamaño de la empresa</h3>
378
                        <span>{companySize}</span>
1701 steven 379
                      </div>
2442 stevensc 380
                    }
381
                    {
382
                      foundationYear
383
                      &&
384
                      <div className="user-profile-ov">
385
                        <h3>Año de fundación</h3>
386
                        <span>{foundationYear}</span>
1105 stevensc 387
                      </div>
2442 stevensc 388
                    }
389
                    {
390
                      website
391
                      &&
392
                      <div className="user-profile-ov">
393
                        <h3>Página web</h3>
394
                        <span>{website}</span>
395
                      </div>
396
                    }
397
                  </div>
398
                }
399
                {
400
                  initialLoading
401
                  &&
402
                  <div
403
                    style={{
404
                      display: "flex",
405
                      justifyContent: "center",
406
                      alignItems: "center",
407
                    }}
408
                  >
409
                    <Spinner />
410
                  </div>
411
                }
412
              </div>
2443 stevensc 413
              <div className="right-sidebar" style={{ maxHeight: '450px' }}>
414
                {loading &&
2442 stevensc 415
                  <div className="spinner-container">
416
                    <Spinner />
417
                  </div>
2443 stevensc 418
                }
2940 stevensc 419
                <div className="widget suggestions d-none d-md-block d-lg-block">
420
                  <div className="sd-title d-flex align-items-center justify-content-between">
421
                    <h3>Empresas similares:</h3>
422
                    {
423
                      suggestionCompanies.length >= 5
424
                      &&
425
                      <a href="#" onClick={(e) => {
426
                        e.preventDefault()
427
                        setLookMore(!lookMore)
428
                      }}>
429
                        {lookMore ? 'Ver menos' : 'Ver mas'}
430
                      </a>
431
                    }
2442 stevensc 432
                  </div>
2443 stevensc 433
                  <div className="mb-2" id="suggestions-similar-groups" style={{ height: '80%', overflowY: 'auto' }}>
434
                    {suggestionCompanies.length
435
                      ? getData().map(element => {
436
                        return (
3552 stevensc 437
                          <div className='user' key={element.id}>
2940 stevensc 438
                            <div className="w-100 d-flex align-items-center" style={{ gap: '.5rem' }}>
3506 stevensc 439
                              <a href={element.profile} target="_blank" rel="noreferrer">
2940 stevensc 440
                                <img src={element.image} alt={`${element.name} profile image`} />
2443 stevensc 441
                              </a>
2940 stevensc 442
                              <h4>{element.name}</h4>
2443 stevensc 443
                            </div>
2940 stevensc 444
                            <div className="w-100 d-flex align-items-center justify-content-start" style={{ gap: '.5rem' }}>
2942 stevensc 445
                              <a
446
                                className="btn btn-primary"
447
                                href={element.profile}
448
                                target='_blank'
449
                                rel="noreferrer"
450
                                style={{ fontSize: '.9rem', borderRadius: '4px' }}
451
                              >
452
                                MÁS INF
453
                              </a>
2940 stevensc 454
                            </div>
1771 steven 455
                          </div>
2443 stevensc 456
                        )
457
                      })
458
                      : <div className="view-more">Sin empresas similares</div>
459
                    }
460
                  </div>
1 www 461
                </div>
462
              </div>
463
            </div>
464
          </div>
465
        </div>
2442 stevensc 466
      </main >
1105 stevensc 467
    </React.Fragment >
1 www 468
  );
469
};
470
 
471
// const mapStateToProps = (state) => ({
472
 
473
// })
474
 
475
const mapDispatchToProps = {
476
  addNotification: (notification) => addNotification(notification),
477
  setTimelineUrl: (url) => setTimelineUrl(url),
478
};
479
 
480
export default connect(null, mapDispatchToProps)(View);