import React from 'react'; import { View, Dimensions, Platform } from 'react-native'; import { CometChat } from '@cometchat/chat-sdk-react-native'; import { CometChatBottomSheet } from '../../shared/views'; import { CometChatMessageInformation } from '../../CometChatMessageInformation/CometChatMessageInformation'; import { CometChatQuickReactions } from '../../shared/views/CometChatQuickReactions'; import { CometChatActionSheet } from '../../shared'; import { CometChatTheme } from '../../theme/type'; import { CometChatMessageTemplate } from '../../shared/modals/CometChatMessageTemplate'; import { getModerationStatus } from '../../shared/utils/MessageUtils'; interface MessageOptionsSheetProps { bottomSheetRef: React.RefObject; isOpen: boolean; showMessageOptions: any[]; ExtensionsComponent: React.JSX.Element | null; messageInfo: boolean; infoObject: React.MutableRefObject; selectedMessage: CometChat.BaseMessage | null; hideReactionOption: boolean; quickReactionList?: [string, string?, string?, string?, string?]; templatesMap: Map; mergedTheme: CometChatTheme; deleteItem: React.MutableRefObject; pendingReportRef: React.MutableRefObject; onClose: () => void; onDismiss?: () => void; onReactionPress: (emoji: string, message?: CometChat.BaseMessage) => void; onAddReactionPress?: () => void; setShowDeleteModal: (show: boolean) => void; setShowReportDialog: (show: boolean) => void; setShowMessageOptions: (options: any[]) => void; setExtensionsComponent: (component: React.JSX.Element | null) => void; setMessageInfo: (show: boolean) => void; setShowEmojiKeyboard: (show: boolean) => void; } export const MessageOptionsSheet: React.FC = ({ bottomSheetRef, isOpen, showMessageOptions, ExtensionsComponent, messageInfo, infoObject, selectedMessage, hideReactionOption, quickReactionList, templatesMap, mergedTheme, deleteItem, pendingReportRef, onClose, onDismiss, onReactionPress, onAddReactionPress, setShowDeleteModal, setShowReportDialog, setShowMessageOptions, setMessageInfo, setShowEmojiKeyboard, }) => { return ( { // iOS: Open any deferred modals only after dismiss animation completes if (Platform.OS === 'ios') { if (deleteItem.current) { setShowDeleteModal(true); } if (pendingReportRef.current) { pendingReportRef.current = false; setShowReportDialog(true); } } onDismiss?.(); }} isOpen={isOpen} style={{ paddingHorizontal: 0, maxHeight: messageInfo ? Dimensions.get('window').height * 0.9 : Dimensions.get('window').height * 0.52, minHeight: Dimensions.get('window').height * 0.5, }} > {ExtensionsComponent ? ( ExtensionsComponent ) : messageInfo && infoObject.current ? ( { infoObject.current = null; setMessageInfo(false); }} style={mergedTheme?.messageListStyles?.messageInformationStyles} /> ) : ( {/* Show quick reactions for disapproved messages */} {!hideReactionOption && getModerationStatus(selectedMessage) !== 'disapproved' && ( { setShowMessageOptions([]); setTimeout(() => { setShowEmojiKeyboard(true); }, 200); }) } style={mergedTheme.quickReactionStyle} /> )} )} ); };