Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
4265 stevensc 1
/* eslint-disable react/prop-types */
4280 stevensc 2
import React, { useState } from 'react'
4265 stevensc 3
import ThumbUpAltOutlinedIcon from '@mui/icons-material/ThumbUpAltOutlined'
4280 stevensc 4
import ThumbUpAltIcon from '@mui/icons-material/ThumbUpAlt'
4265 stevensc 5
import ChatOutlinedIcon from '@mui/icons-material/ChatOutlined'
6
import ShareOutlinedIcon from '@mui/icons-material/ShareOutlined'
7
import SendOutlinedIcon from '@mui/icons-material/SendOutlined'
8
import InputOption from './InputOption'
4270 stevensc 9
import parse from 'html-react-parser'
4265 stevensc 10
import Avatar from '../../../../shared/Avatar/Avatar'
4271 stevensc 11
import AccessTimeIcon from '@mui/icons-material/AccessTime';
4280 stevensc 12
import { axios } from '../../../../utils'
13
import { addNotification } from '../../../../redux/notification/notification.actions'
14
import { openShareModal } from '../../../../redux/share-modal/shareModal.actions'
15
import { shareModalTypes } from '../../../../redux/share-modal/shareModal.types'
16
import { feedTypes } from '../../../../redux/feed/feed.types'
17
import FeedCommentSection from '../../../components/feed/feed-comment/FeedCommentSection'
4265 stevensc 18
 
4271 stevensc 19
const Feed = ({
4280 stevensc 20
  feed_unique,
4271 stevensc 21
  feed_is_liked,
22
  feed_like_url,
23
  feed_unlike_url,
24
  feed_share_url,
25
  feed_share_external_url,
26
  feed_delete_url,
27
  feed_likes,
28
  owner_url,
29
  owner_image,
30
  owner_name,
31
  owner_description,
32
  owner_shared,
33
  owner_comments,
34
  owner_time_elapse,
35
  owner_file_image_preview,
36
  owner_file_video,
37
  owner_file_image,
38
  owner_file_document,
39
  comment_add_url,
40
  comments
41
}) => {
4265 stevensc 42
 
4280 stevensc 43
  const [feedIsLiked, setFeedIsLiked] = useState(feed_is_liked);
44
  const [likesState, setLikesState] = useState(feed_likes);
45
  const [totalComments, setTotalComments] = useState(owner_comments);
46
  const [sharedState, setSharedState] = useState(owner_shared);
47
  const [showComments, setShowComments] = useState(false);
4271 stevensc 48
 
4280 stevensc 49
  const handleLike = (url) => {
50
    axios.post(url)
51
      .then(({ data: response }) => {
52
        if (!response.success) {
53
          addNotification({ style: "danger", msg: response.data })
54
          return
55
        }
56
        setLikesState(response.data.likes)
57
        setFeedIsLiked(!feedIsLiked);
58
      });
59
  };
4278 stevensc 60
 
4280 stevensc 61
  const handleShare = () => openShareModal(feed_share_url, shareModalTypes.SHARE, feedTypes.DASHBOARD, feed_unique)
4271 stevensc 62
 
4280 stevensc 63
  const displayCommentSection = () => setShowComments(!showComments)
4265 stevensc 64
 
4280 stevensc 65
  return (
66
    <div className='feed'>
67
 
68
      <Feed.Header
69
        image={owner_image}
70
        name={owner_name}
71
        timeElapsed={owner_time_elapse}
72
      />
73
 
4265 stevensc 74
      <div className='feed__body'>
4280 stevensc 75
        <Feed.Content
76
          ownerDescription={owner_description}
77
          ownerFileImage={owner_file_image}
78
          ownerFileImagepreview={owner_file_image_preview}
79
          ownerFileVideo={owner_file_video}
80
          ownerFileDocument={owner_file_document}
81
        />
4265 stevensc 82
      </div>
83
 
84
      <div className='feed__buttons'>
4280 stevensc 85
        <InputOption
86
          Icon={feedIsLiked ? ThumbUpAltIcon : ThumbUpAltOutlinedIcon}
87
          title='Like'
88
          color={feedIsLiked ? '#7405f9' : 'gray'}
89
          onClick={() => handleLike(feedIsLiked ? feed_like_url : feed_unlike_url)}
90
        />
91
        <InputOption
92
          Icon={ChatOutlinedIcon}
93
          title='Comment'
94
          color='gray'
95
          onClick={displayCommentSection}
96
        />
97
        <InputOption
98
          Icon={ShareOutlinedIcon}
99
          title='Share'
100
          color='gray'
101
          onClick={handleShare}
102
        />
4278 stevensc 103
        <InputOption Icon={SendOutlinedIcon} title='Send' color='gray' />
4265 stevensc 104
      </div>
105
 
4280 stevensc 106
      <FeedCommentSection
107
        feedId={feed_unique}
108
        image={owner_image}
109
        addUrl={comment_add_url}
110
        updateTotalComments={(total) => setTotalComments(total)}
111
        comments={comments}
112
        isShow={showComments}
113
      />
114
 
4265 stevensc 115
    </div>
116
  )
117
}
118
 
4280 stevensc 119
const Content = ({
120
  ownerDescription,
121
  ownerFileImage,
122
  ownerFileImagepreview,
123
  ownerFileVideo,
124
  ownerFileDocument
125
}) => {
126
  return (
127
    <>
128
      <p>{parse(ownerDescription)}</p>
129
      {ownerFileImage &&
130
        <img src={ownerFileImage} className="Entradas" loading='lazy' />
131
      }
132
      {ownerFileVideo &&
133
        <video
134
          src={ownerFileVideo}
135
          controls
136
          poster={ownerFileImagepreview}
137
          preload="none"
138
        />
139
      }
140
      {ownerFileDocument &&
141
        <a href={ownerFileDocument} target="_blank" rel="noreferrer">
142
          Descargar
143
        </a>
144
      }
145
    </>
146
  )
147
}
148
 
149
const Header = ({
150
  image,
151
  name,
152
  timeElapsed
153
}) => {
154
  return (
155
    <div className='feed__header'>
156
      <Avatar
157
        imageUrl={image}
158
        name={name}
159
        size='xl'
160
      />
161
      <div className='feed__info'>
162
        <h2>{name}</h2>
163
        <div className='time__elapse'>
164
          <p>
165
            {timeElapsed}
166
          </p>
167
          <AccessTimeIcon className='time__elapse-icon' />
168
        </div>
169
      </div>
170
    </div>
171
  )
172
}
173
 
174
Feed.Content = Content
175
Feed.Header = Header
176
 
4265 stevensc 177
export default Feed