import React, { useMemo } from 'react'; import { StyleSheet, useColorScheme, View } from 'react-native'; import { FlatList } from 'react-native-gesture-handler'; import { EmojiPickerList } from './EmojiPickerList'; import { useMessageOwnReactions } from './hooks/useMessageOwnReactions'; import { ReactionButton } from './ReactionButton'; import { MessageContextValue } from '../../contexts/messageContext/MessageContext'; import { MessagesContextValue, useMessagesContext, } from '../../contexts/messagesContext/MessagesContext'; import { useOwnCapabilitiesContext } from '../../contexts/ownCapabilitiesContext/OwnCapabilitiesContext'; import { useTheme } from '../../contexts/themeContext/ThemeContext'; import { useStableCallback } from '../../hooks'; import { Plus } from '../../icons/plus'; import { NativeHandlers } from '../../native'; import { scheduleActionOnClose } from '../../state-store'; import { primitives } from '../../theme'; import { ReactionData } from '../../utils/utils'; import { Button } from '../ui'; import { BottomSheetModal } from '../UIComponents'; export type MessageReactionPickerProps = Pick & Pick; export type ReactionPickerItemType = ReactionData & { onSelectReaction: (type: string) => void; ownReactionTypes: string[]; }; const keyExtractor = (item: ReactionPickerItemType) => item.type; const renderItem = ({ index, item }: { index: number; item: ReactionPickerItemType }) => ( ); export const MessageReactionPickerList = ({ onSelectReaction, }: { onSelectReaction: (type: string) => void; }) => { const ownReactionTypes = useMessageOwnReactions(); const { supportedReactions } = useMessagesContext(); const { theme: { messageMenu: { reactionPicker: { contentContainer }, }, }, } = useTheme(); const styles = useStyles(); const reactions: ReactionPickerItemType[] = useMemo( () => supportedReactions ?.filter((reaction) => reaction.isMain) ?.map((reaction) => ({ ...reaction, onSelectReaction, ownReactionTypes, })) ?? [], [onSelectReaction, ownReactionTypes, supportedReactions], ); return ( ); }; export const EmojiViewerButton = ({ onSelectReaction, }: { onSelectReaction: (type: string) => void; }) => { const styles = useStyles(); const [emojiViewerOpened, setEmojiViewerOpened] = React.useState(false); const { theme: { messageMenu: { reactionPicker: { emojiViewerButton }, }, }, } = useTheme(); const handleSelectReaction = useStableCallback((type: string) => { setEmojiViewerOpened(false); onSelectReaction(type); }); const onOpenEmojiViewer = useStableCallback(() => { NativeHandlers.triggerHaptic('impactLight'); setEmojiViewerOpened(true); }); const closeModal = useStableCallback(() => setEmojiViewerOpened(false)); return ( <>