Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev Autor Línea Nro. Línea
16655 stevensc 1
import React, { useEffect, useState } from 'react'
16650 stevensc 2
import { deleteFeed } from '../../redux/feed/feed.actions'
3
import DeleteModal from '../../shared/DeleteModal'
4
import CommentSection from './CommentSection'
5
import parse from 'html-react-parser'
6
import styles from './feeds.module.scss'
16655 stevensc 7
import Options from '../../shared/options/Options'
16650 stevensc 8
 
9
const FeedTemplate = ({ feed }) => {
10
  const [showDeleteModal, setShowDeleteModal] = useState(false)
16655 stevensc 11
  const [options, setOptions] = useState([])
16650 stevensc 12
 
16655 stevensc 13
  const toggleModal = () => {
14
    setShowDeleteModal(!showDeleteModal)
15
  }
16650 stevensc 16
 
16655 stevensc 17
  useEffect(() => {
18
    if (feed.feed_delete_url) {
19
      setOptions((prevOptions) =>
20
        prevOptions.concat({ label: 'Borrar', action: toggleModal })
16650 stevensc 21
      )
22
    }
16655 stevensc 23
  }, [])
16650 stevensc 24
 
25
  return (
26
    <>
27
      <article className={styles.feed}>
28
        <FeedTemplate.Header
29
          name={feed.owner_name}
30
          image={feed.owner_image}
31
          profileUrl={feed.owner_url}
32
          timeElapsed={feed.owner_time_elapse}
16655 stevensc 33
          options={options}
16650 stevensc 34
        />
16655 stevensc 35
        <FeedTemplate.Content
36
          description={feed.owner_description}
37
          image={feed.owner_file_image}
38
          previewImage={feed.owner_file_image_preview}
39
          video={feed.owner_file_video}
40
          document={feed.owner_file_document}
41
          feedShared={{
42
            owner_description: feed.shared_description,
43
            owner_file_image: feed.shared_file_image,
44
            owner_file_image_preview: feed.shared_file_image_preview,
45
            owner_file_video: feed.shared_file_video,
46
            owner_file_document: feed.shared_file_document,
16656 stevensc 47
            owner_time_elapse: feed.shared_time_elapse
16655 stevensc 48
          }}
49
        />
16650 stevensc 50
        <CommentSection
51
          comments_link_add={feed.comment_add_url}
52
          comments={feed.comments}
53
          owner_image={feed.owner_image}
54
          owner_url={feed.owner_url}
55
          setComment={setCommentState}
56
        />
57
      </article>
58
      <DeleteModal
59
        url={feed.feed_delete_url}
60
        isOpen={showDeleteModal}
61
        closeModal={closeModal}
62
        title="Esta seguro de borrar esta publicación?"
63
        action={() => deleteFeed(feed.feed_unique)}
64
        message="La publicación ha sido borrada"
65
      />
66
    </>
67
  )
68
}
69
 
16655 stevensc 70
const Header = ({ image, name, profileUrl, timeElapsed, options = null }) => {
16650 stevensc 71
  return (
72
    <div className={styles.feed_header}>
73
      <img src={image} alt={`${name} profile image`} />
74
 
75
      <div className={styles.feed_info}>
76
        <a href={profileUrl}>
77
          <h2>{name}</h2>
78
        </a>
79
        <span>{timeElapsed}</span>
80
      </div>
81
 
16655 stevensc 82
      {options && <Options options={options} />}
83
    </div>
84
  )
85
}
86
 
87
const Body = ({
88
  description,
89
  image,
90
  video,
91
  previewImage,
92
  document,
93
  feedShared
94
}) => {
95
  const [isReadMoreActive, setIsReadMoreActive] = useState(false)
96
 
97
  const readMoreHandler = () => {
98
    setIsReadMoreActive(!isReadMoreActive)
99
  }
100
 
101
  const htmlParsedText = (fullStringText) => {
102
    const fullText = parse(fullStringText)
103
 
104
    if (fullStringText.length > 500) {
105
      const shortenedString = fullStringText.substr(0, 500)
106
      const shortenedText = parse(`${shortenedString}... `)
107
 
108
      return (
109
        <>
110
          {isReadMoreActive ? fullText : shortenedText}
111
          <button className="btn py-0 px-1" onClick={readMoreHandler}>
112
            {isReadMoreActive ? ' Leer menos' : ' Leer más'}
113
          </button>
114
        </>
115
      )
116
    }
117
 
118
    return fullText
119
  }
120
 
121
  return (
122
    <div className={styles.feed_content}>
123
      {description && htmlParsedText(description)}
124
      {image && (
125
        <div className="img-container">
126
          <img src={image} alt="" />
127
          <img src={image} alt="" />
16650 stevensc 128
        </div>
129
      )}
16655 stevensc 130
      {video && (
131
        <video src={video} preload="none" poster={previewImage} controls />
132
      )}
133
      {document && (
134
        <a href={document} target="_blank" rel="noreferrer">
135
          Descargar
136
        </a>
137
      )}
138
      {feedShared && <FeedTemplate feed={feedShared} />}
16650 stevensc 139
    </div>
140
  )
141
}
142
 
143
FeedTemplate.Header = Header
16655 stevensc 144
FeedTemplate.Content = Body
16650 stevensc 145
 
146
export default React.memo(FeedTemplate)