Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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