From b8b70d26d40670129ac1bc15429ef92b26521692 Mon Sep 17 00:00:00 2001 From: Florent Azavant Date: Wed, 12 Feb 2025 17:39:08 +0100 Subject: [PATCH] fixed broken `replyTo` feature --- .../presentation/composer_controller.dart | 1 + .../presentation_email_extension.dart | 26 ++++++++++++++----- .../presentation_email_extension_test.dart | 2 +- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/lib/features/composer/presentation/composer_controller.dart b/lib/features/composer/presentation/composer_controller.dart index 6a19fd2ac..a7c608306 100644 --- a/lib/features/composer/presentation/composer_controller.dart +++ b/lib/features/composer/presentation/composer_controller.dart @@ -869,6 +869,7 @@ class ComposerController extends BaseController listToEmailAddress = List.from(recipients.value1); listCcEmailAddress = List.from(recipients.value2); listBccEmailAddress = List.from(recipients.value3); + listReplyToEmailAddress = List.from(recipients.value4); if (listToEmailAddress.isNotEmpty || listCcEmailAddress.isNotEmpty || listBccEmailAddress.isNotEmpty || listReplyToEmailAddress.isNotEmpty) { isInitialRecipient.value = true; diff --git a/lib/features/email/presentation/extensions/presentation_email_extension.dart b/lib/features/email/presentation/extensions/presentation_email_extension.dart index a2427a310..2d8a1ea98 100644 --- a/lib/features/email/presentation/extensions/presentation_email_extension.dart +++ b/lib/features/email/presentation/extensions/presentation_email_extension.dart @@ -7,7 +7,7 @@ import 'package:model/extensions/list_email_address_extension.dart'; import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart'; extension PresentationEmailExtension on PresentationEmail { - Tuple3, List, List> generateRecipientsEmailAddressForComposer({ + Tuple4, List, List, List> generateRecipientsEmailAddressForComposer({ required EmailActionType emailActionType, bool isSender = false, String? userName, @@ -21,10 +21,17 @@ extension PresentationEmailExtension on PresentationEmail { switch (emailActionType) { case EmailActionType.reply: - final listReplyAddress = isSender ? newToAddress : newFromAddress; + List listReplyAddress; + if (newReplyToAddress.isNotEmpty) { + listReplyAddress = newReplyToAddress; + } else if (isSender) { + listReplyAddress = newToAddress; + } else { + listReplyAddress = newFromAddress; + } final listReplyAddressWithoutUsername = listReplyAddress.withoutMe(userName); - return Tuple3(listReplyAddressWithoutUsername, [], []); + return Tuple4(listReplyAddressWithoutUsername, [], [], []); case EmailActionType.replyToList: final recipientRecord = EmailUtils.extractRecipientsFromListPost(listPost ?? ''); @@ -43,10 +50,11 @@ extension PresentationEmailExtension on PresentationEmail { .removeDuplicateEmails() .withoutMe(userName); - return Tuple3( + return Tuple4( listToAddressWithoutUsername, listCcAddressWithoutUsername, listBccAddressWithoutUsername, + [] ); case EmailActionType.replyAll: final recipientRecord = EmailUtils.extractRecipientsFromListPost(listPost ?? ''); @@ -71,20 +79,26 @@ extension PresentationEmailExtension on PresentationEmail { .removeDuplicateEmails() .withoutMe(userName); - return Tuple3( + return Tuple4( listToAddressWithoutUsername, listCcAddressWithoutUsername, listBccAddressWithoutUsername, + [] ); + + case EmailActionType.editDraft: + return Tuple4(newToAddress, newCcAddress, newBccAddress, newReplyToAddress); + default: final listToAddressWithoutUsername = newToAddress.withoutMe(userName); final listCcAddressWithoutUsername = newCcAddress.withoutMe(userName); final listBccAddressWithoutUsername = newBccAddress.withoutMe(userName); - return Tuple3( + return Tuple4( listToAddressWithoutUsername, listCcAddressWithoutUsername, listBccAddressWithoutUsername, + [] ); } } diff --git a/test/model/lib/extensions/presentation_email_extension_test.dart b/test/model/lib/extensions/presentation_email_extension_test.dart index d8cd039e1..885d6e248 100644 --- a/test/model/lib/extensions/presentation_email_extension_test.dart +++ b/test/model/lib/extensions/presentation_email_extension_test.dart @@ -62,7 +62,7 @@ void main() { group('GIVEN user B is the sender, SENDER configured the replyTo email AND send an email to user A and user E, cc to user C, bcc to user D', () { test('THEN user A click reply, generateRecipientsEmailAddressForComposer SHOULD return only replyToEmailAddress email to reply' , () { - final expectedResult = Tuple3([userBEmailAddress], [], []); + final expectedResult = Tuple3([replyToEmailAddress], [], []); final emailToReply = PresentationEmail( from: {userBEmailAddress},