From 1d6b8a13bd80b52b9b4512086e14a8a51d5d1554 Mon Sep 17 00:00:00 2001 From: HuyNguyen Date: Wed, 26 Apr 2023 14:36:25 +0700 Subject: [PATCH] TF-1677: Support validation email for `something@localhost` case (cherry picked from commit e74208941e8e5a2480bb444eca6b462bc576eb94) --- .../widgets/autocomplete_contact_text_field_with_tags.dart | 3 ++- .../contact/presentation/widgets/contact_input_tag_item.dart | 3 ++- lib/main/utils/app_utils.dart | 4 ++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/features/contact/presentation/widgets/autocomplete_contact_text_field_with_tags.dart b/lib/features/contact/presentation/widgets/autocomplete_contact_text_field_with_tags.dart index 1f0db89ea..0251ef4f2 100644 --- a/lib/features/contact/presentation/widgets/autocomplete_contact_text_field_with_tags.dart +++ b/lib/features/contact/presentation/widgets/autocomplete_contact_text_field_with_tags.dart @@ -18,6 +18,7 @@ import 'package:tmail_ui_user/features/contact/presentation/widgets/contact_inpu import 'package:tmail_ui_user/features/contact/presentation/widgets/contact_suggestion_box_item.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings_utils.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; +import 'package:tmail_ui_user/main/utils/app_utils.dart'; typedef OnSuggestionContactCallbackAction = Future> Function(String query); typedef OnAddListContactCallbackAction = Function(List listEmailAddress); @@ -256,7 +257,7 @@ class _AutocompleteContactTextFieldWithTagsState extends State addedEmailAddress) { - return addedEmailAddress.every((addedMail) => addedMail.emailAddress.isEmail); + return addedEmailAddress.every((addedMail) => addedMail.emailAddress.isEmail || AppUtils.isEmailLocalhost(addedMail.emailAddress)); } bool _inputFieldIsEmpty() { diff --git a/lib/features/contact/presentation/widgets/contact_input_tag_item.dart b/lib/features/contact/presentation/widgets/contact_input_tag_item.dart index 1729019f2..0a15725da 100644 --- a/lib/features/contact/presentation/widgets/contact_input_tag_item.dart +++ b/lib/features/contact/presentation/widgets/contact_input_tag_item.dart @@ -9,6 +9,7 @@ import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; import 'package:model/extensions/email_address_extension.dart'; import 'package:tmail_ui_user/features/contact/presentation/widgets/gradient_color_avatar_icon.dart'; +import 'package:tmail_ui_user/main/utils/app_utils.dart'; typedef DeleteContactCallbackAction = Function(EmailAddress contactDeleted); @@ -84,7 +85,7 @@ class ContactInputTagItem extends StatelessWidget { } } - bool _isValidEmailAddress(String value) => value.isEmail; + bool _isValidEmailAddress(String value) => value.isEmail || AppUtils.isEmailLocalhost(value); Color _getTagBackgroundColor() { if (lastTagFocused && isLastContact) { diff --git a/lib/main/utils/app_utils.dart b/lib/main/utils/app_utils.dart index 6ea513931..6f7a7d592 100644 --- a/lib/main/utils/app_utils.dart +++ b/lib/main/utils/app_utils.dart @@ -32,4 +32,8 @@ class AppUtils { static bool isDirectionRTL(BuildContext context) { return intl.Bidi.isRtlLanguage(Localizations.localeOf(context).languageCode); } + + static bool isEmailLocalhost(String email) { + return RegExp(r'^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@localhost$').hasMatch(email); + } } \ No newline at end of file