Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev 4061 Rev 5115
Línea -... Línea 1...
-
 
1
/* eslint-disable camelcase */
1
/* eslint-disable react/prop-types */
2
/* eslint-disable react/prop-types */
2
import React, { useEffect, useState, useRef } from "react";
3
import React, { useEffect, useState, useRef } from 'react'
3
import parse from "html-react-parser"
4
import parse from 'html-react-parser'
4
import { useDispatch } from "react-redux";
5
import { useDispatch } from 'react-redux'
5
import { axios } from "../../../utils";
6
import { axios } from '../../../utils'
6
import { EmailIcon, EmailShareButton, FacebookIcon, FacebookShareButton, RedditIcon, RedditShareButton, TelegramIcon, TelegramShareButton, TwitterIcon, TwitterShareButton, WhatsappIcon, WhatsappShareButton } from "react-share";
7
import { EmailIcon, EmailShareButton, FacebookIcon, FacebookShareButton, RedditIcon, RedditShareButton, TelegramIcon, TelegramShareButton, TwitterIcon, TwitterShareButton, WhatsappIcon, WhatsappShareButton } from 'react-share'
Línea 7... Línea 8...
7
 
8
 
8
// Redux types
9
// Redux types
9
import { shareModalTypes } from "../../../redux/share-modal/shareModal.types";
10
import { shareModalTypes } from '../../../redux/share-modal/shareModal.types'
Línea 10... Línea 11...
10
import { feedTypes } from "../../../redux/feed/feed.types";
11
import { feedTypes } from '../../../redux/feed/feed.types'
11
 
12
 
12
// Redux actions
13
// Redux actions
13
import { openShareModal } from "../../../redux/share-modal/shareModal.actions";
-
 
14
import { addNotification } from "../../../redux/notification/notification.actions";
-
 
15
import FeedModal from "./FeedModal";
-
 
Línea -... Línea 14...
-
 
14
import { openShareModal } from '../../../redux/share-modal/shareModal.actions'
-
 
15
import { addNotification } from '../../../redux/notification/notification.actions'
-
 
16
 
16
import FeedHeader from "./FeedHeader";
17
// Components
Línea -... Línea 18...
-
 
18
import FeedModal from './FeedModal'
17
import FeedCommentSection from "./feed-comment/FeedCommentSection";
19
import FeedHeader from './FeedHeader'
18
 
20
import FeedCommentSection from './feed-comment/FeedCommentSection'
19
const Feed = ({ feed, owner_shared, image }) => {
21
 
20
 
22
const Feed = ({ feed, owner_shared, image }) => {
21
  // Destructuring feed data
23
  // Destructuring feed data
Línea 36... Línea 38...
36
    feed_share_url,
38
    feed_share_url,
37
    feed_delete_url,
39
    feed_delete_url,
38
    comments,
40
    comments,
39
    comment_add_url,
41
    comment_add_url,
40
    feed_share_external_url
42
    feed_share_external_url
41
  } = feed;
43
  } = feed
Línea 42... Línea 44...
42
 
44
 
Línea 43... Línea 45...
43
  const dispatch = useDispatch()
45
  const dispatch = useDispatch()
44
 
46
 
45
  const [totalComments, setTotalComments] = useState(comments.length || 0);
47
  const [totalComments, setTotalComments] = useState(comments.length || 0)
46
  const [feedIsLiked, setFeedIsLiked] = useState(feed_is_liked);
48
  const [feedIsLiked, setFeedIsLiked] = useState(feed_is_liked)
47
  const [sharedState, setSharedState] = useState(owner_shared);
49
  const [sharedState, setSharedState] = useState(owner_shared)
48
  const [likesState, setLikesState] = useState(feed_likes);
50
  const [likesState, setLikesState] = useState(feed_likes)
Línea 49... Línea 51...
49
  const [shareUrl, setShareUrl] = useState('');
51
  const [shareUrl, setShareUrl] = useState('')
50
  const [showComments, setShowComments] = useState(false);
52
  const [showComments, setShowComments] = useState(false)
51
 
-
 
Línea 52... Línea 53...
52
  const [shareOptions, setShareOptions] = useState(false)
53
 
Línea 53... Línea 54...
53
  const [show, setShow] = useState(false);
54
  const [shareOptions, setShareOptions] = useState(false)
