Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 5449 | Rev 5580 | Ir a la última revisión | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 5449 Rev 5579
Línea 2... Línea 2...
2
/* eslint-disable react/prop-types */
2
/* eslint-disable react/prop-types */
3
import React, { useEffect, useState, useRef } from 'react'
3
import React, { useEffect, useState, useRef } from 'react'
4
import parse from 'html-react-parser'
4
import parse from 'html-react-parser'
5
import { useDispatch, useSelector } from 'react-redux'
5
import { useDispatch, useSelector } from 'react-redux'
6
import { axios } from '../../../utils'
6
import { axios } from '../../../utils'
-
 
7
import {
-
 
8
  EmailIcon,
-
 
9
  EmailShareButton,
-
 
10
  FacebookIcon,
-
 
11
  FacebookShareButton,
-
 
12
  RedditIcon,
7
import { EmailIcon, EmailShareButton, FacebookIcon, FacebookShareButton, RedditIcon, RedditShareButton, TelegramIcon, TelegramShareButton, TwitterIcon, TwitterShareButton, WhatsappIcon, WhatsappShareButton } from 'react-share'
-
 
-
 
13
  RedditShareButton,
-
 
14
  TelegramIcon,
-
 
15
  TelegramShareButton,
-
 
16
  TwitterIcon,
-
 
17
  TwitterShareButton,
-
 
18
  WhatsappIcon,
-
 
19
  WhatsappShareButton,
-
 
20
} from 'react-share'
Línea 8... Línea 21...
8
 
21
 
9
// Redux types
22
// Redux types
10
import { shareModalTypes } from '../../../redux/share-modal/shareModal.types'
23
import { shareModalTypes } from '../../../redux/share-modal/shareModal.types'
Línea 37... Línea 50...
37
    feed_highlighted,
50
    feed_highlighted,
38
    feed_share_url,
51
    feed_share_url,
39
    feed_delete_url,
52
    feed_delete_url,
40
    comments,
53
    comments,
41
    comment_add_url,
54
    comment_add_url,
42
    feed_share_external_url
55
    feed_share_external_url,
43
  } = feed
56
  } = feed
Línea 44... Línea 57...
44
 
57
 
Línea 45... Línea 58...
45
  const dispatch = useDispatch()
58
  const dispatch = useDispatch()
Línea 58... Línea 71...
58
 
71
 
Línea 59... Línea 72...
59
  useEffect(() => setSharedState(owner_shared), [owner_shared])
72
  useEffect(() => setSharedState(owner_shared), [owner_shared])
60
 
73
 
-
 
74
  useEffect(() => {
-
 
75
    const handleClickOutside = (event) => {
61
  useEffect(() => {
76
      if (
-
 
77
        shareContainer.current &&
62
    const handleClickOutside = (event) => {
78
        !shareContainer.current.contains(event.target)
63
      if (shareContainer.current && !shareContainer.current.contains(event.target)) {
79
      ) {
64
        setShareOptions(false)
80
        setShareOptions(false)
65
      }
81
      }
Línea 71... Línea 87...
71
    }
87
    }
72
  }, [shareContainer])
88
  }, [shareContainer])
Línea 73... Línea 89...
73
 
89
 
