// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. import React, {type Dispatch, type SetStateAction, useCallback, useState} from 'react'; import {StyleSheet, Text, useWindowDimensions, View} from 'react-native'; import FastImage from 'react-native-fast-image'; import {RectButton, TouchableWithoutFeedback} from 'react-native-gesture-handler'; import Animated from 'react-native-reanimated'; import CompassIcon from '@components/compass_icon'; import FormattedText from '@components/formatted_text'; import {Preferences} from '@constants'; import {buttonBackgroundStyle, buttonTextStyle} from '@utils/buttonStyles'; import {calculateDimensions} from '@utils/images'; import {changeOpacity} from '@utils/theme'; import {typography} from '@utils/typography'; const styles = StyleSheet.create({ container: { alignItems: 'center', justifyContent: 'center', flex: 1, maxWidth: 600, }, filename: { color: '#FFF', ...typography('Body', 200, 'SemiBold'), marginVertical: 8, paddingHorizontal: 25, textAlign: 'center', }, unsupported: { color: '#FFF', ...typography('Body', 100, 'SemiBold'), marginTop: 10, paddingHorizontal: 25, opacity: 0.64, textAlign: 'center', }, marginBottom: { marginBottom: 16, }, marginTop: { marginTop: 16, }, }); type Props = { filename: string; height: number; isDownloading: boolean; isRemote: boolean; onShouldHideControls: () => void; posterUri?: string; setDownloading: Dispatch>; width: number; } const VideoError = ({filename, height, isDownloading, isRemote, onShouldHideControls, posterUri, setDownloading, width}: Props) => { const [hasPoster, setHasPoster] = useState(false); const [loadPosterError, setLoadPosterError] = useState(false); const handleDownload = useCallback(() => { setDownloading(true); }, []); const handlePosterSet = useCallback(() => { setHasPoster(true); }, []); const handlePosterError = useCallback(() => { setLoadPosterError(true); }, []); const dimensions = useWindowDimensions(); const imageDimensions = calculateDimensions(height, width, dimensions.width); let poster; if (posterUri && !loadPosterError) { poster = ( ); } else { poster = ( ); } return ( {poster} {filename} {isRemote && } {!isRemote && } ); }; export default VideoError;