import React, { useState, useEffect, useRef } from 'react' import Tooltip from './tooltip.js' import styles from './reactButton.module.css' import reactions from '../data/reactions.json' function useOutsideAlerter(ref, action) { useEffect(() => { function handleClickOutside(event) { if (ref.current && !ref.current.contains(event.target)) { action() } } document.addEventListener('mousedown', handleClickOutside) return () => { document.removeEventListener('mousedown', handleClickOutside) } }, [ref]) } function ExistingReacts({ existingReacts, onClick, uid }) { return (
Reakció
{existingReacts && Object.keys(existingReacts) .sort((akey, bkey) => { const a = existingReacts[akey] const b = existingReacts[bkey] return a.length < b.length }) .map((key) => { const currReact = existingReacts[key] const react = reactions[key] if (!react) { return null } return (
{ e.stopPropagation() onClick(key, currReact.includes(uid)) }} > {react.emoji} {currReact.length}
) })}
) } function RenderEmojis({ onClick }) { const [search, setSearch] = useState('') return ( <> { setSearch(event.target.value) }} /> {Object.keys(reactions).map((key) => { const reaction = reactions[key] if (!key.includes(search.toLowerCase())) { return null } return (
{ onClick(key) }} > {reaction.emoji}
) })} ) } export default function ReactButton({ onClick, existingReacts, uid }) { const [opened, setOpened] = useState(false) const wrapperRef = useRef(null) useOutsideAlerter(wrapperRef, () => { setOpened(false) }) return (
{ setOpened(true) }} onMouseLeave={() => { // setOpened(false) }} > ( { onClick(key, isDelete) setOpened(false) }} existingReacts={existingReacts} /> )} >
{ // setOpened(false) onClick(e) }} />
) }