From 64daaada3faf7ae8362e20ceb6b3bf77efe1410a Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Wed, 15 May 2024 17:20:31 -0500 Subject: [PATCH] Use existing profile data to handle blocks --- src/state/messages/convo/agent.ts | 8 +++++++- src/state/messages/convo/index.tsx | 17 ++++++++++++++--- src/state/messages/convo/types.ts | 3 ++- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/state/messages/convo/agent.ts b/src/state/messages/convo/agent.ts index 7dff118023..fea4630f0f 100644 --- a/src/state/messages/convo/agent.ts +++ b/src/state/messages/convo/agent.ts @@ -814,7 +814,13 @@ export class Convo { switch (e.message) { case 'block between recipient and sender': this.pendingMessageFailure = 'unrecoverable' - this.emitter.emit('event', {type: 'sync-convo-state'}) + this.emitter.emit('event', { + type: 'invalidate-block-state', + accountDids: [ + this.sender!.did, + ...this.recipients!.map(r => r.did), + ], + }) break default: logger.warn( diff --git a/src/state/messages/convo/index.tsx b/src/state/messages/convo/index.tsx index 1e8cef2e88..d6648f4800 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() @@ -81,12 +85,19 @@ export function ConvoProvider({ React.useEffect(() => { return convo.on(event => { switch (event.type) { - case 'sync-convo-state': { - console.log('SYNC') + case 'invalidate-block-state': { + for (const did of event.accountDids) { + queryClient.invalidateQueries({ + queryKey: createProfileQueryKey(did), + }) + } + queryClient.invalidateQueries({ + queryKey: ListConvosQueryKey, + }) } } }) - }, [convo]) + }, [convo, queryClient]) React.useEffect(() => { const handleAppStateChange = (nextAppState: string) => { diff --git a/src/state/messages/convo/types.ts b/src/state/messages/convo/types.ts index d7490acbe6..2305c952f7 100644 --- a/src/state/messages/convo/types.ts +++ b/src/state/messages/convo/types.ts @@ -211,5 +211,6 @@ export type ConvoState = | ConvoStateError export type ConvoEvent = { - type: 'sync-convo-state' + type: 'invalidate-block-state' + accountDids: string[] }