From 4bceabc21cacd865f5b10684142485faca2c9bb4 Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Thu, 16 May 2024 14:01:39 -0500 Subject: [🐴] Error recovery (#4036) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Handle block state when sending messages * Handle different pending failures * Use existing profile data to handle blocks * Better cleanup, leave room for more * Attempt recover upon next send * Reset pending failure * Capture unexpected error * Gracefully handle network errors and recovery * Re-align error components and types * Include history fetching in recoverable states --- src/state/messages/convo/index.tsx | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (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 e955d4118..d6648f480 100644 --- a/src/state/messages/convo/index.tsx +++ b/src/state/messages/convo/index.tsx @@ -1,6 +1,7 @@ import React, {useContext, useState, useSyncExternalStore} from 'react' import {AppState} from 'react-native' import {useFocusEffect, useIsFocused} from '@react-navigation/native' +import {useQueryClient} from '@tanstack/react-query' import {Convo} from '#/state/messages/convo/agent' import { @@ -13,6 +14,8 @@ import { import {isConvoActive} from '#/state/messages/convo/util' import {useMessagesEventBus} from '#/state/messages/events' import {useMarkAsReadMutation} from '#/state/queries/messages/conversation' +import {RQKEY as ListConvosQueryKey} from '#/state/queries/messages/list-converations' +import {RQKEY as createProfileQueryKey} from '#/state/queries/profile' import {useAgent} from '#/state/session' export * from '#/state/messages/convo/util' @@ -52,6 +55,7 @@ export function ConvoProvider({ children, convoId, }: Pick & {children: React.ReactNode}) { + const queryClient = useQueryClient() const isScreenFocused = useIsFocused() const {getAgent} = useAgent() const events = useMessagesEventBus() @@ -78,6 +82,23 @@ export function ConvoProvider({ }, [convo, convoId, markAsRead]), ) + React.useEffect(() => { + return convo.on(event => { + switch (event.type) { + case 'invalidate-block-state': { + for (const did of event.accountDids) { + queryClient.invalidateQueries({ + queryKey: createProfileQueryKey(did), + }) + } + queryClient.invalidateQueries({ + queryKey: ListConvosQueryKey, + }) + } + } + }) + }, [convo, queryClient]) + React.useEffect(() => { const handleAppStateChange = (nextAppState: string) => { if (isScreenFocused) { -- cgit 1.4.1