Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 4294 | Rev 4309 | 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'
4281 stevensc 18
import { connect } from 'react-redux'
4285 stevensc 19
import withReactionList from './withReactionList'
4295 stevensc 20
import SharedContent from '../../../components/feed/SharedContent'
4265 stevensc 21
 
4271 stevensc 22
const Feed = ({
4280 stevensc 23
  feed_unique,
4271 stevensc 24
  feed_is_liked,
25
  feed_like_url,
26
  feed_unlike_url,
27
  feed_share_url,
28
  feed_share_external_url,
29
  feed_delete_url,
30
  feed_likes,
31
  owner_url,
32
  owner_image,
33
  owner_name,
34
  owner_description,
35
  owner_shared,
36
  owner_comments,
37
  owner_time_elapse,
38
  owner_file_image_preview,
39
  owner_file_video,
40
  owner_file_image,
41
  owner_file_document,
42
  comment_add_url,
4282 stevensc 43
  comments,
4295 stevensc 44
  shared_name,
45
  shared_image,
46
  shared_time_elapse,
47
  shared_description,
48
  shared_file_video,
49
  shared_file_image_preview,
50
  shared_file_image,
51
  shared_file_document,
4282 stevensc 52
  addNotification, // REDUX ACTION
53
  openShareModal, // REDUX ACTION
4271 stevensc 54
}) => {
4265 stevensc 55
 
4280 stevensc 56
  const [feedIsLiked, setFeedIsLiked] = useState(feed_is_liked);
57
  const [likesState, setLikesState] = useState(feed_likes);
58
  const [totalComments, setTotalComments] = useState(owner_comments);
59
  const [sharedState, setSharedState] = useState(owner_shared);
60
  const [showComments, setShowComments] = useState(false);
4271 stevensc 61
 
4280 stevensc 62
  const handleLike = (url) => {
63
    axios.post(url)
64
      .then(({ data: response }) => {
65
        if (!response.success) {
66
          addNotification({ style: "danger", msg: response.data })
67
          return
68
        }
69
        setLikesState(response.data.likes)
70
        setFeedIsLiked(!feedIsLiked);
71
      });
72
  };
4278 stevensc 73
 
4280 stevensc 74
  const handleShare = () => openShareModal(feed_share_url, shareModalTypes.SHARE, feedTypes.DASHBOARD, feed_unique)
4271 stevensc 75
 
4280 stevensc 76
  const displayCommentSection = () => setShowComments(!showComments)
4265 stevensc 77
 
4294 stevensc 78
  const ExternalShareButton = withReactionList(InputOption, feed_share_external_url, { Icon: SendOutlinedIcon, color: 'gray', title: 'Send' })
4285 stevensc 79
 
4280 stevensc 80
  return (
81
    <div className='feed'>
82
 
83
      <Feed.Header
84
        image={owner_image}
85
        name={owner_name}
86
        timeElapsed={owner_time_elapse}
4284 stevensc 87
        deleteUrl={feed_delete_url}
4280 stevensc 88
      />
89
 
4265 stevensc 90
      <div className='feed__body'>
4280 stevensc 91
        <Feed.Content
92
          ownerDescription={owner_description}
93
          ownerFileImage={owner_file_image}
94
          ownerFileImagepreview={owner_file_image_preview}
95
          ownerFileVideo={owner_file_video}
96
          ownerFileDocument={owner_file_document}
4295 stevensc 97
          sharedItem={{
98
            name: shared_name,
99
            image: shared_image,
100
            time_elapse: shared_time_elapse,
101
            description: shared_description,
102
            file_video: shared_file_video,
103
            file_image_preview: shared_file_image_preview,
104
            file_image: shared_file_image,
105
            file_document: shared_file_document
106
          }}
4280 stevensc 107
        />
4265 stevensc 108
      </div>
109
 
110
      <div className='feed__buttons'>
4280 stevensc 111
        <InputOption
112
          Icon={feedIsLiked ? ThumbUpAltIcon : ThumbUpAltOutlinedIcon}
113
          title='Like'
114
          color={feedIsLiked ? '#7405f9' : 'gray'}
4281 stevensc 115
          onClick={() => handleLike(feedIsLiked ? feed_unlike_url : feed_like_url)}
4280 stevensc 116
        />
117
        <InputOption
118
          Icon={ChatOutlinedIcon}
119
          title='Comment'
120
          color='gray'
121
          onClick={displayCommentSection}
122
        />
123
        <InputOption
124
          Icon={ShareOutlinedIcon}
125
          title='Share'
126
          color='gray'
127
          onClick={handleShare}
128
        />
4285 stevensc 129
        <ExternalShareButton />
4265 stevensc 130
      </div>
131
 
4280 stevensc 132
      <FeedCommentSection
133
        feedId={feed_unique}
134
        image={owner_image}
135
        addUrl={comment_add_url}
136
        updateTotalComments={(total) => setTotalComments(total)}
137
        comments={comments}
138
        isShow={showComments}
139
      />
140
 
4265 stevensc 141
    </div>
142
  )
143
}
144
 
4280 stevensc 145
const Content = ({
146
  ownerDescription,
147
  ownerFileImage,
148
  ownerFileImagepreview,
149
  ownerFileVideo,
4295 stevensc 150
  ownerFileDocument,
151
  sharedItem
4280 stevensc 152
}) => {
153
  return (
154
    <>
155
      <p>{parse(ownerDescription)}</p>
156
      {ownerFileImage &&
157
        <img src={ownerFileImage} className="Entradas" loading='lazy' />
158
      }
159
      {ownerFileVideo &&
160
        <video
161
          src={ownerFileVideo}
162
          controls
163
          poster={ownerFileImagepreview}
164
          preload="none"
165
        />
166
      }
167
      {ownerFileDocument &&
168
        <a href={ownerFileDocument} target="_blank" rel="noreferrer">
169
          Descargar
170
        </a>
171
      }
4295 stevensc 172
      {sharedItem.name &&
173
        <SharedContent
174
          name={sharedItem.name}
175
          image={sharedItem.image}
176
          timeElapse={sharedItem.time_elapse}
177
          description={sharedItem.description}
178
          fileVideo={sharedItem.file_video}
179
          fileImagePreview={sharedItem.file_image_preview}
180
          fileImage={sharedItem.file_image}
181
          fileDocument={sharedItem.file_document}
182
        />
183
      }
4280 stevensc 184
    </>
185
  )
186
}
187
 
188
const Header = ({
4284 stevensc 189
  image = '',
190
  name = '',
191
  timeElapsed = '',
192
  deleteUrl = ''
4280 stevensc 193
}) => {
194
  return (
195
    <div className='feed__header'>
196
      <Avatar
197
        imageUrl={image}
198
        name={name}
199
        size='xl'
200
      />
201
      <div className='feed__info'>
202
        <h2>{name}</h2>
203
        <div className='time__elapse'>
204
          <p>
205
            {timeElapsed}
206
          </p>
207
          <AccessTimeIcon className='time__elapse-icon' />
208
        </div>
209
      </div>
210
    </div>
211
  )
212
}
213
 
214
Feed.Content = Content
215
Feed.Header = Header
216
 
4281 stevensc 217
const mapDispatchToProps = {
218
  addNotification: (notification) => addNotification(notification),
4282 stevensc 219
  openShareModal: (postUrl, modalType, feedType) => openShareModal(postUrl, modalType, feedType),
4281 stevensc 220
};
221
 
222
export default connect(null, mapDispatchToProps)(Feed)