Skip to content

Commit b4c6bc3

Browse files
committed
feat: scroll to top on bottom tab press
1 parent 9ad7b91 commit b4c6bc3

File tree

3 files changed

+26
-13
lines changed

3 files changed

+26
-13
lines changed

examples/SampleApp/src/components/MessageSearch/MessageSearchList.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ export type MessageSearchListProps = {
7272
refreshing: boolean;
7373
refreshList: () => void;
7474
showResultCount?: boolean;
75+
scrollRef?: React.Ref<FlatList>;
7576
};
7677
export const MessageSearchList: React.FC<MessageSearchListProps> = ({
7778
EmptySearchIndicator,
@@ -81,6 +82,7 @@ export const MessageSearchList: React.FC<MessageSearchListProps> = ({
8182
refreshing,
8283
refreshList,
8384
showResultCount = false,
85+
scrollRef,
8486
}) => {
8587
const {
8688
theme: {
@@ -124,6 +126,7 @@ export const MessageSearchList: React.FC<MessageSearchListProps> = ({
124126
onEndReached={loadMore}
125127
onRefresh={refreshList}
126128
refreshing={refreshing}
129+
ref={scrollRef}
127130
renderItem={({ item }) => (
128131
<TouchableOpacity
129132
onPress={() => {

examples/SampleApp/src/screens/ChannelListScreen.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, { useContext, useMemo, useRef, useState } from 'react';
22
import { StyleSheet, Text, TextInput, TouchableOpacity, View } from 'react-native';
3-
import { useNavigation } from '@react-navigation/native';
3+
import { useNavigation, useScrollToTop } from '@react-navigation/native';
44
import { ChannelList, CircleClose, Search, useTheme } from 'stream-chat-react-native';
55

66
import { ChannelPreview } from '../components/ChannelPreview';
@@ -76,6 +76,8 @@ export const ChannelListScreen: React.FC = () => {
7676
} = useTheme();
7777

7878
const searchInputRef = useRef<TextInput | null>(null);
79+
const scrollRef = useRef(null);
80+
7981
const [searchInputText, setSearchInputText] = useState('');
8082
const [searchQuery, setSearchQuery] = useState('');
8183

@@ -93,6 +95,8 @@ export const ChannelListScreen: React.FC = () => {
9395
[chatClientUserId],
9496
);
9597

98+
useScrollToTop(scrollRef);
99+
96100
const EmptySearchIndicator = () => (
97101
<View style={styles.emptyIndicatorContainer}>
98102
<Search height={112} pathFill={grey_gainsboro} width={112} />
@@ -168,6 +172,7 @@ export const ChannelListScreen: React.FC = () => {
168172
refreshing={refreshing}
169173
refreshList={refreshList}
170174
showResultCount
175+
scrollRef={scrollRef}
171176
/>
172177
)}
173178
<View style={{ flex: searchQuery ? 0 : 1 }}>
@@ -200,6 +205,7 @@ export const ChannelListScreen: React.FC = () => {
200205
options={options}
201206
Preview={ChannelPreview}
202207
sort={sort}
208+
setFlatListRef={(ref) => (scrollRef.current = ref)}
203209
/>
204210
</View>
205211
</View>

examples/SampleApp/src/screens/MentionsScreen.tsx

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
import React, { useContext, useMemo } from 'react';
2-
import { StyleSheet, Text, View } from 'react-native';
1+
import React, { useContext, useMemo, useRef } from 'react';
2+
import { FlatList, StyleSheet, Text, View } from 'react-native';
33
import { AtMentions, useTheme } from 'stream-chat-react-native';
44

55
import { ChatScreenHeader } from '../components/ChatScreenHeader';
66
import { MessageSearchList } from '../components/MessageSearch/MessageSearchList';
77
import { usePaginatedSearchedMessages } from '../hooks/usePaginatedSearchedMessages';
8+
import { useScrollToTop } from '@react-navigation/native';
89

910
import type { StackNavigationProp } from '@react-navigation/stack';
1011

@@ -61,6 +62,10 @@ export const MentionsScreen: React.FC<MentionsScreenProps> = () => {
6162
[chatClient],
6263
);
6364

65+
const scrollRef = useRef<FlatList>(null);
66+
67+
useScrollToTop(scrollRef);
68+
6469
const { loading, loadMore, messages, refreshing, refreshList } =
6570
usePaginatedSearchedMessages(messageFilters);
6671

@@ -74,16 +79,15 @@ export const MentionsScreen: React.FC<MentionsScreenProps> = () => {
7479
]}
7580
>
7681
<ChatScreenHeader />
77-
<View style={styles.container}>
78-
<MessageSearchList
79-
EmptySearchIndicator={EmptyMentionsSearchIndicator}
80-
loading={loading}
81-
loadMore={loadMore}
82-
messages={messages}
83-
refreshing={refreshing}
84-
refreshList={refreshList}
85-
/>
86-
</View>
82+
<MessageSearchList
83+
EmptySearchIndicator={EmptyMentionsSearchIndicator}
84+
loading={loading}
85+
loadMore={loadMore}
86+
messages={messages}
87+
refreshing={refreshing}
88+
refreshList={refreshList}
89+
scrollRef={scrollRef}
90+
/>
8791
</View>
8892
);
8993
};

0 commit comments

Comments
 (0)