From dc9d80d2a84927119381eeee1b16e10099f08334 Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Fri, 24 May 2024 19:59:28 +0100 Subject: [🐴] update convo list from message bus (#4189) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * update convo list from message bus * don't increase unread count if you're the sender * add refetch interval back * Fix deleted message state copy * only enable if `hasSession` * Fix logged out handling * increase refetch interval to 60s * request 10s interval when message screen active * use useAppState hook for convo resume/background * Combine forces * fix useFocusEffect logic --------- Co-authored-by: Eric Bailey --- src/state/messages/convo/index.tsx | 41 +++++++++++--------------------------- 1 file changed, 12 insertions(+), 29 deletions(-) (limited to 'src/state/messages/convo/index.tsx') diff --git a/src/state/messages/convo/index.tsx b/src/state/messages/convo/index.tsx index 79e61f88a..7ba337e45 100644 --- a/src/state/messages/convo/index.tsx +++ b/src/state/messages/convo/index.tsx @@ -1,8 +1,8 @@ import React, {useContext, useState, useSyncExternalStore} from 'react' -import {AppState} from 'react-native' -import {useFocusEffect, useIsFocused} from '@react-navigation/native' +import {useFocusEffect} from '@react-navigation/native' import {useQueryClient} from '@tanstack/react-query' +import {useAppState} from '#/lib/hooks/useAppState' import {Convo} from '#/state/messages/convo/agent' import { ConvoParams, @@ -58,7 +58,6 @@ export function ConvoProvider({ convoId, }: Pick & {children: React.ReactNode}) { const queryClient = useQueryClient() - const isScreenFocused = useIsFocused() const {getAgent} = useAgent() const events = useMessagesEventBus() const [convo] = useState( @@ -72,16 +71,20 @@ export function ConvoProvider({ const service = useSyncExternalStore(convo.subscribe, convo.getSnapshot) const {mutate: markAsRead} = useMarkAsReadMutation() + const appState = useAppState() + const isActive = appState === 'active' useFocusEffect( React.useCallback(() => { - convo.resume() - markAsRead({convoId}) - - return () => { - convo.background() + if (isActive) { + convo.resume() markAsRead({convoId}) + + return () => { + convo.background() + markAsRead({convoId}) + } } - }, [convo, convoId, markAsRead]), + }, [isActive, convo, convoId, markAsRead]), ) React.useEffect(() => { @@ -101,25 +104,5 @@ export function ConvoProvider({ }) }, [convo, queryClient]) - React.useEffect(() => { - const handleAppStateChange = (nextAppState: string) => { - if (isScreenFocused) { - if (nextAppState === 'active') { - convo.resume() - } else { - convo.background() - } - - markAsRead({convoId}) - } - } - - const sub = AppState.addEventListener('change', handleAppStateChange) - - return () => { - sub.remove() - } - }, [convoId, convo, isScreenFocused, markAsRead]) - return {children} } -- cgit 1.4.1