Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
3361 stevensc 1
/* eslint-disable react/prop-types */
4821 stevensc 2
import React, { useEffect, useState } from 'react'
4817 stevensc 3
import { axios } from '../../utils'
4
import { addNotification } from '../../redux/notification/notification.actions'
4816 stevensc 5
import parse from 'html-react-parser'
6
 
7
// Components
4817 stevensc 8
import HomeNews from '../components/home-section/HomeNews'
9
import InputOption from '../templates/linkedin/Feed/InputOption'
10
import withExternalShare from '../templates/linkedin/Feed/withExternalShare'
3361 stevensc 11
 
4816 stevensc 12
// Icons
13
import ThumbUpAltOutlinedIcon from '@mui/icons-material/ThumbUpAltOutlined'
14
import ThumbUpAltIcon from '@mui/icons-material/ThumbUpAlt'
15
import ChatOutlinedIcon from '@mui/icons-material/ChatOutlined'
16
import SendOutlinedIcon from '@mui/icons-material/SendOutlined'
4817 stevensc 17
import AccessTimeIcon from '@mui/icons-material/AccessTime'
3361 stevensc 18
 
4817 stevensc 19
// Styles
20
import '../templates/linkedin/Feed/Feed.scss'
4818 stevensc 21
import FeedCommentSection from '../components/feed/feed-comment/FeedCommentSection'
4817 stevensc 22
 
5118 stevensc 23
export default function PostView ({
24
  post = {
25
    url: '',
26
    file: 'imagengrupo.png',
27
    comments_url: '/post/344ccca7-6260-4564-93cc-85ed7682bec2/comments',
28
    comments_add_url: '/post/344ccca7-6260-4564-93cc-85ed7682bec2/comments/add'
29
  }
4816 stevensc 30
}) {
5118 stevensc 31
  const [isLiked, setIsLiked] = useState(post.is_liked)
32
  const [externalShare, setExternalShare] = useState(post.total_share_external)
33
  const [comments, setComments] = useState([])
34
  const [isReadMoreActive, setIsReadMoreActive] = useState(false)
35
  const [showComments, setShowComments] = useState(false)
3810 stevensc 36
 
5118 stevensc 37
  const readMoreHandler = () => setIsReadMoreActive(!isReadMoreActive)
4816 stevensc 38
 
5118 stevensc 39
  const displayCommentSection = () => {
40
    setShowComments(!showComments)
41
  }
4821 stevensc 42
 
5118 stevensc 43
  const getComments = async () => {
44
    await axios.get(post.comments_url)
45
      .then(({ data: response }) => {
46
        if (!response.success) {
47
          addNotification({ style: 'danger', msg: response.data })
48
          return
49
        }
4818 stevensc 50
 
5118 stevensc 51
        setComments(response.data)
52
      })
53
  }
4816 stevensc 54
 
5118 stevensc 55
  const handleExternalShare = (value) => setExternalShare(value)
4816 stevensc 56
 
5118 stevensc 57
  const ExternalShareButton = withExternalShare(InputOption, post.share_external_url, {
58
    Icon: SendOutlinedIcon,
59
    color: 'gray',
60
    title: 'Enviar',
61
    shareUrl: post.share_increment_external_counter_url,
62
    setValue: handleExternalShare
63
  })
4816 stevensc 64
 
5118 stevensc 65
  const handleLike = (url) => {
66
    axios.post(url)
67
      .then(({ data: response }) => {
68
        if (!response.success) {
69
          addNotification({ style: 'danger', msg: response.data })
70
          return
71
        }
72
        setIsLiked(!isLiked)
73
      })
74
  }
3810 stevensc 75
 
5118 stevensc 76
  const htmlParsedText = (fullStringText) => {
77
    const fullText = parse(fullStringText)
78
    if (fullStringText.length > 500) {
79
      const shortenedString = fullStringText.substr(0, 500)
80
      const shortenedText = parse(`${shortenedString}... `)
81
      return (
4816 stevensc 82
                <>
83
                    {isReadMoreActive ? fullText : shortenedText}
84
                    <span className='cursor-pointer' onClick={readMoreHandler}>
5118 stevensc 85
                        {isReadMoreActive ? ' Leer menos' : ' Leer más'}
4816 stevensc 86
                    </span>
87
                </>
5118 stevensc 88
      )
4816 stevensc 89
    }
5118 stevensc 90
    return <p>{fullText}</p>
91
  }
3361 stevensc 92
 
5118 stevensc 93
  useEffect(() => {
94
    if (showComments && !comments.length) getComments()
95
  }, [showComments])
4821 stevensc 96
 
5118 stevensc 97
  return (
3760 stevensc 98
        <div className="container">
4096 stevensc 99
            <div className="d-flex flex-column flex-md-row" style={{ gap: '1rem' }}>
4816 stevensc 100
                <div className="col-12 col-md-8 p-0">
101
                    <div className='feed'>
102
                        <div className='feed__body'>
103
                            {post.image && <img src={`/storage/type/post/code/${post.uuid}/filename/${post.image}`} className="Entradas" loading='lazy' />}
104
                        </div>
105
                        <div className='feed__body'>
106
                            <div className='feed__header'>
107
                                <div className='feed__info'>
108
                                    <h2>{post.title}</h2>
109
                                    <div className='time__elapse'>
110
                                        <p>{post.addedOn}</p>
111
                                        <AccessTimeIcon className='time__elapse-icon' />
4093 stevensc 112
                                    </div>
4816 stevensc 113
                                </div>
3761 stevensc 114
                            </div>
4816 stevensc 115
                            {post.description && htmlParsedText(post.description)}
3761 stevensc 116
                        </div>
4819 stevensc 117
                        <div className="px-3 d-flex align-items-center justify-content-end" style={{ gap: '5px' }}>
5119 stevensc 118
                            {!!externalShare && <span>{`${externalShare} ${LABELS.SENDS.toLowerCase()}`}</span>}
4093 stevensc 119
                        </div>
4818 stevensc 120
                        <div className='feed__buttons'>
121
                            <InputOption
122
                                Icon={isLiked ? ThumbUpAltIcon : ThumbUpAltOutlinedIcon}
5118 stevensc 123
                                title={isLiked ? LABELS.UNLIKE : LABELS.LIKE}
4818 stevensc 124
                                color={isLiked ? '#7405f9' : 'gray'}
125
                                onClick={() => handleLike(isLiked ? post.unlike_url : post.like_url)}
126
                            />
127
                            <InputOption
128
                                Icon={ChatOutlinedIcon}
5118 stevensc 129
                                title={LABELS.COMMENTS}
4818 stevensc 130
                                color='gray'
131
                                onClick={displayCommentSection}
132
                            />
133
                            <ExternalShareButton />
134
                        </div>
135
                        <div className='px-2 pb-2'>
136
                            <FeedCommentSection
137
                                feedId={post.uuid}
138
                                addUrl={post.comments_add_url}
139
                                comments={comments}
140
                                isShow={showComments}
141
                            />
142
                        </div>
3760 stevensc 143
                    </div>
1 www 144
                </div>
4098 stevensc 145
                <div className="col-12 col-md-4 p-0">
146
                    <HomeNews currentPost={post.uuid} />
4093 stevensc 147
                </div>
148
            </div>
5449 stevensc 149
        </div>
5118 stevensc 150
  )
1 www 151
}