74
  const getShareUrl = new Promise((resolve, reject) => {
90
  const getShareUrl = new Promise((resolve, reject) => {
-
 
91
    if (shareOptions) {
75
    if (shareOptions) {
92
      axios
76
      axios.get(feed_share_external_url)
93
        .get(feed_share_external_url)
77
        .then(({ data }) => {
94
        .then(({ data }) => {
78
          if (!data.success) {
95
          if (!data.success) {
79
            dispatch(addNotification({ style: 'danger', msg: data.data }))
96
            dispatch(addNotification({ style: 'danger', msg: data.data }))
80
            setShareOptions(false)
97
            setShareOptions(false)
Línea 86... Línea 103...
86
        .catch((err) => reject(err))
103
        .catch((err) => reject(err))
87
    }
104
    }
88
  })
105
  })
Línea 89... Línea 106...
89
 
106
 
90
  const likeHandler = (likeUrl) => {
107
  const likeHandler = (likeUrl) => {
91
    axios.post(likeUrl)
-
 
92
      .then((res) => {
108
    axios.post(likeUrl).then((res) => {
93
        const { success, data } = res.data
109
      const { success, data } = res.data
94
        if (!success) {
110
      if (!success) {
-
 
111
        setFeedIsLiked((previousState) => !previousState)
95
          setFeedIsLiked((previousState) => !previousState)
112
        dispatch(
96
          dispatch(addNotification({
113
          addNotification({
97
            style: 'danger',
114
            style: 'danger',
98
            msg: data
115
            msg: data,
-
 
116
          })
99
          }))
117
        )
100
        } else {
118
      } else {
101
          setLikesState(data.likes)
119
        setLikesState(data.likes)
102
          setFeedIsLiked(!feedIsLiked)
120
        setFeedIsLiked(!feedIsLiked)
103
        }
121
      }
104
      })
122
    })
Línea 105... Línea 123...
105
  }
123
  }
Línea 106... Línea 124...
106
 
124
 
-
 
125
  const displayComments = () => setShowComments(!showComments)
-
 
126
 
-
 
127
  const btnShareHandler = () =>
-
 
128
    dispatch(
-
 
129
      openShareModal(
-
 
130
        feed_share_url,
-
 
131
        shareModalTypes.SHARE,
-
 
132
        feedTypes.DASHBOARD,
Línea 107... Línea 133...
107
  const displayComments = () => setShowComments(!showComments)
133
        feed_unique
108
 
134
      )
109
  const btnShareHandler = () => dispatch(openShareModal(feed_share_url, shareModalTypes.SHARE, feedTypes.DASHBOARD, feed_unique))
-
 
110
 
-
 
111
  return (
135
    )
112
    <>
-
 
113
      <FeedModal
-
 
114
        isShow={show}
136
 
115
        handleClose={() => setShow(false)}
137
  return (
116
        feed={feed}
138
    <>
117
      />
139
      <FeedModal isShow={show} handleClose={() => setShow(false)} feed={feed} />
118
      <div className={`feed ${feed_highlighted ? 'highlighted' : ''}`}>
140
      <div className={`feed ${feed_highlighted ? 'highlighted' : ''}`}>
119
        <FeedHeader
141
        <FeedHeader
120
          ownerName={owner_name}
142
          ownerName={owner_name}
121
          ownerImage={owner_image}
143
          ownerImage={owner_image}
122
          ownerTimeElapse={owner_time_elapse}
144
          ownerTimeElapse={owner_time_elapse}
-
 
145
          ownerUrl={owner_url}
123
          ownerUrl={owner_url}
146
          feedDeleteUrl={feed_delete_url}
124
          feedDeleteUrl={feed_delete_url}
147
          feedUnique={feed_unique}
125
          feedUnique={feed_unique}
148
        />
126
        />
149
        <div
127
        <div onClick={() =>
150
          onClick={() =>
128
          (owner_file_image || owner_file_video || owner_file_document) &&
151
            (owner_file_image || owner_file_video || owner_file_document) &&
129
          setShow(true)
152
            setShow(true)
130
        }
153
          }
131
        >
154
        >
Línea 142... Línea 165...
142
              time_elapse: feed.shared_time_elapse,
165
              time_elapse: feed.shared_time_elapse,
143
              description: feed.shared_description,
166
              description: feed.shared_description,
144
              file_video: feed.shared_file_video,
167
              file_video: feed.shared_file_video,
145
              file_image_preview: feed.shared_file_image_preview,
168
              file_image_preview: feed.shared_file_image_preview,
146
              file_image: feed.shared_file_image,
169
              file_image: feed.shared_file_image,
147
              file_document: feed.shared_file_document
170
              file_document: feed.shared_file_document,
148
            }}
171
            }}
149
          />
172
          />
150
        </div>
173
        </div>
151
        <div className="job-status-bar">
174
        <div className="job-status-bar">
152
          <ul className="reactions-list">
175
          <ul className="reactions-list">
153
            <li>
176
            <li>
154
              <button
177
              <button
155
                type="button"
178
                type="button"
-
 
179
                id={
-
 
180
                  feedIsLiked
156
                id={feedIsLiked ? `btn-unlike-${feed_unique}` : `btn-like-${feed_unique}`}
181
                    ? `btn-unlike-${feed_unique}`
-
 
182
                    : `btn-like-${feed_unique}`
-
 
183
                }
157
                className={feedIsLiked ? 'btn-unlike' : 'btn-like'}
184
                className={feedIsLiked ? 'btn-unlike' : 'btn-like'}
-
 
185
                onClick={() =>
158
                onClick={() => likeHandler(feedIsLiked ? feed_unlike_url : feed_like_url)}
186
                  likeHandler(feedIsLiked ? feed_unlike_url : feed_like_url)
-
 
187
                }
159
              >
188
              >
-
 
189
                {feedIsLiked ? (
-
 
190
                  <i className="mr-1 fa fa-heart" />
-
 
191
                ) : (
160
                {feedIsLiked ? <i className="mr-1 fa fa-heart" /> : <i className="mr-1 fa fa-heart-o" />}
192
                  <i className="mr-1 fa fa-heart-o" />
-
 
193
                )}
161
                {likesState}
194
                {likesState}
162
              </button>
195
              </button>
163
            </li>
196
            </li>
164
            <li>
197
            <li>
165
              <button
198
              <button
166
                type="button"
199
                type="button"
167
                id={`btn-comments-${feed_unique}`}
200
                id={`btn-comments-${feed_unique}`}
168
                className="btn-indicator"
201
                className="btn-indicator"
169
                onClick={displayComments}
202
                onClick={displayComments}
170
              >
203
              >
-
 
204
                <img
171
                <img src="/images/icons/message.png" className="mr-1 img-icon" />
205
                  src="/images/icons/message.png"
-
 
206
                  className="mr-1 img-icon"
-
 
207
                />
172
                {totalComments}
208
                {totalComments}
173
              </button>
209
              </button>
174
            </li>
210
            </li>
175
            <li>
211
            <li>
176
              <button
212
              <button
Línea 189... Línea 225...
189
                className="btn-indicator"
225
                className="btn-indicator"
190
                onClick={() => setShareOptions(!shareOptions)}
226
                onClick={() => setShareOptions(!shareOptions)}
191
              >
227
              >
192
                <i className="mr-1 far fa-share-square" />
228
                <i className="mr-1 far fa-share-square" />
193
              </button>
229
              </button>
194
              {shareOptions &&
230
              {shareOptions && (
195
                <div className="ext_share" ref={shareContainer}>
231
                <div className="ext_share" ref={shareContainer}>
-
 
232
                  <FacebookShareButton
196
                  <FacebookShareButton beforeOnClick={() => getShareUrl} url={shareUrl}>
233
                    beforeOnClick={() => getShareUrl}
-
 
234
                    url={shareUrl}
-
 
235
                  >
197
                    <FacebookIcon size={32} round />
236
                    <FacebookIcon size={32} round />
198
                  </FacebookShareButton>
237
                  </FacebookShareButton>
-
 
238
                  <TwitterShareButton
199
                  <TwitterShareButton beforeOnClick={() => getShareUrl} url={shareUrl}>
239
                    beforeOnClick={() => getShareUrl}
-
 
240
                    url={shareUrl}
-
 
241
                  >
200
                    <TwitterIcon size={32} round />
242
                    <TwitterIcon size={32} round />
201
                  </TwitterShareButton>
243
                  </TwitterShareButton>
-
 
244
                  <TelegramShareButton
202
                  <TelegramShareButton beforeOnClick={() => getShareUrl} url={shareUrl}>
245
                    beforeOnClick={() => getShareUrl}
-
 
246
                    url={shareUrl}
-
 
247
                  >
203
                    <TelegramIcon size={32} round />
248
                    <TelegramIcon size={32} round />
204
                  </TelegramShareButton>
249
                  </TelegramShareButton>
-
 
250
                  <WhatsappShareButton
205
                  <WhatsappShareButton beforeOnClick={() => getShareUrl} url={shareUrl}>
251
                    beforeOnClick={() => getShareUrl}
-
 
252
                    url={shareUrl}
-
 
253
                  >
206
                    <WhatsappIcon size={32} round />
254
                    <WhatsappIcon size={32} round />
207
                  </WhatsappShareButton>
255
                  </WhatsappShareButton>
-
 
256
                  <RedditShareButton
208
                  <RedditShareButton beforeOnClick={() => getShareUrl} url={shareUrl}>
257
                    beforeOnClick={() => getShareUrl}
-
 
258
                    url={shareUrl}
-
 
259
                  >
209
                    <RedditIcon size={32} round />
260
                    <RedditIcon size={32} round />
210
                  </RedditShareButton>
261
                  </RedditShareButton>
-
 
262
                  <EmailShareButton
211
                  <EmailShareButton beforeOnClick={() => getShareUrl} url={shareUrl}>
263
                    beforeOnClick={() => getShareUrl}
-
 
264
                    url={shareUrl}
-
 
265
                  >
212
                    <EmailIcon size={32} round />
266
                    <EmailIcon size={32} round />
213
                  </EmailShareButton>
267
                  </EmailShareButton>
214
                </div>
268
                </div>
215
              }
269
              )}
216
            </li>
270
            </li>
217
          </ul>
271
          </ul>
218
        </div>
272
        </div>
219
        <FeedCommentSection
273
        <FeedCommentSection
220
          feedId={feed.feed_unique}
274
          feedId={feed.feed_unique}
221
          image={image}
275
          image={image}
222
          addUrl={comment_add_url}
276
          addUrl={comment_add_url}
223
          updateTotalComments={(total) => setTotalComments(total)}
277
          updateTotalComments={(total) => setTotalComments(total)}
224
          comments={comments}
278
          currentComments={comments}
225
          isShow={showComments}
279
          isShow={showComments}
226
        />
280
        />
227
      </div>
281
      </div>
228
    </>
282
    </>
229
  )
283
  )
Línea 235... Línea 289...
235
  ownerFileVideo,
289
  ownerFileVideo,
236
  ownerFileImagePreview,
290
  ownerFileImagePreview,
237
  ownerFileDocument,
291
  ownerFileDocument,
238
  ownerDescription,
292
  ownerDescription,
239
  isShare,
293
  isShare,
240
  sharedItem
294
  sharedItem,
241
}) => {
295
}) => {
242
  const labels = useSelector(state => state.labels)
296
  const labels = useSelector((state) => state.labels)
243
  return (
297
  return (
244
    <div className="job_descp">
298
    <div className="job_descp">
245
      {showDescription &&
299
      {showDescription && (
246
        <Feed.Description ownerDescription={ownerDescription} />
300
        <Feed.Description ownerDescription={ownerDescription} />
247
      }
301
      )}
248
      {ownerFileImage &&
302
      {ownerFileImage && (
249
        <img src={ownerFileImage} className="Entradas" loading='lazy' />
303
        <img src={ownerFileImage} className="Entradas" loading="lazy" />
250
      }
304
      )}
251
      {ownerFileVideo &&
305
      {ownerFileVideo && (
252
        <video
306
        <video
253
          src={ownerFileVideo}
307
          src={ownerFileVideo}
254
          controls
308
          controls
255
          poster={ownerFileImagePreview}
309
          poster={ownerFileImagePreview}
256
          preload="none"
310
          preload="none"
257
        />
311
        />
258
      }
312
      )}
259
      {ownerFileDocument &&
313
      {ownerFileDocument && (
260
        <a href={ownerFileDocument} target="_blank" rel="noreferrer">
314
        <a href={ownerFileDocument} target="_blank" rel="noreferrer">
261
          {labels.DOWNLOAD}
315
          {labels.DOWNLOAD}
262
        </a>
316
        </a>
263
      }
317
      )}
264
      {isShare &&
318
      {isShare && (
265
        <Feed.SharedContent
319
        <Feed.SharedContent
266
          name={sharedItem.name}
320
          name={sharedItem.name}
267
          image={sharedItem.image}
321
          image={sharedItem.image}
268
          timeElapse={sharedItem.time_elapse}
322
          timeElapse={sharedItem.time_elapse}
269
          description={sharedItem.description}
323
          description={sharedItem.description}
270
          fileVideo={sharedItem.file_video}
324
          fileVideo={sharedItem.file_video}
271
          fileImagePreview={sharedItem.file_image_preview}
325
          fileImagePreview={sharedItem.file_image_preview}
272
          fileImage={sharedItem.file_image}
326
          fileImage={sharedItem.file_image}
273
          fileDocument={sharedItem.file_document}
327
          fileDocument={sharedItem.file_document}
274
        />
328
        />
275
      }
329
      )}
276
    </div>
330
    </div>
277
  )
331
  )
278
}
332
}
Línea 279... Línea 333...
279
 
