import React, { useContext } from 'react';
import { dequal } from 'dequal';
import { Text } from 'react-native';
import { IMessageAttachments } from './interfaces';
import Image from './Image';
import Audio from './Audio';
import Video from './Video';
import Reply from './Reply';
import Button from '../Button';
import styles from './styles';
import MessageContext from './Context';
import { useTheme } from '../../theme';
import { IAttachment } from '../../definitions';
import CollapsibleQuote from './Components/CollapsibleQuote';
import openLink from '../../utils/openLink';
import { themes } from '../../constants/colors';
export type TElement = {
type: string;
msg?: string;
url?: string;
text: string;
};
const AttachedActions = ({ attachment }: { attachment: IAttachment }) => {
if (!attachment.actions) {
return null;
}
const { onAnswerButtonPress } = useContext(MessageContext);
const { theme } = useTheme();
const attachedButtons = attachment.actions.map((element: TElement) => {
const onPress = () => {
if (element.msg) {
onAnswerButtonPress(element.msg);
}
if (element.url) {
openLink(element.url);
}
};
if (element.type === 'button') {
return ;
}
return null;
});
return (
<>
{attachment.text}
{attachedButtons}
>
);
};
const Attachments: React.FC = React.memo(
({ attachments, timeFormat, showAttachment, style, getCustomEmoji, isReply }: IMessageAttachments) => {
if (!attachments || attachments.length === 0) {
return null;
}
const { theme } = useTheme();
const attachmentsElements = attachments.map((file: IAttachment, index: number) => {
if (file && file.image_url) {
return (
);
}
if (file && file.audio_url) {
return (
);
}
if (file.video_url) {
return (
);
}
if (file && file.actions && file.actions.length > 0) {
return ;
}
if (typeof file.collapsed === 'boolean') {
return (
);
}
return ;
});
return <>{attachmentsElements}>;
},
(prevProps, nextProps) => dequal(prevProps.attachments, nextProps.attachments)
);
Attachments.displayName = 'MessageAttachments';
export default Attachments;