Skip to content

Commit 7b9072c

Browse files
committed
chore: fixed scroll issue
1 parent 4e797aa commit 7b9072c

File tree

2 files changed

+32
-4
lines changed

2 files changed

+32
-4
lines changed

packages/uikit-react-native/src/components/ChatFlatList/index.tsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,14 @@ const ChatFlatList = forwardRef<RNFlatList, Props>(function ChatFlatList(
7272
);
7373
}
7474

75+
const _onStartReached: () => void = () => {
76+
inverted.current ? onBottomReached() : onTopReached();
77+
};
78+
79+
const _onEndReached: () => void = () => {
80+
inverted.current ? onTopReached() : onBottomReached();
81+
};
82+
7583
return (
7684
<FlatListInternal
7785
bounces={false}
@@ -82,9 +90,9 @@ const ChatFlatList = forwardRef<RNFlatList, Props>(function ChatFlatList(
8290
{...props}
8391
inverted={inverted.current}
8492
ref={ref}
85-
onEndReached={onTopReached}
93+
onEndReached={_onEndReached}
8694
onScrollToIndexFailed={NOOP}
87-
onStartReached={onBottomReached}
95+
onStartReached={_onStartReached}
8896
scrollEventThrottle={16}
8997
onScroll={_onScroll}
9098
keyExtractor={getMessageUniqId}

packages/uikit-react-native/src/domain/groupChannelThread/component/GroupChannelThreadMessageList.tsx

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useContext, useEffect, useLayoutEffect } from 'react';
1+
import React, { useContext, useEffect, useLayoutEffect, useRef } from 'react';
22

33
import { useChannelHandler } from '@sendbird/uikit-chat-hooks';
44
import { isDifferentChannel, useFreshCallback, useUniqHandlerId } from '@sendbird/uikit-utils';
@@ -15,6 +15,19 @@ const GroupChannelThreadMessageList = (props: GroupChannelThreadProps['MessageLi
1515
const { flatListRef, lazyScrollToBottom, lazyScrollToIndex } = useContext(GroupChannelThreadContexts.MessageList);
1616

1717
const id = useUniqHandlerId('GroupChannelThreadMessageList');
18+
const ignorePropReached = useRef(false);
19+
20+
const _onTopReached = () => {
21+
if (!ignorePropReached.current) {
22+
props.onTopReached();
23+
}
24+
};
25+
26+
const _onBottomReached = () => {
27+
if (!ignorePropReached.current) {
28+
props.onBottomReached();
29+
}
30+
};
1831

1932
const scrollToBottom = useFreshCallback(async (animated = false) => {
2033
if (props.hasNext()) {
@@ -33,7 +46,12 @@ const GroupChannelThreadMessageList = (props: GroupChannelThreadProps['MessageLi
3346
const foundMessageIndex = props.messages.findIndex((it) => it.createdAt === props.startingPoint);
3447
const isIncludedInList = foundMessageIndex > -1;
3548
if (isIncludedInList) {
36-
lazyScrollToIndex({ index: foundMessageIndex, animated: true, timeout: 500 });
49+
ignorePropReached.current = true;
50+
const timeout = 300;
51+
lazyScrollToIndex({ index: foundMessageIndex, animated: true, timeout: timeout });
52+
setTimeout(() => {
53+
ignorePropReached.current = false;
54+
}, timeout + 50);
3755
}
3856
}
3957
}, [props.startingPoint]);
@@ -73,6 +91,8 @@ const GroupChannelThreadMessageList = (props: GroupChannelThreadProps['MessageLi
7391
<ChannelThreadMessageList
7492
{...props}
7593
ref={flatListRef}
94+
onTopReached={_onTopReached}
95+
onBottomReached={_onBottomReached}
7696
onEditMessage={setMessageToEdit}
7797
onPressNewMessagesButton={scrollToBottom}
7898
onPressScrollToBottomButton={scrollToBottom}

0 commit comments

Comments
 (0)