Proyectos de Subversion LeadersLinked - Backend

Rev

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