From 0c4fe85b69bc652f110d8953ccebb1b8b070fa46 Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 8 Nov 2023 14:50:26 +0700 Subject: [PATCH] TF-1155 Automatically clear value of `From/To` field when disable advanced search Signed-off-by: dab246 (cherry picked from commit 6f6e6970887525f3fbb9d0003eda8e1c5d41afa0) --- .../advanced_filter_controller.dart | 55 +++++++++---------- .../controller/search_controller.dart | 4 +- .../model/search/search_email_filter.dart | 4 +- ...vanced_search_filter_form_bottom_view.dart | 4 +- .../advanced_search_input_form.dart | 12 ++-- ..._field_autocomplete_email_address_web.dart | 1 - 6 files changed, 37 insertions(+), 43 deletions(-) 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 b537e0179..2ee004cef 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart @@ -37,8 +37,6 @@ class AdvancedFilterController extends BaseController { final dateFilterSelectedFormAdvancedSearch = EmailReceiveTimeType.allTime.obs; final hasAttachment = false.obs; - final lastTextForm = ''.obs; - final lastTextTo = ''.obs; final startDate = Rxn(); final endDate = Rxn(); @@ -90,19 +88,13 @@ class AdvancedFilterController extends BaseController { super.onReady(); } - void cleanSearchFilter(BuildContext context) { + void clearSearchFilter(BuildContext context) { searchController.clearSearchFilter(); - _updateDateRangeTime(EmailReceiveTimeType.allTime); - subjectFilterInputController.text = ''; - hasKeyWordFilterInputController.text = ''; - notKeyWordFilterInputController.text = ''; - fromEmailAddressController.text = ''; - toEmailAddressController.text = ''; - hasAttachment.value = false; - _destinationMailboxSelected = null; + _resetAllToOriginalValue(); + _clearAllTextFieldInput(); searchController.searchInputController.clear(); searchController.deactivateAdvancedSearch(); - searchController.isAdvancedSearchViewOpen.toggle(); + searchController.isAdvancedSearchViewOpen.value = false; _mailboxDashBoardController.searchEmail(context); } @@ -120,17 +112,17 @@ class AdvancedFilterController extends BaseController { searchController.updateFilterEmail(notKeyword: {}); } - if (lastTextForm.isNotEmpty && !searchController.searchEmailFilter.value.from.contains(lastTextForm.value)){ - searchController.updateFilterEmail(fromOption: Some(searchController.searchEmailFilter.value.from..add(lastTextForm.value))); - lastTextForm.value = ''; + if (listFromEmailAddress.isNotEmpty) { + final listAddress = listFromEmailAddress.map((emailAddress) => emailAddress.emailAddress).toSet(); + searchController.updateFilterEmail(fromOption: Some(listAddress)); + } else { + searchController.updateFilterEmail(fromOption: const None()); } - - if (lastTextTo.isNotEmpty && !searchController.searchEmailFilter.value.to.contains(lastTextTo.value)){ - searchController.updateFilterEmail( - to: searchController.searchEmailFilter.value.to..add(lastTextTo.value), - ); - - lastTextTo.value = ''; + if (listToEmailAddress.isNotEmpty) { + final listAddress = listToEmailAddress.map((emailAddress) => emailAddress.emailAddress).toSet(); + searchController.updateFilterEmail(toOption: Some(listAddress)); + } else { + searchController.updateFilterEmail(toOption: const None()); } searchController.updateFilterEmail( @@ -181,7 +173,7 @@ class AdvancedFilterController extends BaseController { if (!isAdvancedSearchHasApplied) { searchController.updateFilterEmail(beforeOption: const None()); } - searchController.isAdvancedSearchViewOpen.toggle(); + searchController.isAdvancedSearchViewOpen.value = false; _mailboxDashBoardController.searchEmail(context); } @@ -271,6 +263,12 @@ class AdvancedFilterController extends BaseController { mailBoxFilterInputController.text = StringConvert.writeNullToEmpty(searchEmailFilter.mailbox?.getDisplayName(context)); } hasAttachment.value = searchEmailFilter.hasAttachment; + if (searchEmailFilter.from.isEmpty) { + listFromEmailAddress.clear(); + } + if (searchEmailFilter.to.isEmpty) { + listToEmailAddress.clear(); + } } void selectDateRange(BuildContext context) { @@ -369,11 +367,9 @@ class AdvancedFilterController extends BaseController { switch(field) { case AdvancedSearchFilterField.from: listFromEmailAddress = List.from(listEmailAddress); - searchEmailFilter.from.addAll(listEmailAddress.map((emailAddress) => emailAddress.emailAddress)); break; case AdvancedSearchFilterField.to: listToEmailAddress = List.from(listEmailAddress); - searchEmailFilter.to.addAll(listEmailAddress.map((emailAddress) => emailAddress.emailAddress)); break; default: break; @@ -420,12 +416,11 @@ class AdvancedFilterController extends BaseController { } void _resetAllToOriginalValue() { - dateFilterSelectedFormAdvancedSearch.value = EmailReceiveTimeType.allTime; + _updateDateRangeTime(EmailReceiveTimeType.allTime); hasAttachment.value = false; - lastTextForm.value = ''; - lastTextTo.value = ''; - startDate.value = null; - endDate.value = null; + listFromEmailAddress.clear(); + listToEmailAddress.clear(); + _destinationMailboxSelected = null; } void _clearAllTextFieldInput() { diff --git a/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart index e09a49357..4a673f4f6 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart @@ -172,7 +172,7 @@ class SearchController extends BaseController with DateRangePickerMixin { void updateFilterEmail({ Option>? fromOption, - Set? to, + Option>? toOption, SearchQuery? text, Option? subjectOption, Set? notKeyword, @@ -185,7 +185,7 @@ class SearchController extends BaseController with DateRangePickerMixin { }) { searchEmailFilter.value = searchEmailFilter.value.copyWith( fromOption: fromOption, - to: to, + toOption: toOption, text: text, subjectOption: subjectOption, notKeyword: notKeyword, diff --git a/lib/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart b/lib/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart index 9789f8ad4..8a3e90bda 100644 --- a/lib/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart +++ b/lib/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart @@ -47,7 +47,7 @@ class SearchEmailFilter with EquatableMixin { SearchEmailFilter copyWith({ Option>? fromOption, - Set? to, + Option>? toOption, SearchQuery? text, Option? subjectOption, Set? notKeyword, @@ -60,7 +60,7 @@ class SearchEmailFilter with EquatableMixin { }) { return SearchEmailFilter( from: _getOptionParam(fromOption, from), - to: to ?? this.to, + to: _getOptionParam(toOption, to), text: text ?? this.text, subject: _getOptionParam(subjectOption, subject), notKeyword: notKeyword ?? this.notKeyword, diff --git a/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_form_bottom_view.dart b/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_form_bottom_view.dart index 3626a3504..f170a5607 100644 --- a/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_form_bottom_view.dart +++ b/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_form_bottom_view.dart @@ -47,7 +47,7 @@ class AdvancedSearchFilterFormBottomView extends GetWidget @override Widget build(BuildContext context) { return FocusTraversalGroup( - child: Obx(() => Column( + child: Column( children: [ - TextFieldAutocompleteEmailAddressWeb( + Obx(() => TextFieldAutocompleteEmailAddressWeb( field: AdvancedSearchFilterField.from, listEmailAddress: controller.listFromEmailAddress, expandMode: controller.fromAddressExpandMode.value, @@ -40,8 +40,8 @@ class AdvancedSearchInputForm extends GetWidget onShowFullListEmailAddressAction: controller.showFullEmailAddress, onUpdateListEmailAddressAction: controller.updateListEmailAddress, onSuggestionEmailAddress: controller.getAutoCompleteSuggestion, - ), - TextFieldAutocompleteEmailAddressWeb( + )), + Obx(() => TextFieldAutocompleteEmailAddressWeb( field: AdvancedSearchFilterField.to, listEmailAddress: controller.listToEmailAddress, expandMode: controller.toAddressExpandMode.value, @@ -52,7 +52,7 @@ class AdvancedSearchInputForm extends GetWidget onShowFullListEmailAddressAction: controller.showFullEmailAddress, onUpdateListEmailAddressAction: controller.updateListEmailAddress, onSuggestionEmailAddress: controller.getAutoCompleteSuggestion, - ), + )), _buildFilterField( textEditingController: controller.subjectFilterInputController, context: context, @@ -109,7 +109,7 @@ class AdvancedSearchInputForm extends GetWidget ]), AdvancedSearchFilterFormBottomView(focusManager: controller.focusManager) ], - )), + ), ); } diff --git a/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/text_field_autocomplete_email_address_web.dart b/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/text_field_autocomplete_email_address_web.dart index b0263275a..75442699e 100644 --- a/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/text_field_autocomplete_email_address_web.dart +++ b/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/text_field_autocomplete_email_address_web.dart @@ -110,7 +110,6 @@ class _TextFieldAutocompleteEmailAddressWebState extends State