Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
5737 stevensc 1
import React, { useEffect, useRef, useState } from 'react'
5577 stevensc 2
import RecommendIcon from '@mui/icons-material/Recommend'
5747 stevensc 3
import FavoriteIcon from '@mui/icons-material/FavoriteTwoTone'
5577 stevensc 4
import VolunteerActivismIcon from '@mui/icons-material/VolunteerActivism'
5746 stevensc 5
import EmojiEmotionsIcon from '@mui/icons-material/EmojiEmotions'
6
import TungstenIcon from '@mui/icons-material/Tungsten'
5781 stevensc 7
import { debounce } from '../../../utils'
5737 stevensc 8
import useOutsideClick from '../../../hooks/useOutsideClick'
5574 stevensc 9
 
5781 stevensc 10
export const ReactionButton = ({ onSelect, onDelete, myReaction }) => {
5772 stevensc 11
  const [settedReaction, setSettedReaction] = useState(myReaction)
5734 stevensc 12
  const [showReactions, setShowReactions] = useState(false)
5737 stevensc 13
  const rectionBtn = useRef(null)
14
  const outsideClick = useOutsideClick(rectionBtn)
5667 stevensc 15
 
5778 stevensc 16
  const reactionsOptions = [
5667 stevensc 17
    {
18
      type: 'r',
5739 stevensc 19
      icon: <RecommendIcon style={{ color: '#7405f9' }} />,
5667 stevensc 20
    },
21
    {
5746 stevensc 22
      type: 's',
5747 stevensc 23
      icon: <VolunteerActivismIcon style={{ color: '#6495ED' }} />,
5667 stevensc 24
    },
25
    {
5746 stevensc 26
      type: 'l',
27
      icon: <FavoriteIcon style={{ color: '#DF704D' }} />,
5667 stevensc 28
    },
5746 stevensc 29
    {
30
      type: 'i',
31
      icon: (
32
        <TungstenIcon
33
          style={{ color: '#F5BB5C', transform: 'rotate(180deg)' }}
34
        />
35
      ),
36
    },
37
    {
38
      type: 'f',
5747 stevensc 39
      icon: <EmojiEmotionsIcon style={{ color: '#FF7F50' }} />,
5746 stevensc 40
    },
5667 stevensc 41
  ]
42
 
5781 stevensc 43
  const selectReactionHandler = async (type) => {
44
    const res = await onSelect(type)
5790 stevensc 45
    console.log(res)
5781 stevensc 46
    if (res) setSettedReaction(type)
5771 stevensc 47
  }
48
 
5781 stevensc 49
  const deleteReactionHandler = async () => {
50
    const res = await onDelete()
51
    if (res) setSettedReaction('')
5778 stevensc 52
  }
53
 
5741 stevensc 54
  const onHover = debounce(() => setShowReactions(true), 500)
5734 stevensc 55
 
5778 stevensc 56
  const onUnhover = debounce(() => setShowReactions(false), 500)
5741 stevensc 57
 
5737 stevensc 58
  useEffect(() => {
5781 stevensc 59
    if (outsideClick) setShowReactions(false)
5737 stevensc 60
  }, [outsideClick])
61
 
5577 stevensc 62
  return (
5738 stevensc 63
    <button
64
      type="button"
65
      className="reaction-btn"
5743 stevensc 66
      onMouseOver={onHover}
67
      onMouseOut={onUnhover}
5778 stevensc 68
      onClick={() => {
5781 stevensc 69
        settedReaction
70
          ? deleteReactionHandler()
71
          : selectReactionHandler(reactionsOptions[0].type)
5778 stevensc 72
      }}
5738 stevensc 73
      ref={rectionBtn}
74
    >
5748 stevensc 75
      {settedReaction ? (
5778 stevensc 76
        reactionsOptions.find((reaction) => reaction.type === settedReaction)
77
          .icon
5748 stevensc 78
      ) : (
79
        <RecommendIcon style={{ color: '#626d7a' }} />
5737 stevensc 80
      )}
5734 stevensc 81
      <div className={`reactions ${showReactions ? 'active' : ''}`}>
5778 stevensc 82
        {reactionsOptions.map((reaction) => (
5669 stevensc 83
          <button
84
            key={reaction.type}
5789 stevensc 85
            onClick={(e) => {
86
              e.stopPropagation()
87
              selectReactionHandler(reaction.type)
88
            }}
5669 stevensc 89
          >
90
            {reaction.icon}
91
          </button>
92
        ))}
5577 stevensc 93
      </div>
94
    </button>
95
  )
96
}