Auto create email address tag for input field
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+61
@@ -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 '';
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-10
@@ -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<EmailAddress> 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();
|
||||
|
||||
@@ -96,4 +96,8 @@ extension ListEmailAddressExtension on List<EmailAddress> {
|
||||
}
|
||||
}).toList();
|
||||
}
|
||||
|
||||
bool isDuplicatedEmail(String inputEmail) {
|
||||
return any((emailAddress) => emailAddress.emailAddress == inputEmail);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user