Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
5413 stevensc 1
/* eslint-disable camelcase */
3552 stevensc 2
/* eslint-disable react/prop-types */
5411 stevensc 3
import React, { useEffect, useRef, useState } from 'react'
5414 stevensc 4
import parse from 'html-react-parser'
5
import { axios } from '../../../utils'
5406 stevensc 6
import { connect } from 'react-redux'
5414 stevensc 7
import { setIntlLabels } from '../../../redux/intl/intl.action'
8
import { setTimelineUrl } from '../../../redux/feed/feed.actions'
5406 stevensc 9
import { addNotification } from '../../../redux/notification/notification.actions'
10
import Spinner from '../../../shared/loading-spinner/Spinner'
11
import FeedSection from '../../../dashboard/components/feed-section/FeedSection'
5411 stevensc 12
import SuggestWidget from '../../../shared/helpers/my-groups-helper/SuggestWidget'
5414 stevensc 13
import CompanyFollowersHelper from '../../../shared/helpers/company-followers-helper/CompanyFollowers'
1 www 14
 
15
const TABS = {
5406 stevensc 16
  FEEDS: 'FEEDS',
17
  INFO: 'INFO'
18
}
1 www 19
 
5414 stevensc 20
const View = ({
21
  backendVars,
22
  addNotification,
23
  setTimelineUrl,
24
  setIntlLabels,
25
  labels
26
}) => {
1 www 27
  const {
28
    companyId,
29
    cover,
30
    image,
31
    totalFollowers,
32
    facebook,
33
    twitter,
34
    instagram,
35
    companyName,
36
    overview,
37
    locations,
38
    industry,
39
    companySize,
40
    foundationYear,
41
    website,
5406 stevensc 42
    timeline
5414 stevensc 43
  } = backendVars
1 www 44
 
5406 stevensc 45
  const [authorizedLinks, setAuthorizedLinks] = useState(null)
46
  const [followers, setFollowers] = useState(totalFollowers)
47
  const [initialLoading, setInitialLoading] = useState(true)
48
  const [isFollower, setIsFollower] = useState(false)
49
  const [currentTab, setCurrentTab] = useState(TABS.INFO)
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)
5414 stevensc 57
    setIntlLabels(labels)
5406 stevensc 58
  }, [])
1108 stevensc 59
 
1107 stevensc 60
  useEffect(() => {
61
    isFollower
1108 stevensc 62
      ? setCurrentTab(TABS.FEEDS)
63
      : setCurrentTab(TABS.INFO)
5406 stevensc 64
  }, [isFollower])
1107 stevensc 65
 
1 www 66
  const fetchAuthorizedLinks = async () => {
5406 stevensc 67
    const response = await axios.get(`/company/view/${companyId}`)
5413 stevensc 68
    const resData = response.data
1 www 69
    if (resData.success) {
5406 stevensc 70
      setAuthorizedLinks(resData.data)
71
      setFollowers(resData.data.total_followers)
1 www 72
      if (resData.data.link_unfollow) {
5406 stevensc 73
        setIsFollower(true)
74
        if (shouldSetInitialTab.current) setCurrentTab(TABS.FEEDS)
1 www 75
      } else {
5406 stevensc 76
        setIsFollower(false)
1 www 77
      }
78
    }
5406 stevensc 79
  }
1 www 80
 
81
  const handleButtonAction = async (link) => {
5406 stevensc 82
    const response = await axios.post(link)
83
    const resData = response.data
1 www 84
    if (resData.success) {
85
      addNotification({
5406 stevensc 86
        style: 'success',
87
        msg: resData.data
88
      })
89
      fetchAuthorizedLinks()
1 www 90
    } else {
91
      addNotification({
5406 stevensc 92
        style: 'danger',
93
        msg: 'ha ocurrido un error'
94
      })
1 www 95
    }
5406 stevensc 96
  }
1705 steven 97
 
5411 stevensc 98
  const changeCurrentTab = (tab) => setCurrentTab(tab)
99
 
