import React, { useContext } from 'react'; import { Text, View } from 'react-native'; import Touchable from './Touchable'; import { CustomIcon } from '../CustomIcon'; import styles from './styles'; import Emoji from './Emoji'; import { BUTTON_HIT_SLOP } from './utils'; import { themes } from '../../lib/constants'; import { TSupportedThemes, useTheme } from '../../theme'; import MessageContext from './Context'; import { TGetCustomEmoji } from '../../definitions/IEmoji'; interface IReaction { _id: string; emoji: string; usernames: string[]; } interface IMessageReaction { reaction: IReaction; getCustomEmoji: TGetCustomEmoji; theme: TSupportedThemes; } interface IMessageReactions { reactions?: IReaction[]; getCustomEmoji: TGetCustomEmoji; } const AddReaction = React.memo(({ theme }: { theme: TSupportedThemes }) => { const { reactionInit } = useContext(MessageContext); return ( ); }); const Reaction = React.memo(({ reaction, getCustomEmoji, theme }: IMessageReaction) => { const { onReactionPress, onReactionLongPress, user } = useContext(MessageContext); const reacted = reaction.usernames.findIndex((item: string) => item === user.username) !== -1; return ( onReactionPress(reaction.emoji)} onLongPress={onReactionLongPress} testID={`message-reaction-${reaction.emoji}`} style={[ styles.reactionButton, { backgroundColor: reacted ? themes[theme].bannerBackground : themes[theme].backgroundColor } ]} background={Touchable.Ripple(themes[theme].bannerBackground)} hitSlop={BUTTON_HIT_SLOP} > {reaction.usernames.length} ); }); const Reactions = React.memo(({ reactions, getCustomEmoji }: IMessageReactions) => { const { theme } = useTheme(); if (!Array.isArray(reactions) || reactions.length === 0) { return null; } return ( {reactions.map((reaction, index) => ( ))} ); }); Reaction.displayName = 'MessageReaction'; Reactions.displayName = 'MessageReactions'; AddReaction.displayName = 'MessageAddReaction'; export default Reactions;