From 24c269c9d52ec7cf2cd383a8d7c3aee43ed475c1 Mon Sep 17 00:00:00 2001 From: Ivan Chen Date: Tue, 27 Oct 2020 20:44:36 -0400 Subject: [TMA-180] Image Carousel for Tagg Posts (#77) * image carousel done * fixed a minor bug * TikTok is TikTok NOT Tiktok OKAY? Co-authored-by: Husam Salhab <47015061+hsalhab@users.noreply.github.com> --- src/components/common/PostCarousel.tsx | 49 ++++++++++++++++++++++++++++++ src/components/common/index.ts | 1 + src/components/taggs/TaggPost.tsx | 24 +++++++++++---- src/components/taggs/TwitterTaggPost.tsx | 15 +++++++-- src/routes/authentication/AuthProvider.tsx | 2 +- src/screens/profile/SocialMediaTaggs.tsx | 5 ++- src/services/UserProfileService.ts | 3 +- src/types/types.ts | 5 +-- 8 files changed, 88 insertions(+), 16 deletions(-) create mode 100644 src/components/common/PostCarousel.tsx (limited to 'src') diff --git a/src/components/common/PostCarousel.tsx b/src/components/common/PostCarousel.tsx new file mode 100644 index 00000000..cda9d8db --- /dev/null +++ b/src/components/common/PostCarousel.tsx @@ -0,0 +1,49 @@ +import React, {Fragment, useRef, useState} from 'react'; +import {Image} from 'react-native'; +import Carousel, {Pagination} from 'react-native-snap-carousel'; +import {SCREEN_WIDTH} from '../../utils'; + +interface PostCarouselProps { + data: string[]; + imageStyles: Object; + marginBottom: number; +} + +const PostCarousel: React.FC = ({ + data, + imageStyles, + marginBottom, +}) => { + const carouselRef = useRef(null); + const [currentPage, setCurrentPage] = useState(0); + + const renderItem: (item: any) => Object = ({item}) => { + if (item === null) { + return ; + } else { + return ; + } + }; + + return ( + <> + + + + ); +}; + +export default PostCarousel; diff --git a/src/components/common/index.ts b/src/components/common/index.ts index 87ebe810..c7ed13cd 100644 --- a/src/components/common/index.ts +++ b/src/components/common/index.ts @@ -11,5 +11,6 @@ export {default as LoadingIndicator} from './LoadingIndicator'; export {default as DateLabel} from './DateLabel'; export {default as SocialLinkModal} from './SocialLinkModal'; export {default as ComingSoon} from './ComingSoon'; +export {default as PostCarousel} from './PostCarousel'; export {default as TaggDatePicker} from './TaggDatePicker'; export * from './post'; diff --git a/src/components/taggs/TaggPost.tsx b/src/components/taggs/TaggPost.tsx index 07efd797..071dbfc4 100644 --- a/src/components/taggs/TaggPost.tsx +++ b/src/components/taggs/TaggPost.tsx @@ -2,7 +2,7 @@ import React from 'react'; import {Image, StyleSheet, Text, View} from 'react-native'; import {SimplePostType} from '../../types'; import {SCREEN_WIDTH} from '../../utils'; -import {DateLabel} from '../common'; +import {DateLabel, PostCarousel} from '../common'; import TaggPostFooter from './TaggPostFooter'; import Hyperlink from 'react-native-hyperlink'; @@ -14,11 +14,18 @@ const TaggPost: React.FC = ({post}) => { // Post with image and footer that shows caption return ( - - {post && ( - - )} - + {post.media_url.length === 1 && post.media_url[0] !== null ? ( + + ) : ( + + )} = ({ )} {/* Second part of content is an image or empty */} - {post.media_url ? ( + {post.media_url.length !== 0 ? ( - + {post.media_url.length === 1 && post.media_url[0] !== null ? ( + + ) : ( + + )} ) : ( @@ -89,6 +97,7 @@ const TwitterTaggPost: React.FC = ({ }> @{post.in_reply_to.handle} + {/* We're not displaying any images here in the container */} { loadSocialPosts(userId, social).then((accountData) => { socialAccounts[social] = accountData; setSocialAccounts(socialAccounts); - console.log('Updated posts data', social); + console.log('Refreshed posts data:', social); }); } setSocialsNeedUpdate([]); diff --git a/src/screens/profile/SocialMediaTaggs.tsx b/src/screens/profile/SocialMediaTaggs.tsx index 2a319326..4b63b843 100644 --- a/src/screens/profile/SocialMediaTaggs.tsx +++ b/src/screens/profile/SocialMediaTaggs.tsx @@ -1,5 +1,5 @@ import {RouteProp} from '@react-navigation/native'; -import React, {useEffect, useState} from 'react'; +import React from 'react'; import {ScrollView, StatusBar, StyleSheet, View} from 'react-native'; import LinearGradient from 'react-native-linear-gradient'; import { @@ -10,8 +10,7 @@ import { } from '../../components'; import {AVATAR_GRADIENT} from '../../constants'; import {AuthContext, ProfileContext, ProfileStackParams} from '../../routes'; -import {loadSocialPosts} from '../../services'; -import {SimplePostType, SocialAccountType, TwitterPostType} from '../../types'; +import {SimplePostType, TwitterPostType} from '../../types'; import {headerBarHeightWithImage, SCREEN_HEIGHT} from '../../utils'; type SocialMediaTaggsRouteProp = RouteProp< diff --git a/src/services/UserProfileService.ts b/src/services/UserProfileService.ts index a2d53dbb..6e1d1ef5 100644 --- a/src/services/UserProfileService.ts +++ b/src/services/UserProfileService.ts @@ -99,6 +99,7 @@ export const loadSocialPosts: ( const token = await AsyncStorage.getItem('token'); const endpoint = integratedSocialPostsEndpoints[socialType]; const accountData: SocialAccountType = {}; + accountData.posts = []; try { const response = await fetch(endpoint + `${userId}/`, { method: 'GET', @@ -115,7 +116,7 @@ export const loadSocialPosts: ( throw 'Unable to fetch posts data from ' + socialType; } } catch (error) { - console.warn(error); + console.log(error); } return accountData; }; diff --git a/src/types/types.ts b/src/types/types.ts index f9929017..97c8ef64 100644 --- a/src/types/types.ts +++ b/src/types/types.ts @@ -30,6 +30,7 @@ interface TwitterReplyType { handle: string; profile_pic: string; text: string; + // Not going to display any images here timestamp: string; permalink: string; } @@ -40,7 +41,7 @@ export interface TwitterPostType { profile_pic: string; text: string; timestamp: string; - media_url: string; + media_url: string[]; permalink: string; in_reply_to?: TwitterReplyType; } @@ -49,7 +50,7 @@ export interface SimplePostType { post_id: string; username: string; profile_pic: string; - media_url: string; + media_url: string[]; media_type: 'text' | 'photo'; caption: string; timestamp: string; -- cgit v1.2.3-70-g09d2