From 2b341648ea27823912d80bc73cc7954556b63b9d Mon Sep 17 00:00:00 2001 From: Leon Jiang <35908040+leonyjiang@users.noreply.github.com> Date: Mon, 29 Mar 2021 17:16:14 -0400 Subject: Fix tutorial positioning bug on iPhone 11 --- src/components/profile/Content.tsx | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'src/components') diff --git a/src/components/profile/Content.tsx b/src/components/profile/Content.tsx index 1a5a205c..c0cae4b8 100644 --- a/src/components/profile/Content.tsx +++ b/src/components/profile/Content.tsx @@ -1,5 +1,5 @@ import {useFocusEffect, useNavigation} from '@react-navigation/native'; -import React, {useCallback, useEffect, useState} from 'react'; +import React, {useCallback, useEffect, useState, useRef} from 'react'; import { Alert, LayoutChangeEvent, @@ -91,6 +91,15 @@ const Content: React.FC = ({y, userXId, screenType}) => { const navigation = useNavigation(); + /* + * Used to imperatively scroll to the top when presenting the moment tutorial. + */ + const scrollViewRef = useRef(null); + /* + * If scrolling is enabled. Set to false before scrolling up for the tutorial. + */ + const [scrollEnabled, setScrollEnabled] = useState(true); + /** * States */ @@ -169,6 +178,7 @@ const Content: React.FC = ({y, userXId, screenType}) => { */ useFocusEffect( useCallback(() => { + setScrollEnabled(false); const navigateToMomentUploadPrompt = () => { switch (profile.profile_completion_stage) { case 1: @@ -180,6 +190,7 @@ const Content: React.FC = ({y, userXId, screenType}) => { navigation.navigate('MomentUploadPrompt', { screenType, momentCategory: momentCategories[0], + profileBodyHeight, }); setIsStageOnePromptClosed(true); } @@ -195,13 +206,20 @@ const Content: React.FC = ({y, userXId, screenType}) => { } }; if (!userXId) { - setTimeout(navigateToMomentUploadPrompt, 2000); + setTimeout(() => { + if (scrollViewRef.current) { + scrollViewRef.current.getNode().scrollTo({y: 0}); + } + navigateToMomentUploadPrompt(); + setScrollEnabled(true); + }, 2000); } }, [ profile.profile_completion_stage, momentCategories, userXId, isStageOnePromptClosed, + profileBodyHeight, ]), ); @@ -285,12 +303,14 @@ const Content: React.FC = ({y, userXId, screenType}) => { return ( handleScroll(e)} bounces={shouldBounce} showsVerticalScrollIndicator={false} scrollEventThrottle={1} stickyHeaderIndices={[4]} + scrollEnabled={scrollEnabled} refreshControl={ }> -- cgit v1.2.3-70-g09d2 From 5b82b32d00f85f1fa27d9812f73a4f3e6c00d204 Mon Sep 17 00:00:00 2001 From: Ivan Chen Date: Mon, 29 Mar 2021 18:30:48 -0400 Subject: fixed scrolling to top on every focus --- src/components/profile/PublicProfile.tsx | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'src/components') diff --git a/src/components/profile/PublicProfile.tsx b/src/components/profile/PublicProfile.tsx index 188292f0..88e0ecd1 100644 --- a/src/components/profile/PublicProfile.tsx +++ b/src/components/profile/PublicProfile.tsx @@ -89,15 +89,17 @@ const PublicProfile: React.FC = ({ */ useFocusEffect( useCallback(() => { - setScrollEnabled(false); const navigateToMomentUploadPrompt = () => { switch (profile.profile_completion_stage) { case 1: if ( momentCategories && momentCategories[0] && - !isStageOnePromptClosed + !isStageOnePromptClosed && + scrollViewRef.current ) { + setScrollEnabled(false); + scrollViewRef.current.getNode().scrollTo({y: 0}); navigation.navigate('MomentUploadPrompt', { screenType, momentCategory: momentCategories[0], @@ -118,19 +120,16 @@ const PublicProfile: React.FC = ({ }; if (!userXId) { setTimeout(() => { - if (scrollViewRef.current) { - scrollViewRef.current.getNode().scrollTo({y: 0}); - } navigateToMomentUploadPrompt(); setScrollEnabled(true); }, 2000); } }, [ - setScrollEnabled, userXId, profile.profile_completion_stage, momentCategories, isStageOnePromptClosed, + setScrollEnabled, navigation, screenType, profileBodyHeight, -- cgit v1.2.3-70-g09d2