import React from 'react';
import { TouchableOpacity, View } from 'react-native';
import {
Icon,
ImageWithPlaceholder,
Text,
VideoThumbnail,
createStyleSheet,
useUIKitTheme,
} from '@sendbird/uikit-react-native-foundation';
import {
FileIcon,
SendbirdBaseMessage,
SendbirdFileMessage,
SendbirdUserMessage,
getFileIconFromMessageType,
getMessageType,
getThumbnailUriFromFileMessage,
} from '@sendbird/uikit-utils';
import { useLocalization, usePlatformService } from '../../hooks/useContext';
export type MessageToReplyPreviewProps = {
messageToReply?: SendbirdFileMessage | SendbirdUserMessage;
setMessageToReply?: (message?: undefined | SendbirdFileMessage | SendbirdUserMessage) => void;
};
export const MessageToReplyPreview = ({ messageToReply, setMessageToReply }: MessageToReplyPreviewProps) => {
const { colors, select, palette } = useUIKitTheme();
const { mediaService } = usePlatformService();
const { STRINGS } = useLocalization();
const getFileIconAsImage = (url: string) => {
return ;
};
const getFileIconAsVideoThumbnail = (url: string) => {
return (
mediaService.getVideoThumbnail({ url: uri, timeMills: 1000 })}
/>
);
};
const getFileIconAsSymbol = (icon: FileIcon) => {
return (
);
};
const getFileIcon = (messageToReply: SendbirdBaseMessage) => {
if (messageToReply?.isFileMessage()) {
const messageType = getMessageType(messageToReply);
switch (messageType) {
case 'file.image':
return getFileIconAsImage(getThumbnailUriFromFileMessage(messageToReply));
case 'file.video':
return getFileIconAsVideoThumbnail(getThumbnailUriFromFileMessage(messageToReply));
case 'file.voice':
return null;
default:
return getFileIconAsSymbol(getFileIconFromMessageType(messageType));
}
}
return null;
};
if (!messageToReply) return null;
return (
{getFileIcon(messageToReply)}
{STRINGS.LABELS.CHANNEL_INPUT_REPLY_PREVIEW_TITLE(messageToReply.sender)}
{STRINGS.LABELS.CHANNEL_INPUT_REPLY_PREVIEW_BODY(messageToReply)}
setMessageToReply?.(undefined)} style={{ marginStart: 16 }}>
);
};
const styles = createStyleSheet({
messageToReplyContainer: {
flexDirection: 'row',
paddingStart: 18,
paddingEnd: 16,
paddingVertical: 12,
alignItems: 'center',
borderTopWidth: 1,
},
infoContainer: {
flex: 1,
flexDirection: 'row',
alignItems: 'center',
},
infoText: {
flex: 1,
height: 32,
justifyContent: 'space-between',
alignItems: 'flex-start',
},
filePreview: {
width: 32,
height: 32,
borderRadius: 8,
marginEnd: 10,
overflow: 'hidden',
},
});