Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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