Proyectos de Subversion LeadersLinked - SPA

Rev

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

import React, { useState } from 'react'
import { useSelector } from 'react-redux'
import { SendOutlined, ChatOutlined } from '@mui/icons-material'
import parse from 'html-react-parser'

import useMobile from '@app/hooks/useMobile'
import withExternalShare from '../dashboard/linkedin/withExternalShare'
import withReactions from '@app/hocs/withReaction'

import Button from '../UI/buttons/Buttons'
import WidgetWrapper from '../widgets/WidgetLayout'
import Paraphrase from '../UI/Paraphrase'
import PostFile from './PostFile'
import FeedReactions from '../dashboard/linkedin/feed/FeedReactions'
import MobileShare from '../dashboard/linkedin/mobile-share/MobileShare'
import CommentForm from '../dashboard/linkedin/comments/comment-form'
import CommentsList from '../dashboard/linkedin/comments/comment-list'

function PostCard({
  post,
  addComment,
  updateReactions,
  updateMyReaction,
  updateTotalShare
}) {
  const {
    reactions,
    my_reaction,
    reactions_url,
    save_reaction_url,
    delete_reaction_url,
    total_share_external,
    image,
    title,
    description,
    file,
    type,
    comments,
    share_external_url,
    share_increment_external_counter_url
  } = post
  const [showComments, setShowComments] = useState(false)
  const labels = useSelector(({ intl }) => intl.labels)

  const isMobile = useMobile()

  const displayCommentSection = () => {
    setShowComments(!showComments)
  }

  const ExternalShareButton = withExternalShare(Button, post.share_external_url)

  const ReactionButton = withReactions(Button)

  return (
    <WidgetWrapper>
      <img
        src={image}
        style={{
          width: '100%',
          maxHeight: '450px',
          objectFit: 'contain'
        }}
      />
      <WidgetWrapper.Body>
        <h2>{title}</h2>
        <Paraphrase>{description}</Paraphrase>
        <PostFile file={file} type={type} />
      </WidgetWrapper.Body>

      <div className='d-flex justify-content-between align-items-center px-3'>
        <FeedReactions reactions={reactions} reactionsUrl={reactions_url} />

        {!!total_share_external && (
          <span>{`${total_share_external} ${labels.sends?.toLowerCase()}`}</span>
        )}
      </div>

      <WidgetWrapper.Actions>
        <ReactionButton
          currentReactionType={my_reaction}
          saveUrl={save_reaction_url}
          deleteUrl={delete_reaction_url}
          onReaction={({ reactions }, currentReaction) => {
            updateReactions(reactions)
            updateMyReaction(currentReaction)
          }}
        />

        <Button onClick={displayCommentSection}>
          <ChatOutlined style={{ color: 'gray' }} />
          {labels.comment}
        </Button>

        {!isMobile ? (
          <ExternalShareButton
            shorterUrl={share_increment_external_counter_url}
            setValue={updateTotalShare}
          >
            <SendOutlined style={{ color: 'gray' }} />
            {labels.send}
          </ExternalShareButton>
        ) : (
          <MobileShare
            shareData={{
              title: 'Leaders Linked',
              text: parse(description ?? ''),
              url: share_external_url
            }}
          >
            <SendOutlined />
            {labels.send}
          </MobileShare>
        )}
      </WidgetWrapper.Actions>

      {showComments && (
        <div className='px-3 pb-2'>
          <CommentForm onSubmit={addComment} />
          <CommentsList comments={comments} />
        </div>
      )}
    </WidgetWrapper>
  )
}

export default PostCard