From d6ed1055ee8f804f6f7a2dc570f1770b6429dd40 Mon Sep 17 00:00:00 2001 From: Diego Mello <diegolmello@gmail.com> Date: Fri, 3 May 2019 10:29:56 -0300 Subject: [PATCH] [FIX] Load local URL image (#871) --- app/containers/message/Message.js | 4 +-- app/containers/message/Url.js | 50 ++++++++++++++++++++++++------- 2 files changed, 41 insertions(+), 13 deletions(-) diff --git a/app/containers/message/Message.js b/app/containers/message/Message.js index d5c1a9fc5..e8132bdc5 100644 --- a/app/containers/message/Message.js +++ b/app/containers/message/Message.js @@ -320,13 +320,13 @@ export default class Message extends PureComponent { } renderUrl = () => { - const { urls } = this.props; + const { urls, user, baseUrl } = this.props; if (urls.length === 0) { return null; } return urls.map((url, index) => ( - <Url url={url} key={url.url} index={index} /> + <Url url={url} key={url.url} index={index} user={user} baseUrl={baseUrl} /> )); } diff --git a/app/containers/message/Url.js b/app/containers/message/Url.js index 36ae44c19..e0ae7d4ec 100644 --- a/app/containers/message/Url.js +++ b/app/containers/message/Url.js @@ -3,6 +3,7 @@ import { View, Text, StyleSheet } from 'react-native'; import PropTypes from 'prop-types'; import FastImage from 'react-native-fast-image'; import Touchable from 'react-native-platform-touchable'; +import isEqual from 'lodash/isEqual'; import openLink from '../../utils/openLink'; import sharedStyles from '../../views/Styles'; @@ -50,33 +51,60 @@ const styles = StyleSheet.create({ } }); -const onPress = (url) => { - openLink(url); -}; -const Url = ({ url, index }) => { +const UrlImage = React.memo(({ image, user, baseUrl }) => { + if (!image) { + return null; + } + image = image.includes('http') ? image : `${ baseUrl }/${ image }?rc_uid=${ user.id }&rc_token=${ user.token }`; + return <FastImage source={{ uri: image }} style={styles.image} resizeMode={FastImage.resizeMode.cover} />; +}); + +const UrlContent = React.memo(({ title, description }) => ( + <View style={styles.textContainer}> + {title ? <Text style={styles.title} numberOfLines={2}>{title}</Text> : null} + {description ? <Text style={styles.description} numberOfLines={2}>{description}</Text> : null} + </View> +)); + +const Url = React.memo(({ + url, index, user, baseUrl +}) => { if (!url) { return null; } + + const onPress = () => openLink(url.url); + return ( <Touchable - onPress={() => onPress(url.url)} + onPress={onPress} style={[styles.button, index > 0 && styles.marginTop, styles.container]} background={Touchable.Ripple('#fff')} > <React.Fragment> - {url.image ? <FastImage source={{ uri: url.image }} style={styles.image} resizeMode={FastImage.resizeMode.cover} /> : null} - <View style={styles.textContainer}> - <Text style={styles.title} numberOfLines={2}>{url.title}</Text> - <Text style={styles.description} numberOfLines={2}>{url.description}</Text> - </View> + <UrlImage image={url.image} user={user} baseUrl={baseUrl} /> + <UrlContent title={url.title} description={url.description} /> </React.Fragment> </Touchable> ); +}, (oldProps, newProps) => isEqual(oldProps.url, newProps.url)); + +UrlImage.propTypes = { + image: PropTypes.string, + user: PropTypes.object, + baseUrl: PropTypes.string +}; + +UrlContent.propTypes = { + title: PropTypes.string, + description: PropTypes.string }; Url.propTypes = { url: PropTypes.object.isRequired, - index: PropTypes.number + index: PropTypes.number, + user: PropTypes.object, + baseUrl: PropTypes.string }; export default Url; -- GitLab