import React, { useContext } from 'react'; import { View } from 'react-native'; import Touchable from 'react-native-platform-touchable'; import MessageContext from './Context'; import User from './User'; import styles from './styles'; import RepliedThread, {IMessageRepliedThread} from './RepliedThread'; import MessageAvatar, {IMessageAvatar} from './MessageAvatar'; import Attachments, {IMessageAttachments} from './Attachments'; import Urls from './Urls'; import Thread, {IMessageThread} from './Thread'; import Blocks, {IMessageBlocks} from './Blocks'; import Reactions from './Reactions'; import Broadcast, {IMessageBroadcast} from './Broadcast'; import Discussion, {IMessageDiscussion} from './Discussion'; import Content, {IMessageContent} from './Content'; import ReadReceipt from './ReadReceipt'; import CallButton, {IMessageCallButton} from './CallButton'; import { themes } from '../../constants/colors'; type TMessageInner = { type: string; blocks: []; } & IMessageDiscussion & IMessageContent & IMessageCallButton & IMessageBlocks & IMessageThread & IMessageAttachments & IMessageBroadcast; type TMessage = { isThreadReply: boolean; isThreadSequential: boolean; isInfo: boolean; isTemp: boolean; isHeader: boolean; hasError: boolean; style: any; onLongPress: Function; isReadReceiptEnabled: boolean; unread: boolean; theme: string; isIgnored: boolean; } & IMessageRepliedThread & IMessageAvatar & IMessageContent & TMessageInner; interface IMessageTouchable { hasError: boolean; isInfo: boolean; isThreadReply: boolean; isTemp: boolean; archived: boolean; highlighted: boolean; theme: string; ts?: any urls?: any; reactions?: any; alias?: any; role?: any; drid?: any; } const MessageInner = React.memo((props: TMessageInner) => { if (props.type === 'discussion-created') { return ( <> ); } if (props.type === 'jitsi_call_started') { return ( <> ); } if (props.blocks && props.blocks.length) { return ( <> ); } return ( <> ); }); MessageInner.displayName = 'MessageInner'; const Message = React.memo((props: TMessage) => { if (props.isThreadReply || props.isThreadSequential || props.isInfo || props.isIgnored) { const thread = props.isThreadReply ? : null; return ( {thread} ); } return ( ); }); Message.displayName = 'Message'; const MessageTouchable = React.memo((props: IMessageTouchable & TMessage) => { if (props.hasError) { return ( ); } const { onPress, onLongPress } = useContext(MessageContext); return ( ); }); MessageTouchable.displayName = 'MessageTouchable'; export default MessageTouchable;