From b5ecbf3e421e9e6f1dbab9f3f851d265ae8470c6 Mon Sep 17 00:00:00 2001 From: Ivan Chen Date: Mon, 14 Dec 2020 19:22:35 -0500 Subject: [TMA-406&201] User Handle UI for Individual Moments (#129) * initial work * made big progress towards flatlist moment view * UI done, just need to pass in data now * minor fixes to get things actually running correctly * vertical scroll working * initial index working * moment drawer text color to red * moved report to drawer * removed garbage * added ? --- src/screens/profile/IndividualMoment.tsx | 253 ++++++++------------------- src/screens/profile/MomentCommentsScreen.tsx | 2 +- 2 files changed, 73 insertions(+), 182 deletions(-) (limited to 'src/screens') diff --git a/src/screens/profile/IndividualMoment.tsx b/src/screens/profile/IndividualMoment.tsx index d1b21d0f..469c648e 100644 --- a/src/screens/profile/IndividualMoment.tsx +++ b/src/screens/profile/IndividualMoment.tsx @@ -1,30 +1,18 @@ -import AsyncStorage from '@react-native-community/async-storage'; import {BlurView} from '@react-native-community/blur'; import {RouteProp} from '@react-navigation/native'; import {StackNavigationProp} from '@react-navigation/stack'; -import React, {useEffect, useState} from 'react'; -import {Alert, Image, StyleSheet, View} from 'react-native'; -import {Button} from 'react-native-elements'; -import {TouchableOpacity} from 'react-native-gesture-handler'; -import Animated from 'react-native-reanimated'; -import {useDispatch, useSelector} from 'react-redux'; +import React from 'react'; +import {FlatList, StyleSheet, View} from 'react-native'; +import {useSelector} from 'react-redux'; import {ProfileStackParams} from 'src/routes/profile/ProfileStack'; import { - CaptionScreenHeader, - CommentsCount, - MomentMoreInfoDrawer, + IndividualMomentTitleBar, + MomentPostContent, + MomentPostHeader, } from '../../components'; -import {getMomentCommentsCount} from '../../services'; -import {sendReport} from '../../services/ReportingService'; -import {loadUserMoments, logout} from '../../store/actions'; -import {DUMMY_USERNAME} from '../../store/initialStates'; import {RootState} from '../../store/rootreducer'; -import { - getTimePosted, - SCREEN_HEIGHT, - SCREEN_WIDTH, - StatusBarHeight, -} from '../../utils'; +import {MomentType} from '../../types'; +import {SCREEN_HEIGHT, SCREEN_WIDTH, StatusBarHeight} from '../../utils'; /** * Individual moment view opened when user clicks on a moment tile @@ -42,89 +30,52 @@ interface IndividualMomentProps { navigation: IndividualMomentNavigationProp; } +const ITEM_HEIGHT = SCREEN_HEIGHT * (9 / 10); + const IndividualMoment: React.FC = ({ route, navigation, }) => { - const { - moment_category, - path_hash, - date_time, - moment_id, - } = route.params.moment; + const {moment_category, moment_id} = route.params.moment; const {userXId, screenType} = route.params; - - const { - user: {userId: loggedInUserId, username: loggedInUsername}, - } = useSelector((state: RootState) => state.user); - + const {username: loggedInUsername} = useSelector( + (state: RootState) => state.user.user, + ); const { user: {username}, } = userXId ? useSelector((state: RootState) => state.userX[screenType][userXId]) - : {user: {username: DUMMY_USERNAME}}; + : useSelector((state: RootState) => state.user); - const isOwnProfile = username === loggedInUsername; - const [elapsedTime, setElapsedTime] = React.useState(); - const [comments_count, setCommentsCount] = React.useState(''); - const [isReporting, setIsReporting] = React.useState(false); - const dispatch = useDispatch(); - const [drawerVisible, setDrawerVisible] = useState(false); - - useEffect(() => { - const timePeriod = async () => { - setElapsedTime(getTimePosted(date_time)); - }; - - const loadComments = async () => { - const token = await AsyncStorage.getItem('token'); - if (!token) { - dispatch(logout()); - return; - } - getMomentCommentsCount(moment_id, setCommentsCount, token); - }; + const {moments} = userXId + ? useSelector((state: RootState) => state.userX[screenType][userXId]) + : useSelector((state: RootState) => state.moments); - timePeriod(); - loadComments(); - }, [date_time, dispatch, loggedInUserId, moment_id]); + const isOwnProfile = username === loggedInUsername; + const momentData = moments.filter( + (m) => m.moment_category === moment_category, + ); + const initialIndex = momentData.findIndex((m) => m.moment_id === moment_id); - const sendReportAlert = async () => { - const token = await AsyncStorage.getItem('token'); - setIsReporting(true); - Alert.alert( - 'Report Issue', - undefined, - [ - { - text: 'Mark as inappropriate', - onPress: () => - sendReport( - moment_id, - 'Mark as inappropriate', - token ? token : '', - setIsReporting, - ), - }, - { - text: 'Cancel', - onPress: () => setIsReporting(false), - style: 'cancel', - }, - { - text: 'Mark as abusive', - onPress: () => - sendReport( - moment_id, - 'Mark as abusive', - token ? token : '', - setIsReporting, - ), - }, - ], - {cancelable: false}, - ); - }; + const renderMomentPost = ({item}: {item: MomentType}) => ( + + + + + ); return ( = ({ blurAmount={10} reducedTransparencyFallbackColor="white" style={styles.contentContainer}> - -