Línea 54... Línea 55...
54
 
55
  const [show, setShow] = useState(false)
55
 
56
 
56
  const shareContainer = useRef(null);
57
  const shareContainer = useRef(null)
57
 
58
 
58
  useEffect(() => setSharedState(owner_shared), [owner_shared]);
59
  useEffect(() => setSharedState(owner_shared), [owner_shared])
59
 
60
 
60
  useEffect(() => {
61
  useEffect(() => {
Línea 61... Línea 62...
61
    const handleClickOutside = (event) => {
62
    const handleClickOutside = (event) => {
62
      if (shareContainer.current && !shareContainer.current.contains(event.target)) {
63
      if (shareContainer.current && !shareContainer.current.contains(event.target)) {
63
        setShareOptions(false)
64
        setShareOptions(false)
64
      }
65
      }
Línea 65... Línea 66...
65
    }
66
    }
66
    document.addEventListener("mousedown", handleClickOutside);
67
    document.addEventListener('mousedown', handleClickOutside)
67
 
68
 
68
    return () => {
69
    return () => {
Línea 82... Línea 83...
82
          setShareUrl(data.data)
83
          setShareUrl(data.data)
83
          return resolve(data.data)
84
          return resolve(data.data)
84
        })
85
        })
85
        .catch((err) => reject(err))
86
        .catch((err) => reject(err))
86
    }
87
    }
87
  });
88
  })
88
 
-
 
Línea 89... Línea 89...
89
 
89
 
90
  const likeHandler = (likeUrl) => {
90
  const likeHandler = (likeUrl) => {
91
    axios.post(likeUrl)
91
    axios.post(likeUrl)
92
      .then((res) => {
92
      .then((res) => {
93
        const { success, data } = res.data;
93
        const { success, data } = res.data
94
        if (!success) {
94
        if (!success) {
95
          setFeedIsLiked((previousState) => !previousState);
95
          setFeedIsLiked((previousState) => !previousState)
96
          dispatch(addNotification({
96
          dispatch(addNotification({
97
            style: "danger",
97
            style: 'danger',
98
            msg: data,
98
            msg: data
99
          }));
99
          }))
100
        } else {
100
        } else {
101
          setLikesState(data.likes)
101
          setLikesState(data.likes)
102
          setFeedIsLiked(!feedIsLiked);
102
          setFeedIsLiked(!feedIsLiked)
103
        }
103
        }
104
      });
104
      })
Línea 105... Línea 105...
105
  };
105
  }
Línea 106... Línea 106...
106
 
106
 
Línea 123... Línea 123...
123
          ownerUrl={owner_url}
123
          ownerUrl={owner_url}
124
          feedDeleteUrl={feed_delete_url}
124
          feedDeleteUrl={feed_delete_url}
125
          feedUnique={feed_unique}
125
          feedUnique={feed_unique}
126
        />
126
        />
127
        <div onClick={() =>
127
        <div onClick={() =>
128
          (owner_file_image || owner_file_video || owner_file_document)
128
          (owner_file_image || owner_file_video || owner_file_document) &&
129
          && setShow(true)
129
          setShow(true)
130
        }
130
        }
131
        >
131
        >
132
          <Feed.Content
132
          <Feed.Content
133
            isShare={feed.shared_name ? true : false}
133
            isShare={!!feed.shared_name}
134
            ownerFileImage={feed.owner_file_image}
134
            ownerFileImage={feed.owner_file_image}
135
            ownerFileVideo={feed.owner_file_video}
135
            ownerFileVideo={feed.owner_file_video}
136
            ownerFileImagePreview={feed.owner_file_image_preview}
136
            ownerFileImagePreview={feed.owner_file_image_preview}
137
            ownerFileDocument={feed.owner_file_document}
137
            ownerFileDocument={feed.owner_file_document}
138
            ownerDescription={feed.owner_description}
138
            ownerDescription={feed.owner_description}
Línea 152... Línea 152...
152
          <ul className="reactions-list">
152
          <ul className="reactions-list">
153
            <li>
153
            <li>
154
              <button
154
              <button
155
                type="button"
155
                type="button"
156
                id={feedIsLiked ? `btn-unlike-${feed_unique}` : `btn-like-${feed_unique}`}
