Auto create email address tag for input field

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-07-11 11:14:38 +07:00
committed by Dat H. Pham
parent 3457601d14
commit bfea3406cf
4 changed files with 74 additions and 10 deletions
@@ -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);
}
}
@@ -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<TagsEditorState> tagEditorFieldKey,
required List<EmailAddress> 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 '';
}
}
}