Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
5814 stevensc 1
/* eslint-disable react/display-name */
5737 stevensc 2
import React, { useEffect, useRef, useState } from 'react'
5577 stevensc 3
import RecommendIcon from '@mui/icons-material/Recommend'
5747 stevensc 4
import FavoriteIcon from '@mui/icons-material/FavoriteTwoTone'
5577 stevensc 5
import VolunteerActivismIcon from '@mui/icons-material/VolunteerActivism'
5746 stevensc 6
import EmojiEmotionsIcon from '@mui/icons-material/EmojiEmotions'
7
import TungstenIcon from '@mui/icons-material/Tungsten'
5781 stevensc 8
import { debounce } from '../../../utils'
5737 stevensc 9
import useOutsideClick from '../../../hooks/useOutsideClick'
5574 stevensc 10
 
5814 stevensc 11
const withReactions = (Component, { onSelect, onDelete, myReaction }) => {
12
  return () => {
5816 stevensc 13
    const [settedReaction, setSettedReaction] = useState(null)
5814 stevensc 14
    const [showReactions, setShowReactions] = useState(false)
15
    const rectionBtn = useRef(null)
16
    const outsideClick = useOutsideClick(rectionBtn)
5667 stevensc 17
 
5814 stevensc 18
    const reactionsOptions = [
19
      {
20
        type: 'r',
21
        icon: RecommendIcon,
22
        color: '#7405f9',
5815 stevensc 23
        label: 'Me gusta',
5814 stevensc 24
      },
25
      {
26
        type: 's',
27
        icon: VolunteerActivismIcon,
28
        color: '#6495ED',
5815 stevensc 29
        label: 'Dar apoyo',
5814 stevensc 30
      },
31
      {
32
        type: 'l',
33
        icon: FavoriteIcon,
34
        color: '#DF704D',
5815 stevensc 35
        label: 'Me encanta',
5814 stevensc 36
      },
37
      {
38
        type: 'i',
39
        icon: TungstenIcon,
40
        color: '#F5BB5C',
5815 stevensc 41
        label: 'Me interesa',
5814 stevensc 42
      },
43
      {
44
        type: 'f',
45
        icon: EmojiEmotionsIcon,
46
        color: '#FF7F50',
5815 stevensc 47
        label: 'Me divierte',
5814 stevensc 48
      },
49
    ]
5667 stevensc 50
 
5814 stevensc 51
    const onHover = debounce(() => setShowReactions(true), 500)
5734 stevensc 52
 
5814 stevensc 53
    const onUnhover = debounce(() => setShowReactions(false), 500)
5741 stevensc 54
 
5814 stevensc 55
    useEffect(() => {
56
      if (outsideClick) setShowReactions(false)
57
    }, [outsideClick])
5737 stevensc 58
 
5816 stevensc 59
    useEffect(() => {
60
      const currentReaction = reactionsOptions.find(
61
        (reaction) => reaction.type === myReaction
62
      )
63
      setSettedReaction(currentReaction)
5817 stevensc 64
    }, [])
5816 stevensc 65
 
5814 stevensc 66
    return (
5817 stevensc 67
      <Component
5814 stevensc 68
        onMouseOver={onHover}
69
        onMouseOut={onUnhover}
70
        ref={rectionBtn}
5817 stevensc 71
        Icon={settedReaction ? settedReaction.icon : RecommendIcon}
72
        color={settedReaction ? settedReaction.color : '#626d7a'}
5853 stevensc 73
        title={settedReaction ? settedReaction.label : ''}
5817 stevensc 74
        onClick={() => {
5818 stevensc 75
          settedReaction ? onDelete() : onSelect(reactionsOptions[0].type)
5817 stevensc 76
        }}
5814 stevensc 77
      >
78
        <div className={`reactions ${showReactions ? 'active' : ''}`}>
79
          {reactionsOptions.map((reaction) => {
5815 stevensc 80
            const { icon: Icon, color, type, label } = reaction
5814 stevensc 81
            return (
82
              <button
83
                key={type}
84
                onClick={(e) => {
85
                  e.stopPropagation()
5818 stevensc 86
                  onSelect(type)
5814 stevensc 87
                }}
5815 stevensc 88
                title={label}
5814 stevensc 89
              >
90
                <Icon style={{ color }} />
91
              </button>
92
            )
93
          })}
94
        </div>
5817 stevensc 95
      </Component>
5814 stevensc 96
    )
97
  }
5577 stevensc 98
}
5814 stevensc 99
 
100
export default withReactions