156
                id={feedIsLiked ? `btn-unlike-${feed_unique}` : `btn-like-${feed_unique}`}
157
                className={feedIsLiked ? "btn-unlike" : "btn-like"}
157
                className={feedIsLiked ? 'btn-unlike' : 'btn-like'}
158
                onClick={() => likeHandler(feedIsLiked ? feed_unlike_url : feed_like_url)}
158
                onClick={() => likeHandler(feedIsLiked ? feed_unlike_url : feed_like_url)}
159
              >
159
              >
160
                {feedIsLiked ? <i className="mr-1 fa fa-heart" /> : <i className="mr-1 fa fa-heart-o" />}
160
                {feedIsLiked ? <i className="mr-1 fa fa-heart" /> : <i className="mr-1 fa fa-heart-o" />}
161
                {likesState}
161
                {likesState}
162
              </button>
162
              </button>
Línea 222... Línea 222...
222
          addUrl={comment_add_url}
222
          addUrl={comment_add_url}
223
          updateTotalComments={(total) => setTotalComments(total)}
223
          updateTotalComments={(total) => setTotalComments(total)}
224
          comments={comments}
224
          comments={comments}
225
          isShow={showComments}
225
          isShow={showComments}
226
        />
226
        />
227
      </div >
227
      </div>
228
    </>
228
    </>
229
  );
229
  )
230
};
230
}
Línea 231... Línea 231...
231
 
231
 
232
const Content = ({
232
const Content = ({
233
  showDescription = true,
233
  showDescription = true,
234
  ownerFileImage,
234
  ownerFileImage,
Línea 237... Línea 237...
237
  ownerFileDocument,
237
  ownerFileDocument,
238
  ownerDescription,
238
  ownerDescription,
239
  isShare,
239
  isShare,
240
  sharedItem
240
  sharedItem
241
}) => {
241
}) => {
242
 
-
 
243
  return (
242
  return (
244
    <div className="job_descp">
243
    <div className="job_descp">
245
      {showDescription &&
244
      {showDescription &&
246
        <Feed.Description ownerDescription={ownerDescription} />
245
        <Feed.Description ownerDescription={ownerDescription} />
247
      }
246
      }
Línea 256... Línea 255...
256
          preload="none"
255
          preload="none"
257
        />
256
        />
258
      }
257
      }
259
      {ownerFileDocument &&
258
      {ownerFileDocument &&
260
        <a href={ownerFileDocument} target="_blank" rel="noreferrer">
259
        <a href={ownerFileDocument} target="_blank" rel="noreferrer">
261
          Descargar
260
          {LABELS.DOWNLOAD}
262
        </a>
261
        </a>
263
      }
262
      }
264
      {isShare &&
263
      {isShare &&
265
        <Feed.SharedContent
264
        <Feed.SharedContent
266
          name={sharedItem.name}
265
          name={sharedItem.name}
Línea 276... Línea 275...
276
    </div>
275
    </div>
277
  )
276
  )
278
}
277
}
Línea 279... Línea 278...
279
 
278
 
