Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 4818 | Rev 4820 | 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 */
4818 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
 
4816 stevensc 23
export default function PostView({ post = {
24
    url: "",
25
    file: "imagengrupo.png",
26
    comments_url: "/post/344ccca7-6260-4564-93cc-85ed7682bec2/comments",
27
    comments_add_url: "/post/344ccca7-6260-4564-93cc-85ed7682bec2/comments/add"
28
}
29
}) {
30
    const [isLiked, setIsLiked] = useState(post.is_liked)
31
    const [externalShare, setExternalShare] = useState(post.total_share_external)
4818 stevensc 32
    const [comments, setComments] = useState([])
4816 stevensc 33
    const [isReadMoreActive, setIsReadMoreActive] = useState(false)
34
    const [showComments, setShowComments] = useState(false)
3810 stevensc 35
 
4816 stevensc 36
    const readMoreHandler = () => setIsReadMoreActive(!isReadMoreActive)
37
 
38
    const displayCommentSection = () => {
4819 stevensc 39
        setShowComments(!showComments)
4816 stevensc 40
        axios.get(post.comments_url)
4818 stevensc 41
            .then(({ data: response }) => {
42
                if (!response.success) {
43
                    addNotification({ style: 'danger', msg: response.data })
44
                    return
45
                }
46
 
47
                setComments(response.data)
48
            })
4816 stevensc 49
    }
50
 
51
    const ExternalShareButton = withExternalShare(InputOption, post.share_external_url, {
52
        Icon: SendOutlinedIcon,
53
        color: 'gray',
4819 stevensc 54
        title: 'Enviar',
4816 stevensc 55
        shareUrl: post.share_increment_external_counter_url,
56
        setValue: handleExternalShare
57
    })
58
 
59
    const handleExternalShare = (value) => setExternalShare(value)
60
 
61
    const handleLike = (url) => {
62
        axios.post(url)
63
            .then(({ data: response }) => {
64
                if (!response.success) {
65
                    addNotification({ style: "danger", msg: response.data })
66
                    return
3810 stevensc 67
                }
4817 stevensc 68
                setIsLiked(!isLiked)
69
            })
4816 stevensc 70
    }
3810 stevensc 71
 
4816 stevensc 72
    const htmlParsedText = (fullStringText) => {
73
        const fullText = parse(fullStringText)
74
        if (fullStringText.length > 500) {
4817 stevensc 75
            const shortenedString = fullStringText.substr(0, 500)
76
            const shortenedText = parse(`${shortenedString}... `)
4816 stevensc 77
            return (
78
                <>
79
                    {isReadMoreActive ? fullText : shortenedText}
80
                    <span className='cursor-pointer' onClick={readMoreHandler}>
81
                        {isReadMoreActive ? " Leer menos" : " Leer más"}
82
                    </span>
83
                </>
4817 stevensc 84
            )
4816 stevensc 85
        }
86
        return <p>{fullText}</p>
87
    }
3361 stevensc 88
 
1 www 89
    return (
3760 stevensc 90
        <div className="container">
4096 stevensc 91
            <div className="d-flex flex-column flex-md-row" style={{ gap: '1rem' }}>
4816 stevensc 92
                <div className="col-12 col-md-8 p-0">
93
                    <div className='feed'>
94
                        <div className='feed__body'>
95
                            {post.image && <img src={`/storage/type/post/code/${post.uuid}/filename/${post.image}`} className="Entradas" loading='lazy' />}
96
                        </div>
97
                        <div className='feed__body'>
98
                            <div className='feed__header'>
99
                                <div className='feed__info'>
100
                                    <h2>{post.title}</h2>
101
                                    <div className='time__elapse'>
102
                                        <p>{post.addedOn}</p>
103
                                        <AccessTimeIcon className='time__elapse-icon' />
4093 stevensc 104
                                    </div>
4816 stevensc 105
                                </div>
3761 stevensc 106
                            </div>
4816 stevensc 107
                            {post.description && htmlParsedText(post.description)}
3761 stevensc 108
                        </div>
4819 stevensc 109
                        <div className="px-3 d-flex align-items-center justify-content-end" style={{ gap: '5px' }}>
4818 stevensc 110
                            {!!externalShare && <span>{`${externalShare} enviados`}</span>}
4093 stevensc 111
                        </div>
4818 stevensc 112
                        <div className='feed__buttons'>
113
                            <InputOption
114
                                Icon={isLiked ? ThumbUpAltIcon : ThumbUpAltOutlinedIcon}
4819 stevensc 115
                                title={isLiked ? 'Ya no me gusta' : 'Me gusta'}
4818 stevensc 116
                                color={isLiked ? '#7405f9' : 'gray'}
117
                                onClick={() => handleLike(isLiked ? post.unlike_url : post.like_url)}
118
                            />
119
                            <InputOption
120
                                Icon={ChatOutlinedIcon}
4819 stevensc 121
                                title='Comentarios'
4818 stevensc 122
                                color='gray'
123
                                onClick={displayCommentSection}
124
                            />
125
                            <ExternalShareButton />
126
                        </div>
127
                        <div className='px-2 pb-2'>
128
                            <FeedCommentSection
129
                                feedId={post.uuid}
130
                                addUrl={post.comments_add_url}
131
                                comments={comments}
132
                                isShow={showComments}
133
                            />
134
                        </div>
3760 stevensc 135
                    </div>
1 www 136
                </div>
4098 stevensc 137
                <div className="col-12 col-md-4 p-0">
138
                    <HomeNews currentPost={post.uuid} />
4093 stevensc 139
                </div>
140
            </div>
141
        </div >
1 www 142
    )
143
}