From dfa62d93d88a972c5b1d02308a501733c6280cac Mon Sep 17 00:00:00 2001 From: Deepak Bhagat Date: Sun, 9 Aug 2026 23:14:23 +0530 Subject: [PATCH] fix: allow retrying/deleting stuck (TEMP) messages (#6830) Message component was refactored (#7455) into a function component with the status logic in MessageStore.useMessageStatus. hasError was only true for ERROR status, so TEMP (stuck-sending) messages never showed the resend/delete action sheet - the user had to wipe app data to clear them. Extend useMessageStatus.hasError to also cover TEMP status. MessageError already renders the retry/delete icon on hasError and triggers errorActionsShow independently of the tappable gate, so the action sheet is now available for stuck messages. Update the existing useMessageStatus TEMP test to expect hasError true. Signed-off-by: Deepak Bhagat --- app/containers/message/stores/MessageStore.tsx | 2 +- app/containers/message/stores/__tests__/MessageStore.test.tsx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/containers/message/stores/MessageStore.tsx b/app/containers/message/stores/MessageStore.tsx index 09d6f0b81e..835f3eb7dd 100644 --- a/app/containers/message/stores/MessageStore.tsx +++ b/app/containers/message/stores/MessageStore.tsx @@ -270,7 +270,7 @@ export const useThreadPosition = (): { isThreadReply: boolean; isThreadSequentia export const useMessageStatus = (): { hasError: boolean; isTemp: boolean } => useMessageStore( useShallow(s => ({ - hasError: s.item.status === messagesStatus.ERROR, + hasError: s.item.status === messagesStatus.ERROR || s.item.status === messagesStatus.TEMP, isTemp: s.item.status === messagesStatus.TEMP || s.item.status === messagesStatus.ERROR })) ); diff --git a/app/containers/message/stores/__tests__/MessageStore.test.tsx b/app/containers/message/stores/__tests__/MessageStore.test.tsx index e867a51f41..c68c326977 100644 --- a/app/containers/message/stores/__tests__/MessageStore.test.tsx +++ b/app/containers/message/stores/__tests__/MessageStore.test.tsx @@ -383,10 +383,10 @@ describe('MessageStore', () => { expect(latest()).toEqual({ hasError: true, isTemp: true }); }); - it('useMessageStatus returns hasError false and isTemp true for a TEMP status model', () => { + it('useMessageStatus returns hasError true and isTemp true for a TEMP status model', () => { const model = buildFakeModel({ status: messagesStatus.TEMP }); const { latest } = renderDerived(model, useMessageStatus); - expect(latest()).toEqual({ hasError: false, isTemp: true }); + expect(latest()).toEqual({ hasError: true, isTemp: true }); }); it('useIsEncrypted returns true for a pending e2e message', () => {