import React, { useState } from 'react'; import { View, Text, TouchableWithoutFeedback, ActivityIndicator, StyleSheet, SafeAreaView } from 'react-native'; import FastImage from 'react-native-fast-image'; import PropTypes from 'prop-types'; import Modal from 'react-native-modal'; import ImageViewer from 'react-native-image-zoom-viewer'; import { Video } from 'expo-av'; import sharedStyles from '../views/Styles'; import { COLOR_WHITE } from '../constants/colors'; import { formatAttachmentUrl } from '../lib/utils'; const styles = StyleSheet.create({ safeArea: { flex: 1 }, modal: { margin: 0 }, titleContainer: { width: '100%', alignItems: 'center', marginVertical: 10 }, title: { color: COLOR_WHITE, textAlign: 'center', fontSize: 16, ...sharedStyles.textSemibold }, description: { color: COLOR_WHITE, textAlign: 'center', fontSize: 14, ...sharedStyles.textMedium }, indicator: { flex: 1 }, video: { flex: 1 }, loading: { position: 'absolute', left: 0, right: 0, top: 0, bottom: 0, alignItems: 'center', justifyContent: 'center' } }); const Indicator = React.memo(() => ( )); const ModalContent = React.memo(({ attachment, onClose, user, baseUrl }) => { if (attachment && attachment.image_url) { const url = formatAttachmentUrl(attachment.image_url, user.id, user.token, baseUrl); return ( {attachment.title} {attachment.description ? {attachment.description} : null} null} renderImage={props => } loadingRender={() => } /> ); } if (attachment && attachment.video_url) { const [loading, setLoading] = useState(true); const uri = formatAttachmentUrl(attachment.video_url, user.id, user.token, baseUrl); return ( <>