Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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