333
 
280
const Description = ({ ownerDescription }) => {
334
const Description = ({ ownerDescription }) => {
281
  const [isReadMoreActive, setIsReadMoreActive] = useState(false)
335
  const [isReadMoreActive, setIsReadMoreActive] = useState(false)
Línea 282... Línea 336...
282
  const labels = useSelector(state => state.labels)
336
  const labels = useSelector((state) => state.labels)
Línea 283... Línea 337...
283
 
337
 
284
  const readMoreHandler = () => setIsReadMoreActive(!isReadMoreActive)
338
  const readMoreHandler = () => setIsReadMoreActive(!isReadMoreActive)
Línea 289... Línea 343...
289
      const shortenedString = fullStringText.substr(0, 500)
343
      const shortenedString = fullStringText.substr(0, 500)
290
      const shortenedText = parse(`${shortenedString}... `)
344
      const shortenedText = parse(`${shortenedString}... `)
291
      return (
345
      return (
292
        <p>
346
        <p>
293
          {isReadMoreActive ? fullText : shortenedText}
347
          {isReadMoreActive ? fullText : shortenedText}
294
          <span className='cursor-pointer' onClick={readMoreHandler}>
348
          <span className="cursor-pointer" onClick={readMoreHandler}>
295
            {isReadMoreActive ? labels.READ_LESS : labels.READ_MORE}
349
            {isReadMoreActive ? labels.READ_LESS : labels.READ_MORE}
296
          </span>
350
          </span>
297
        </p>
351
        </p>
298
      )
352
      )
299
    }
353
    }
