diff --git a/native/chat/chat-thread-list.react.js b/native/chat/chat-thread-list.react.js --- a/native/chat/chat-thread-list.react.js +++ b/native/chat/chat-thread-list.react.js @@ -92,6 +92,7 @@ +scrollPos: { current: number }, +hardwareBack: () => boolean, +chatThreadList: React.Node, + +onTabPress: () => void, }; class ChatThreadList extends React.PureComponent { @@ -116,7 +117,7 @@ const tabNavigation: ?TabNavigationProp<'Chat'> = chatNavigation.getParent(); invariant(tabNavigation, 'ChatNavigator should be within TabNavigator'); - tabNavigation.addListener('tabPress', this.onTabPress); + tabNavigation.addListener('tabPress', this.props.onTabPress); BackHandler.addEventListener('hardwareBackPress', this.props.hardwareBack); } @@ -130,7 +131,7 @@ const tabNavigation: ?TabNavigationProp<'Chat'> = chatNavigation.getParent(); invariant(tabNavigation, 'ChatNavigator should be within TabNavigator'); - tabNavigation.removeListener('tabPress', this.onTabPress); + tabNavigation.removeListener('tabPress', this.props.onTabPress); BackHandler.removeEventListener( 'hardwareBackPress', @@ -167,17 +168,6 @@ } } - onTabPress = () => { - if (!this.props.navigation.isFocused()) { - return; - } - if (this.props.scrollPos.current > 0 && this.flatList) { - this.flatList.scrollToOffset({ offset: 0, animated: true }); - } else if (this.props.route.name === BackgroundChatThreadListRouteName) { - this.props.navigation.navigate({ name: HomeChatThreadListRouteName }); - } - }; - render() { return this.props.chatThreadList; } @@ -561,6 +551,17 @@ ], ); + const onTabPress = React.useCallback(() => { + if (!navigation.isFocused()) { + return; + } + if (scrollPos.current > 0 && flatListRef.current) { + flatListRef.current.scrollToOffset({ offset: 0, animated: true }); + } else if (route.name === BackgroundChatThreadListRouteName) { + navigation.navigate({ name: HomeChatThreadListRouteName }); + } + }, [navigation, route.name]); + return ( ); }