Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
3694 stevensc 1
import React, { useState } from 'react';
2
import { useDispatch, useSelector } from 'react-redux';
3
import { Box, Button, styled, Typography } from '@mui/material';
4
import ChatOutlined from '@mui/icons-material/ChatOutlined';
5
import SendOutlined from '@mui/icons-material/SendOutlined';
6
import ShareOutlined from '@mui/icons-material/ShareOutlined';
2838 stevensc 7
 
3694 stevensc 8
import { withReactions } from '@hocs';
9
import { feedTypes } from '@store/feed/feed.types';
10
import { shareModalTypes } from '@store/share-modal/shareModal.types';
11
import { openShareModal } from '@store/share-modal/shareModal.actions';
2838 stevensc 12
 
3694 stevensc 13
import Widget from '@components/UI/Widget';
14
import Comments from '../linkedin/comments/comments';
15
import Reactions from '../reactions/reactions';
16
import withExternalShare from '../linkedin/withExternalShare';
2838 stevensc 17
 
18
const Row = styled(Box)(({ theme }) => ({
19
  display: 'flex',
20
  padding: theme.spacing(0.5),
21
  justifyContent: 'space-between',
22
  alignItems: 'center',
23
  gap: theme.spacing(0.5)
3694 stevensc 24
}));
2838 stevensc 25
 
26
export default function FeedActions({ id }) {
27
  const {
28
    comments,
2846 stevensc 29
    comment_add_url: commentAddUrl,
30
    owner_comments: ownerComments,
2838 stevensc 31
    feed_reactions_url: reactionsUrl,
32
    feed_content_type: contentType,
33
    owner_shared: totalShared,
34
    feed_share_external_url: shareExternalUrl,
35
    feed_save_reaction_url: saveReactionUrl,
36
    feed_delete_reaction_url: deleteReactionUrl,
37
    feed_increment_external_counter_url: incrementExternalCounterUrl,
38
    feed_my_reaction: feedMyReaction,
39
    feed_reactions: feedReactions,
40
    owner_external_shared: ownerExternalShared,
41
    feed_share_url: feedShareUrl,
42
    feed_unique: feedUnique
3694 stevensc 43
  } = useSelector(({ feed }) => feed.feeds.byId[id]);
44
  const labels = useSelector(({ intl }) => intl.labels);
45
  const dispatch = useDispatch();
2838 stevensc 46
 
3694 stevensc 47
  const [totalComments, setTotalComments] = useState(ownerComments);
48
  const [reaction, setReaction] = useState(feedMyReaction);
49
  const [ownerReactions, setOwnerReactions] = useState(feedReactions);
50
  const [externalShare, setExternalShare] = useState(ownerExternalShared);
51
  const [showComments, setShowComments] = useState(false);
2838 stevensc 52
 
3694 stevensc 53
  const setTotalShares = (value) => setExternalShare(value);
2838 stevensc 54
 
3694 stevensc 55
  const toggleComments = () => setShowComments((prev) => !prev);
2838 stevensc 56
 
57
  const updateReactions = ({ reactions }, currentReaction) => {
3694 stevensc 58
    setOwnerReactions(reactions);
59
    setReaction(currentReaction);
60
  };
2838 stevensc 61
 
62
  const shareFeed = () => {
3694 stevensc 63
    dispatch(openShareModal(feedShareUrl, shareModalTypes.SHARE, feedTypes.DASHBOARD, feedUnique));
64
  };
2838 stevensc 65
 
3694 stevensc 66
  const ExternalShareButton = withExternalShare(Button, shareExternalUrl);
67
  const ReactionButton = withReactions(Button);
2838 stevensc 68
 
69
  return (
70
    <>
71
      <Row>
2899 stevensc 72
        <Reactions reactions={ownerReactions} reactionsUrl={reactionsUrl} />
2838 stevensc 73
 
74
        <Row>
2893 stevensc 75
          {totalComments ? (
2917 stevensc 76
            <Typography variant='overline'>
2893 stevensc 77
              {`${totalComments} ${labels.comments?.toLowerCase()}`}
78
            </Typography>
79
          ) : null}
2838 stevensc 80
 
2893 stevensc 81
          {totalShared ? (
2917 stevensc 82
            <Typography variant='overline'>
2893 stevensc 83
              {`${totalShared} ${labels.shared?.toLowerCase()}`}
84
            </Typography>
85
          ) : null}
2838 stevensc 86
 
2893 stevensc 87
          {externalShare ? (
2917 stevensc 88
            <Typography variant='overline'>
2893 stevensc 89
              {`${externalShare} ${labels.sends?.toLowerCase()}`}
90
            </Typography>
91
          ) : null}
2838 stevensc 92
        </Row>
93
      </Row>
3694 stevensc 94
      <Widget.Actions styles={{ display: contentType === 'fast-survey' ? 'none' : 'flex' }}>
2838 stevensc 95
        <ReactionButton
96
          currentReactionType={reaction}
97
          saveUrl={saveReactionUrl}
98
          deleteUrl={deleteReactionUrl}
99
          onReaction={updateReactions}
100
        />
101
        <Button onClick={toggleComments}>
102
          <ChatOutlined />
3694 stevensc 103
          <Typography sx={{ display: { xs: 'none', md: 'inline-flex' } }} variant='overline'>
3274 stevensc 104
            {labels.comment}
105
          </Typography>
2838 stevensc 106
        </Button>
107
        <Button onClick={shareFeed}>
108
          <ShareOutlined />
3694 stevensc 109
          <Typography sx={{ display: { xs: 'none', md: 'inline-flex' } }} variant='overline'>
3274 stevensc 110
            {labels.share}
111
          </Typography>
2838 stevensc 112
        </Button>
3694 stevensc 113
        <ExternalShareButton shorterUrl={incrementExternalCounterUrl} setValue={setTotalShares}>
2838 stevensc 114
          <SendOutlined />
3694 stevensc 115
          <Typography sx={{ display: { xs: 'none', md: 'inline-flex' } }} variant='overline'>
3274 stevensc 116
            {labels.send}
117
          </Typography>
2838 stevensc 118
        </ExternalShareButton>
119
      </Widget.Actions>
120
      <Box
121
        sx={{
2843 stevensc 122
          display: showComments ? 'block' : 'none',
123
          padding: 0.5
2838 stevensc 124
        }}
125
      >
2846 stevensc 126
        <Comments
127
          comments={comments}
128
          addUrl={commentAddUrl}
129
          onAdd={({ totalComments }) => setTotalComments(totalComments)}
130
        />
2838 stevensc 131
      </Box>
132
    </>
3694 stevensc 133
  );
2838 stevensc 134
}