Proyectos de Subversion LeadersLinked - Backend

Rev

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

import React, { useState } from 'react'
import { deleteFeed } from '../../redux/feed/feed.actions'
import DeleteModal from '../../shared/DeleteModal'
import CommentSection from './CommentSection'
import parse from 'html-react-parser'
import styles from './feeds.module.scss'

const FeedTemplate = ({ feed }) => {
  const [showDeleteModal, setShowDeleteModal] = useState(false)
  const [commentState, setCommentState] = useState(feed.owner_comments)
  const [isReadMoreActive, setIsReadMoreActive] = useState(false)

  const closeModal = () => setShowDeleteModal(false)

  const readMoreHandler = () => setIsReadMoreActive(!isReadMoreActive)

  const htmlParsedText = (fullStringText) => {
    const fullText = parse(fullStringText)
    if (fullStringText.length > 500) {
      const shortenedString = fullStringText.substr(0, 500)
      const shortenedText = parse(`${shortenedString}... `)
      return (
        <React.Fragment>
          {isReadMoreActive ? fullText : shortenedText}
          <button className="btn py-0 px-1" onClick={readMoreHandler}>
            {isReadMoreActive ? ' Leer menos' : ' Leer más'}
          </button>
        </React.Fragment>
      )
    } else {
      return fullText
    }
  }

  return (
    <>
      <article className={styles.feed}>
        <FeedTemplate.Header
          name={feed.owner_name}
          image={feed.owner_image}
          profileUrl={feed.owner_url}
          timeElapsed={feed.owner_time_elapse}
          deleteUrl={feed.feed_delete_url}
        />
        <div className="job_descp">
          {feed.owner_description && (
            <div className="show-read-more">
              {htmlParsedText(feed.owner_description)}
            </div>
          )}
          {feed.owner_file_image && (
            <img src={feed.owner_file_image} className="Entradas" />
          )}
          {feed.owner_file_video && (
            <video
              src={feed.owner_file_video}
              controls
              poster={feed.owner_file_image_preview}
              preload="none"
            />
          )}
          {feed.owner_file_document && (
            <a href={feed.owner_file_document} target="_blank" rel="noreferrer">
              Descargar
            </a>
          )}
          {feed.shared_name && (
            <div className="shared-post-bar">
              <div className="post-bar">
                <div className="post_topbar">
                  <div className="usy-dt">
                    <img
                      src={feed.shared_image}
                      alt=""
                      style={{ width: '50px', height: 'auto' }}
                    />
                    <div className="usy-name">
                      <h3>{feed.shared_name}</h3>
                      <span>{feed.shared_time_elapse}</span>
                    </div>
                  </div>
                </div>
                <div className="job_descp">
                  <div className="show-read-more">
                    {htmlParsedText(feed.shared_description)}
                  </div>
                  {feed.shared_file_image && (
                    <img src={feed.shared_file_image} className="Entradas" />
                  )}
                  {feed.shared_file_video && (
                    <video
                      src={feed.shared_file_video}
                      controls
                      poster={feed.shared_file_image_preview}
                      preload="none"
                    />
                  )}
                  {feed.shared_file_document && (
                    <a
                      href={feed.shared_file_document}
                      target="_blank"
                      rel="noreferrer"
                    >
                      Descargar
                    </a>
                  )}
                </div>
              </div>
            </div>
          )}
        </div>

        <div className="job-status-bar">
          <ul
            className="d-flex align-items-center justify-content-start"
            style={{ gap: '1rem', margin: '10px 0', padding: '0' }}
          >
            <li>
              <i className="btn-indicator fa fa-comments mr-1" />
              {commentState}
            </li>
            <li>
              <i className="btn-indicator fa fa-share flip-horizontal ps-1" />
              {feed.owner_shared}
            </li>
          </ul>
        </div>
        <CommentSection
          comments_link_add={feed.comment_add_url}
          comments={feed.comments}
          owner_image={feed.owner_image}
          owner_url={feed.owner_url}
          setComment={setCommentState}
        />
      </article>
      <DeleteModal
        url={feed.feed_delete_url}
        isOpen={showDeleteModal}
        closeModal={closeModal}
        title="Esta seguro de borrar esta publicación?"
        action={() => deleteFeed(feed.feed_unique)}
        message="La publicación ha sido borrada"
      />
    </>
  )
}

const Header = ({ image, name, profileUrl, timeElapsed, deleteUrl }) => {
  const [displayOption, setDisplayOption] = useState(false)

  return (
    <div className={styles.feed_header}>
      <img src={image} alt={`${name} profile image`} />

      <div className={styles.feed_info}>
        <a href={profileUrl}>
          <h2>{name}</h2>
        </a>
        <span>{timeElapsed}</span>
      </div>

      {deleteUrl && (
        <div className="cursor-pointer d-flex align-items-center">
          <i
            className="fa fa-ellipsis-v"
            onClick={() => setDisplayOption(!displayOption)}
            style={{ fontSize: '1.5rem' }}
          />
          <ul
            className={`my-dropdown-menu dropdown-menu-end ${
              displayOption ? 'show' : ''
            }`}
          >
            <li className="dropdown-item">
              <button className="btn" type="button">
                <i className="fa fa-trash pe-2" />
                Borrar
              </button>
            </li>
          </ul>
        </div>
      )}
    </div>
  )
}

FeedTemplate.Header = Header

export default React.memo(FeedTemplate)