300
    return <p>{fullText}</p>
354
    return <p>{fullText}</p>
301
  }
355
  }
Línea 302... Línea 356...
302
 
356
 
303
  return (
-
 
304
    <div className="show-read-more">
357
  return (
305
      {htmlParsedText(ownerDescription)}
-
 
306
    </div>
358
    <div className="show-read-more">{htmlParsedText(ownerDescription)}</div>
307
  )
359
  )
Línea 308... Línea 360...
308
}
360
}
309
 
361
 
Línea 313... Línea 365...
313
  timeElapse,
365
  timeElapse,
314
  description,
366
  description,
315
  fileVideo,
367
  fileVideo,
316
  fileImagePreview,
368
  fileImagePreview,
317
  fileImage,
369
  fileImage,
318
  fileDocument
370
  fileDocument,
319
}) => {
371
}) => {
320
  const [isReadMoreActive, setIsReadMoreActive] = useState(false)
372
  const [isReadMoreActive, setIsReadMoreActive] = useState(false)
321
  const labels = useSelector(state => state.labels)
373
  const labels = useSelector((state) => state.labels)
Línea 322... Línea 374...
322
 
374
 
Línea 323... Línea 375...
323
  const readMoreHandler = () => setIsReadMoreActive(!isReadMoreActive)
375
  const readMoreHandler = () => setIsReadMoreActive(!isReadMoreActive)
324
 
376
 
Línea 328... Línea 380...
328
      const shortenedString = fullStringText.substr(0, 500)
380
      const shortenedString = fullStringText.substr(0, 500)
329
      const shortenedText = parse(`${shortenedString}... `)
381
      const shortenedText = parse(`${shortenedString}... `)
330
      return (
382
      return (
331
        <p>
383
        <p>
332
          {isReadMoreActive ? fullText : shortenedText}
384
          {isReadMoreActive ? fullText : shortenedText}
333
          <span className='cursor-pointer' onClick={readMoreHandler}>
385
          <span className="cursor-pointer" onClick={readMoreHandler}>
334
            {isReadMoreActive ? labels.READ_LESS : labels.READ_MORE}
386
            {isReadMoreActive ? labels.READ_LESS : labels.READ_MORE}
335
          </span>
387
          </span>
336
        </p>
388
        </p>
337
      )
389
      )
338
    }
