Skip to content

Commit 8e53189

Browse files
committed
feat: only show newMessagesBanner if new messages have been registered
1 parent c23bc65 commit 8e53189

File tree

3 files changed

+19
-2
lines changed

3 files changed

+19
-2
lines changed

src/CuteChat.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ export function CuteChat(props: CuteChatProps) {
5555
const [initializing, setInitializing] = useState(true);
5656
const [lastMessageDoc, setLastMessageDoc] =
5757
useState<FirebaseFirestore.DocumentSnapshot | null>(null);
58+
const [hasNewMessages, setHasNewMessages] = useState(false);
5859

5960
const memoizedUser = useMemo(() => ({ _id: user.id, ...user }), [user]);
6061
const startDate = useMemo(() => new Date(), []);
@@ -153,6 +154,8 @@ export function CuteChat(props: CuteChatProps) {
153154
console.log('New messages');
154155
const snapshotChanges = await prepareSnapshot(snapshot, chatId);
155156
setMessages((old) => appendSnapshot(old, snapshotChanges));
157+
158+
setHasNewMessages(true);
156159
}
157160
},
158161
(error: Error) => console.error('Error fetching documents: ', error)
@@ -310,6 +313,8 @@ export function CuteChat(props: CuteChatProps) {
310313
newMessagesBannerStyles={props.newMessagesBannerStyles}
311314
scrollToBottomComponent={props.scrollToBottomComponent}
312315
scrollToBottomStyle={props.scrollToBottomStyle}
316+
hasNewMessages={hasNewMessages}
317+
markNewMessagesAsSeen={() => setHasNewMessages(false)}
313318
closeToTop={closeToTop}
314319
chatRef={chatListRef}
315320
/>

src/components/ChatFooter/ChatFooter.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,19 @@ export const ChatFooter = (props: {
1212
scrollToBottomStyle?: StyleProp<ViewStyle>;
1313

1414
closeToTop: boolean;
15+
hasNewMessages: boolean;
16+
markNewMessagesAsSeen: () => void;
1517
chatRef: RefObject<FlatList<IMessage>>;
1618
}) => {
1719
const scrollToBottom = () => {
1820
props.chatRef.current?.scrollToOffset({ offset: 0, animated: true });
1921
};
2022

23+
const onNewMessagesBannerPress = () => {
24+
scrollToBottom();
25+
props.markNewMessagesAsSeen();
26+
};
27+
2128
return (
2229
<View
2330
style={{
@@ -35,8 +42,9 @@ export const ChatFooter = (props: {
3542
<MiddleSection
3643
newMessagesBannerComponent={props.newMessagesBannerComponent}
3744
newMessagesBannerStyles={props.newMessagesBannerStyles}
38-
onNewMessagesBannerPress={scrollToBottom}
45+
onNewMessagesBannerPress={onNewMessagesBannerPress}
3946
closeToTop={props.closeToTop}
47+
hasNewMessages={props.hasNewMessages}
4048
/>
4149

4250
<RightSection

src/components/ChatFooter/MiddleSection.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,16 @@ type Props = {
77
onNewMessagesBannerPress?: () => void;
88

99
closeToTop: boolean;
10+
hasNewMessages: boolean;
1011
};
1112

1213
export const MiddleSection = (props: Props) => {
14+
const shouldDisplayNewMessagesBanner =
15+
!props.closeToTop && props.hasNewMessages;
16+
1317
return (
1418
<View style={{ display: 'flex', flex: 1 }}>
15-
{!props.closeToTop && props.newMessagesBannerComponent && (
19+
{shouldDisplayNewMessagesBanner && props.newMessagesBannerComponent && (
1620
<TouchableOpacity
1721
onPress={props.onNewMessagesBannerPress}
1822
style={

0 commit comments

Comments
 (0)