import React from 'react';
import { Video } from 'expo-av';
import { useSafeAreaInsets } from 'react-native-safe-area-context';
import { ScrollView, StyleSheet, Text } from 'react-native';
import prettyBytes from 'pretty-bytes';
import { CustomIcon } from '../../lib/Icons';
import { ImageViewer, types } from '../../presentation/ImageViewer';
import { useDimensions, useOrientation } from '../../dimensions';
import { getHeaderHeight } from '../../containers/Header';
import sharedStyles from '../Styles';
import I18n from '../../i18n';
import { isAndroid } from '../../utils/deviceInfo';
import { allowPreview } from './utils';
import { IAttachment, IUseDimensions } from './interfaces';
import { THUMBS_HEIGHT } from './constants';
import { TSupportedThemes } from '../../theme';
import { themes } from '../../lib/constants';
const MESSAGEBOX_HEIGHT = 56;
const styles = StyleSheet.create({
fileContainer: {
alignItems: 'center',
justifyContent: 'center'
},
fileName: {
fontSize: 16,
marginHorizontal: 10,
...sharedStyles.textMedium,
...sharedStyles.textAlignCenter
},
fileSize: {
fontSize: 14,
...sharedStyles.textRegular
}
});
interface IIconPreview {
iconName: string;
title: string;
description?: string;
theme: TSupportedThemes;
width: number;
height: number;
danger?: boolean;
}
const IconPreview = React.memo(({ iconName, title, description, theme, width, height, danger }: IIconPreview) => (
{title}
{description ? {description} : null}
));
interface IPreview {
item: IAttachment;
theme: TSupportedThemes;
isShareExtension: boolean;
length: number;
}
const Preview = React.memo(({ item, theme, isShareExtension, length }: IPreview) => {
const type = item?.mime;
const { width, height } = useDimensions() as IUseDimensions;
const { isLandscape } = useOrientation();
const insets = useSafeAreaInsets();
const headerHeight = getHeaderHeight(isLandscape);
const thumbsHeight = length > 1 ? THUMBS_HEIGHT : 0;
const calculatedHeight = height - insets.top - insets.bottom - MESSAGEBOX_HEIGHT - thumbsHeight - headerHeight;
if (item?.canUpload) {
// Disable video preview on iOS to save memory
if (isAndroid && type?.match(/video/)) {
return (
);
}
// Disallow preview of images too big in order to prevent memory issues on iOS share extension
if (type?.match(/image/)) {
if (allowPreview(isShareExtension, item?.size)) {
return (
);
}
}
return (
);
}
return (
);
});
export default Preview;