diff --git a/lib/features/email_recovery/presentation/email_recovery_controller.dart b/lib/features/email_recovery/presentation/email_recovery_controller.dart index 25ebfaadd..50b1c8555 100644 --- a/lib/features/email_recovery/presentation/email_recovery_controller.dart +++ b/lib/features/email_recovery/presentation/email_recovery_controller.dart @@ -21,6 +21,7 @@ import 'package:tmail_ui_user/features/composer/domain/usecases/get_all_autocomp import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete_interactor.dart'; import 'package:tmail_ui_user/features/composer/domain/usecases/get_device_contact_suggestions_interactor.dart'; import 'package:tmail_ui_user/features/email_recovery/presentation/controller/input_field_focus_manager.dart'; +import 'package:tmail_ui_user/features/email_recovery/presentation/extension/handle_auto_create_email_address_tag_extension.dart'; import 'package:tmail_ui_user/features/email_recovery/presentation/model/email_recovery_arguments.dart'; import 'package:tmail_ui_user/features/email_recovery/presentation/model/session_extension.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart'; @@ -147,6 +148,9 @@ class EmailRecoveryController extends BaseController with DateRangePickerMixin { recipientsExpandMode.value = ExpandMode.EXPAND; senderExpandMode.value = ExpandMode.COLLAPSE; _closeSuggestionBox(); + } else { + recipientsExpandMode.value = ExpandMode.COLLAPSE; + autoCreateTagForFilterField(FilterField.recipients); } } @@ -155,6 +159,9 @@ class EmailRecoveryController extends BaseController with DateRangePickerMixin { senderExpandMode.value = ExpandMode.EXPAND; recipientsExpandMode.value = ExpandMode.COLLAPSE; _closeSuggestionBox(); + } else { + senderExpandMode.value = ExpandMode.COLLAPSE; + autoCreateTagForFilterField(FilterField.sender); } } diff --git a/lib/features/email_recovery/presentation/extension/handle_auto_create_email_address_tag_extension.dart b/lib/features/email_recovery/presentation/extension/handle_auto_create_email_address_tag_extension.dart new file mode 100644 index 000000000..dbeb45d91 --- /dev/null +++ b/lib/features/email_recovery/presentation/extension/handle_auto_create_email_address_tag_extension.dart @@ -0,0 +1,61 @@ + +import 'package:flutter/material.dart'; +import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; +import 'package:model/extensions/list_email_address_extension.dart'; +import 'package:super_tag_editor/tag_editor.dart'; +import 'package:tmail_ui_user/features/base/model/filter_filter.dart'; +import 'package:tmail_ui_user/features/email_recovery/presentation/email_recovery_controller.dart'; + +extension AutoCreateEmailAddressTagExtension on EmailRecoveryController { + void autoCreateTagForFilterField(FilterField field) { + final currentText = _getCurrentTextInInputField(field); + if (currentText.isEmpty) return; + + switch (field) { + case FilterField.recipients: + if (!listRecipients.isDuplicatedEmail(currentText)) { + _synchronizeListEmailAddressInInputField( + inputEmail: currentText, + listEmailAddress: listRecipients, + tagEditorFieldKey: recipientsFieldKey, + ); + } + break; + case FilterField.sender: + if (!listSenders.isDuplicatedEmail(currentText)) { + _synchronizeListEmailAddressInInputField( + inputEmail: currentText, + listEmailAddress: listSenders, + tagEditorFieldKey: senderFieldKey, + ); + } + break; + default: + } + } + + void _synchronizeListEmailAddressInInputField({ + required String inputEmail, + required GlobalKey tagEditorFieldKey, + required List listEmailAddress, + }) { + final emailAddress = EmailAddress(null, inputEmail); + listEmailAddress.add(emailAddress); + tagEditorFieldKey.currentState?.resetTextField(); + Future.delayed( + const Duration(milliseconds: 300), + tagEditorFieldKey.currentState?.closeSuggestionBox, + ); + } + + String _getCurrentTextInInputField(FilterField field) { + switch (field) { + case FilterField.recipients: + return recipientsFieldInputController.text; + case FilterField.sender: + return senderFieldInputController.text; + default: + return ''; + } + } +} \ No newline at end of file diff --git a/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart index 7fea47b69..e47f562af 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart @@ -1,4 +1,3 @@ -import 'package:collection/collection.dart'; import 'package:core/core.dart'; import 'package:dartz/dartz.dart'; import 'package:flutter/material.dart'; @@ -398,20 +397,13 @@ class AdvancedFilterController extends BaseController { } } - bool _isDuplicatedEmailAddress(String inputEmail, List listEmailAddress) { - return listEmailAddress - .map((emailAddress) => emailAddress.email) - .whereNotNull() - .contains(inputEmail); - } - void _autoCreateTagFromField() { final inputEmail = fromEmailAddressController.text; if (inputEmail.isEmpty) { return; } - if (!_isDuplicatedEmailAddress(inputEmail, listFromEmailAddress)) { + if (!listFromEmailAddress.isDuplicatedEmail(inputEmail)) { final emailAddress = EmailAddress(null, inputEmail); listFromEmailAddress.add(emailAddress); _updateMemorySearchFilter(fromOption: Some(listFromEmailAddress.asSetAddress())); @@ -428,7 +420,7 @@ class AdvancedFilterController extends BaseController { return; } - if (!_isDuplicatedEmailAddress(inputEmail, listToEmailAddress)) { + if (!listToEmailAddress.isDuplicatedEmail(inputEmail)) { listToEmailAddress.add(EmailAddress(null, inputEmail)); _updateMemorySearchFilter(toOption: Some(listToEmailAddress.asSetAddress())); keyToEmailTagEditor.currentState?.resetTextField(); diff --git a/model/lib/extensions/list_email_address_extension.dart b/model/lib/extensions/list_email_address_extension.dart index 79d28a076..386347b9d 100644 --- a/model/lib/extensions/list_email_address_extension.dart +++ b/model/lib/extensions/list_email_address_extension.dart @@ -96,4 +96,8 @@ extension ListEmailAddressExtension on List { } }).toList(); } + + bool isDuplicatedEmail(String inputEmail) { + return any((emailAddress) => emailAddress.emailAddress == inputEmail); + } } \ No newline at end of file