390
    }
Línea 342... Línea 394...
342
  return (
394
  return (
343
    <div className="shared-post-bar">
395
    <div className="shared-post-bar">
344
      <div className="post-bar">
396
      <div className="post-bar">
345
        <div className="post_topbar">
397
        <div className="post_topbar">
346
          <div className="usy-dt">
398
          <div className="usy-dt">
347
            <img
-
 
348
              src={image}
-
 
349
              alt=""
-
 
350
              style={{ width: '50px', height: 'auto' }}
399
            <img src={image} alt="" style={{ width: '50px', height: 'auto' }} />
351
            />
-
 
352
            <div className="usy-name">
400
            <div className="usy-name">
353
              <h3>{name}</h3>
401
              <h3>{name}</h3>
354
              <span>
-
 
355
                {timeElapse}
402
              <span>{timeElapse}</span>
356
              </span>
-
 
357
            </div>
403
            </div>
358
          </div>
404
          </div>
359
        </div>
405
        </div>
360
        <div className="job_descp">
406
        <div className="job_descp">
361
          <div className="show-read-more">
407
          <div className="show-read-more">{htmlParsedText(description)}</div>
362
            {htmlParsedText(description)}
-
 
363
          </div>
-
 
364
          {fileImage &&
408
          {fileImage && (
365
            <img src={fileImage} className="Entradas" loading='lazy' />
409
            <img src={fileImage} className="Entradas" loading="lazy" />
366
          }
410
          )}
367
          {fileVideo &&
411
          {fileVideo && (
368
            <video
412
            <video
369
              src={fileVideo}
413
              src={fileVideo}
370
              controls
414
              controls
371
              poster={fileImagePreview}
415
              poster={fileImagePreview}
372
              preload="none"
416
              preload="none"
373
            />
417
            />
374
          }
418
          )}
375
          {fileDocument &&
419
          {fileDocument && (
376
            <a href={fileDocument} target="_blank" rel="noreferrer">
420
            <a href={fileDocument} target="_blank" rel="noreferrer">
377
              {labels.DOWNLOAD}
421
              {labels.DOWNLOAD}
378
            </a>
422
            </a>
379
          }
423
          )}
380
        </div>
424
        </div>
381
      </div>
425
      </div>
382
    </div>
426
    </div>
383
  )
427
  )
384
}
428
}