import React from 'react'; import PropTypes from 'prop-types'; import { Video } from 'expo-av'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { ScrollView, Text, StyleSheet } from 'react-native'; import prettyBytes from 'pretty-bytes'; import { CustomIcon } from '../../lib/Icons'; import { ImageViewer, types } from '../../presentation/ImageViewer'; import { themes } from '../../constants/colors'; import { useDimensions, useOrientation } from '../../dimensions'; import { getHeaderHeight } from '../../containers/Header'; import { THUMBS_HEIGHT } from './constants'; import sharedStyles from '../Styles'; import { allowPreview } from './utils'; import I18n from '../../i18n'; const MESSAGEBOX_HEIGHT = 56; const styles = StyleSheet.create({ fileContainer: { alignItems: 'center', justifyContent: 'center' }, fileName: { fontSize: 16, textAlign: 'center', marginHorizontal: 10, ...sharedStyles.textMedium }, fileSize: { fontSize: 14, ...sharedStyles.textRegular } }); const IconPreview = React.memo(({ iconName, title, description, theme, width, height, danger }) => ( {title} {description ? {description} : null} )); const Preview = React.memo(({ item, theme, isShareExtension, length }) => { const type = item?.mime; const { width, height } = useDimensions(); 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) { if (type?.match(/video/)) { return ( ); } // Disallow preview of images too big in order to prevent memory issues on iOS share extension if (allowPreview(isShareExtension, item?.size)) { if (type?.match(/image/)) { return ( ); } } return ( ); } return ( ); }); Preview.propTypes = { item: PropTypes.object, theme: PropTypes.string, isShareExtension: PropTypes.bool, length: PropTypes.number }; IconPreview.propTypes = { iconName: PropTypes.string, title: PropTypes.string, description: PropTypes.string, theme: PropTypes.string, width: PropTypes.number, height: PropTypes.number, danger: PropTypes.bool }; export default Preview;