import React, { useCallback, useContext } from 'react'; import { CanonicalEmoji, Emoji as EmojiCharacter } from 'interweave-emoji'; import { Context } from './Context'; export interface EmojiProps { active: boolean; emoji: CanonicalEmoji; onEnter: (emoji: CanonicalEmoji, event: React.MouseEvent) => void; onLeave: (emoji: CanonicalEmoji, event: React.MouseEvent) => void; onSelect: (emoji: CanonicalEmoji, event: React.MouseEvent) => void; } export function Emoji({ active, emoji, onEnter, onLeave, onSelect }: EmojiProps) { const { classNames, emojiPadding, emojiPath, emojiSize, emojiSource } = useContext(Context); const dimension = emojiPadding + emojiPadding + emojiSize; const className = [classNames.emoji]; if (active) { className.push(classNames.emojiActive); } // Handlers const handleClick = useCallback( (event: React.MouseEvent) => { event.stopPropagation(); onSelect(emoji, event); }, [emoji, onSelect], ); const handleEnter = useCallback( (event: React.MouseEvent) => { event.stopPropagation(); onEnter(emoji, event); }, [emoji, onEnter], ); const handleLeave = useCallback( (event: React.MouseEvent) => { event.stopPropagation(); onLeave(emoji, event); }, [emoji, onLeave], ); return ( ); }