// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. import PropTypes from 'prop-types'; import React from 'react'; import { ActivityIndicator, ScrollView, StyleSheet, View, } from 'react-native'; import FastImage from 'react-native-fast-image'; export default class TableImage extends React.PureComponent { static propTypes = { deviceWidth: PropTypes.number.isRequired, imagesMetadata: PropTypes.object, imageSource: PropTypes.string.isRequired, }; constructor(props) { super(props); const dimensions = props.imagesMetadata?.[props.imageSource]; this.state = { imageSource: '', width: dimensions?.width || -1, height: dimensions?.height || -1, }; } static getDerivedStateFromProps(nextProps, state) { if (nextProps.imageSource !== state.imageSource) { return { width: -1, height: -1, }; } return null; } componentDidUpdate(prevProps) { if (prevProps.imageSource !== this.props.imageSource) { this.getImageSize(); } } getImageSize = () => { const {imageSource, imagesMetadata} = this.props; const dimensions = imagesMetadata?.[imageSource]; this.setState({ width: dimensions?.width || -1, height: dimensions?.height || -1, }); } render() { let {width, height} = this.state; if (width === -1 || height === -1) { return ( ); } if (width > this.props.deviceWidth) { height = (height / width) * this.props.deviceWidth; width = this.props.deviceWidth; } return ( ); } } const style = StyleSheet.create({ scrollContainer: { flex: 1, }, container: { flex: 1, flexDirection: 'column', }, image: { resizeMode: 'contain', }, loadingContainer: { alignItems: 'center', flex: 1, justifyContent: 'center', }, });