1 www 100
  return (
3930 stevensc 101
    <>
1 www 102
      <section className="cover-sec">
103
        <img
104
          id="user-cover-img"
5406 stevensc 105
          src={`/storage/type/company-cover/code/${companyId}/${cover ? `filename/${cover}` : ''
1105 stevensc 106
            }`}
1 www 107
          alt="cover-image"
108
        />
109
      </section>
5411 stevensc 110
      <main className="main-section-data container px-0 mt-3">
111
        <div className="main-left-sidebar">
112
          <div className="user_profile">
113
            <div className="user-pro-img">
114
              <img
115
                src={`/storage/type/company/code/${companyId}/${image ? `filename/${image}` : ''}`}
116
                alt="profile-image"
117
              />
118
            </div>
119
            <div className="user_pro_status horizontal-list">
120
              <h1>{companyName}</h1>
121
              <div className="row px-5" style={{ marginTop: '10px' }}>
122
                {facebook &&
123
                  <i
124
                    onClick={() => window.location.href = facebook}
125
                    className="cursor-pointer fa fa-facebook"
126
                    style={{ fontSize: '1.4rem' }}
127
                  />
128
                }
129
                {twitter &&
130
                  <i
131
                    onClick={() => window.location.href = twitter}
132
                    className="cursor-pointer fa fa-twitter"
133
                    style={{ fontSize: '1.4rem' }}
134
                  />
135
                }
136
                {instagram &&
137
                  <i
138
                    onClick={() => window.location.href = instagram}
139
                    className="fa fa-instagram cursor-pointer"
140
                    style={{ fontSize: '1.4rem' }}
141
                  />
142
                }
3930 stevensc 143
              </div>
5411 stevensc 144
              <div className="container horizontal-list">
145
                <div className="row ">
146
                  <div className="members_count">
147
                    <b style={{ fontSize: '1rem' }} id="total-followers">{followers}</b>
148
                    <p style={{ fontSize: '1rem' }} className="ellipsis">Seguidores</p>
149
                  </div>
150
                  {authorizedLinks?.link_unfollow &&
151
                    <button
152
                      className="btn btn-secondary"
153
                      onClick={() => handleButtonAction(authorizedLinks?.link_unfollow)}
154
                    >
155
                      Dejar de seguir
156
                    </button>
3930 stevensc 157
                  }
5411 stevensc 158
                  {authorizedLinks?.link_follow &&
159
                    <button
160
                      className="btn btn-secondary"
161
                      onClick={() => handleButtonAction(authorizedLinks?.link_follow)}
162
                    >
163
                      Seguir
164
                    </button>
3930 stevensc 165
                  }
5411 stevensc 166
                  {
167
                    (authorizedLinks?.link_request && authorizedLinks?.link_unfollow) &&
168
                    <button
169
                      className="btn btn-tertiary"
170
                      onClick={() => handleButtonAction(authorizedLinks?.link_request)}
171
                    >
172
                      ¿Trabaja en esta empresa?
173
                    </button>
3930 stevensc 174
                  }
5411 stevensc 175
                  {authorizedLinks?.link_accept &&
176
                    <button
177
                      className="btn btn-tertiary"
178
                      onClick={() => handleButtonAction(authorizedLinks?.link_accept)}
179
                    >
180
                      Aceptar
181
                    </button>
182
                  }
183
                  {authorizedLinks?.link_cancel &&
184
                    <button
185
                      title=""
186
                      className="btn btn-tertiary"
187
                      onClick={() => handleButtonAction(authorizedLinks?.link_cancel)}
188
                    >
189
                      Cancelar
190
                    </button>
191
                  }
192
                  {authorizedLinks?.link_reject &&
193
                    <button
194
                      title=""
195
                      className="btn btn-tertiary"
196
                      onClick={() => handleButtonAction(authorizedLinks?.link_reject)}
197
                    >
198
                      Rechazar
199
                    </button>
200
                  }
201
                  {authorizedLinks?.link_leave &&
202
                    <button
203
                      data-link="{{>link_leave}}"
204
                      title=""
205
                      className="btn btn-tertiary"
206
                      onClick={() => handleButtonAction(authorizedLinks?.link_leave)}
207
                    >
208
                      Abandonar esta empresa
209
                    </button>
210
                  }
211
                  {authorizedLinks?.link_contact &&
212
                    <a
213
                      href={authorizedLinks?.link_contact}
214
                      className="btn btn-primary"
215
                    >
216
                      Mensaje
217
                    </a>
218
                  }
3929 stevensc 219
                </div>
220
              </div>
221
            </div>
3930 stevensc 222
          </div>
5411 stevensc 223
          <div className="d-none d-md-block">
224
            <CompanyFollowersHelper companyId={companyId} />
225
          </div>
226
        </div>
227
        <div className="main-ws-sec">
228
          <div className="user-tab-sec rewivew">
229
            {!initialLoading &&
230
              <div className="row">
231
                {isFollower &&
232
                  <div className="col text-left pl-0">
3930 stevensc 233
                    <button
234
                      className="btn btn-link p-0 text-decoration-none"
5411 stevensc 235
                      onClick={() => changeCurrentTab(TABS.FEEDS)}
3930 stevensc 236
                      style={{ padding: '0 !important' }}
237
                    >
5411 stevensc 238
                      <span className="p-0 default-link font-weight-bold text-dark">Ver Publicaciones</span>
3930 stevensc 239
                    </button>
2442 stevensc 240
                  </div>
5411 stevensc 241
                }
242
                <div className="col text-right pr-0">
243
                  <button
244
                    className="btn btn-link p-0 text-decoration-none"
245
                    onClick={() => changeCurrentTab(TABS.INFO)}
246
                    style={{ padding: '0 !important' }}
247
                  >
248
                    <span className="p-0 default-link font-weight-bold text-dark">Ver Información</span>
249
                  </button>
3929 stevensc 250
                </div>
3930 stevensc 251
              </div>
252
            }
253
          </div>
5411 stevensc 254
          {
255
            currentTab === TABS.FEEDS &&
256
            <div
257
              className="product-feed-tab animated fadeIn"
258
              id="feed-dd feed"
259
              style={{ display: 'block' }}
260
            >
261
              <div className="posts-section">
262
                <FeedSection
263
                  routeTimeline={timeline}
264
                  image={`/storage/type/company/code/${companyId}/${image ? `filename/${image}` : ''}`}
265
                />
3930 stevensc 266
              </div>
1 www 267
            </div>
5411 stevensc 268
          }
269
          {
270
            currentTab === TABS.INFO &&
271
            < div
272
              className="product-feed-tab animated fadeIn"
273
              id="feed-dd info"
274
              style={{ display: 'block' }}
275
            >
276
              {
277
                overview &&
278
                <div className="user-profile-extended-ov">
279
                  <h3>Visión general</h3>
280
                  <span>{parse(overview)}</span>
281
                </div>
282
              }
283
              {
284
                locations &&
285
                <div className="user-profile-extended-ov st2">
286
                  <h3>Ubicación</h3>
287
                  <span>
288
                    {locations.map(
289
                      ({ formatted_address, is_main }, index) => (
290
                        <React.Fragment key={index}>
291
                          {index >= 0 ? <hr /> : ''}
292
                          <p>
293
                            {`${formatted_address} ${is_main === 'y' ? '(Principal)' : ''
294
                              }`}
295
                          </p>
296
                        </React.Fragment>
297
                      )
298
                    )}
299
                  </span>
300
                </div>
301
              }
302
              {
303
                industry &&
304
                <div className="user-profile-ov">
305
                  <h3>Industria</h3>
306
                  <span>{industry}</span>
307
                </div>
308
              }
309
              {
310
                companySize &&
311
                <div className="user-profile-ov">
312
                  <h3>Tamaño de la empresa</h3>
313
                  <span>{companySize}</span>
314
                </div>
315
              }
316
              {
317
                foundationYear &&
318
                <div className="user-profile-ov">
319
                  <h3>Año de fundación</h3>
320
                  <span>{foundationYear}</span>
321
                </div>
322
              }
323
              {
324
                website &&
325
                <div className="user-profile-ov">
326
                  <h3>Página web</h3>
327
                  <span>{website}</span>
328
                </div>
329
              }
330
            </div>
331
          }
332
          {
333
            initialLoading &&
334
            <div
335
              style={{
336
                display: 'flex',
337
                justifyContent: 'center',
338
                alignItems: 'center'
339
              }}
340
            >
341
              <Spinner />
342
            </div>
343
          }
1 www 344
        </div>
5411 stevensc 345
        <div className="right-sidebar">
346
          <SuggestWidget title='Empresas similares:' url={`/helpers/company-suggestion/${companyId}`} />
347
        </div>
348
      </main>
3930 stevensc 349
    </>
5406 stevensc 350
  )
351
}
1 www 352
 
353
const mapDispatchToProps = {
354
  addNotification: (notification) => addNotification(notification),
5414 stevensc 355
  setTimelineUrl: (url) => setTimelineUrl(url),
356
  setIntlLabels: (labels) => setIntlLabels(labels)
5406 stevensc 357
}
1 www 358
 
5406 stevensc 359
export default connect(null, mapDispatchToProps)(View)