280
const Description = ({ ownerDescription }) => {
-
 
281
 
279
const Description = ({ ownerDescription }) => {
Línea 282... Línea 280...
282
  const [isReadMoreActive, setIsReadMoreActive] = useState(false);
280
  const [isReadMoreActive, setIsReadMoreActive] = useState(false)
Línea 283... Línea 281...
283
 
281
 
284
  const readMoreHandler = () => setIsReadMoreActive(!isReadMoreActive)
282
  const readMoreHandler = () => setIsReadMoreActive(!isReadMoreActive)
285
 
283
 
286
  const htmlParsedText = (fullStringText) => {
284
  const htmlParsedText = (fullStringText) => {
287
    const fullText = parse(fullStringText)
285
    const fullText = parse(fullStringText)
288
    if (fullStringText.length > 500) {
286
    if (fullStringText.length > 500) {
289
      const shortenedString = fullStringText.substr(0, 500);
287
      const shortenedString = fullStringText.substr(0, 500)
290
      const shortenedText = parse(`${shortenedString}... `);
288
      const shortenedText = parse(`${shortenedString}... `)
291
      return (
289
      return (
292
        <p>
290
        <p>
293
          {isReadMoreActive ? fullText : shortenedText}
291
          {isReadMoreActive ? fullText : shortenedText}
294
          <span className='cursor-pointer' onClick={readMoreHandler}>
292
          <span className='cursor-pointer' onClick={readMoreHandler}>
295
            {isReadMoreActive ? " Leer menos" : " Leer más"}
293
            {isReadMoreActive ? LABELS.READ_LESS : LABELS.READ_MORE}
296
          </span>
294
          </span>
297
        </p>
295
        </p>
298
      );
296
      )
Línea 299... Línea 297...
299
    }
297
    }
300
    return <p>{fullText}</p>
298
    return <p>{fullText}</p>
301
  };
299
  }
302
 
300
 
Línea 313... Línea 311...
313
  timeElapse,
311
  timeElapse,
314
  description,
312
  description,
315
  fileVideo,
313
  fileVideo,
316
  fileImagePreview,
314
  fileImagePreview,
317
  fileImage,
315
  fileImage,
318
  fileDocument,
316
  fileDocument
319
}) => {
317
}) => {
320
 
-
 
321
  const [isReadMoreActive, setIsReadMoreActive] = useState(false);
318
  const [isReadMoreActive, setIsReadMoreActive] = useState(false)
Línea 322... Línea 319...
322
 
319
 
Línea 323... Línea 320...
323
  const readMoreHandler = () => setIsReadMoreActive(!isReadMoreActive)
320
  const readMoreHandler = () => setIsReadMoreActive(!isReadMoreActive)
324
 
321
 
325
  const htmlParsedText = (fullStringText) => {
322
  const htmlParsedText = (fullStringText) => {
326
    const fullText = parse(fullStringText)
323
    const fullText = parse(fullStringText)
327
    if (fullStringText.length > 500) {
324
    if (fullStringText.length > 500) {
328
      const shortenedString = fullStringText.substr(0, 500);
325
      const shortenedString = fullStringText.substr(0, 500)
329
      const shortenedText = parse(`${shortenedString}... `);
326
      const shortenedText = parse(`${shortenedString}... `)
330
      return (
327
      return (
331
        <p>
328
        <p>
332
          {isReadMoreActive ? fullText : shortenedText}
329
          {isReadMoreActive ? fullText : shortenedText}
333
          <span className='cursor-pointer' onClick={readMoreHandler}>
330
          <span className='cursor-pointer' onClick={readMoreHandler}>
334
            {isReadMoreActive ? " Leer menos" : " Leer más"}
331
            {isReadMoreActive ? LABELS.READ_LESS : LABELS.READ_MORE}
335
          </span>
332
          </span>
336
        </p>
333
        </p>
337
      );
334
      )
338
    }
335
    }
Línea 339... Línea 336...
339
    return <p>{fullText}</p>
336
    return <p>{fullText}</p>
340
  };
337
  }
341
 
338
 
342
  return (
339
  return (
343
    <div className="shared-post-bar">
340
    <div className="shared-post-bar">
344
      <div className="post-bar">
341
      <div className="post-bar">
345
        <div className="post_topbar">
342
        <div className="post_topbar">
346
          <div className="usy-dt">
343
          <div className="usy-dt">
347
            <img
344
            <img
348
              src={image}
345
              src={image}
349
              alt=""
346
              alt=""
350
              style={{ width: "50px", height: "auto" }}
347
              style={{ width: '50px', height: 'auto' }}
351
            />
348
            />
352
            <div className="usy-name">
349
            <div className="usy-name">
Línea 372... Línea 369...
372
              preload="none"
369
              preload="none"
373
            />
370
            />
374
          }
371
          }
375
          {fileDocument &&
372
          {fileDocument &&
376
            <a href={fileDocument} target="_blank" rel="noreferrer">
373
            <a href={fileDocument} target="_blank" rel="noreferrer">
377
              Descargar
374
              {LABELS.DOWNLOAD}
378
            </a>
375
            </a>
379
          }
376
          }
380
        </div>
377
        </div>
381
      </div>
378
      </div>
382
    </div>
379
    </div>
Línea 385... Línea 382...
385
 
382
 
386
Feed.SharedContent = SharedContent
383
Feed.SharedContent = SharedContent
387
Feed.Description = Description
384
Feed.Description = Description
Línea 388... Línea -...
388
Feed.Content = Content
-
 
389
 
385
Feed.Content = Content
-
 
386