From e52617fd245318766ad9b1005764924bbadbb0fb Mon Sep 17 00:00:00 2001 From: ManhNTX Date: Thu, 14 Jul 2022 09:15:19 +0700 Subject: [PATCH] TF-709: After search with advanced search, load more is not show corrected results --- .../presentation/controller/search_controller.dart | 3 +++ .../presentation/model/search/search_email_filter.dart | 8 +++++++- lib/features/thread/presentation/thread_controller.dart | 5 ++--- lib/features/thread/presentation/thread_view.dart | 2 +- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart index 94f8b27b4..7fdae28ab 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart @@ -6,6 +6,7 @@ import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/sort/comparator.dart'; import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; +import 'package:jmap_dart_client/jmap/core/utc_date.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_comparator.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_comparator_property.dart'; import 'package:model/model.dart'; @@ -125,6 +126,7 @@ class SearchController extends BaseController { PresentationMailbox? mailbox, EmailReceiveTimeType? emailReceiveTimeType, bool? hasAttachment, + UTCDate? before, }) { searchEmailFilter.value = searchEmailFilter.value.copyWith( from: from, @@ -136,6 +138,7 @@ class SearchController extends BaseController { mailbox: mailbox, emailReceiveTimeType: emailReceiveTimeType, hasAttachment: hasAttachment, + before: before, ); } 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 4badd6cc8..96e9ee56b 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 @@ -1,6 +1,7 @@ import 'package:jmap_dart_client/jmap/core/filter/filter.dart'; import 'package:jmap_dart_client/jmap/core/filter/filter_operator.dart'; import 'package:jmap_dart_client/jmap/core/filter/operator/logic_filter_operator.dart'; +import 'package:jmap_dart_client/jmap/core/utc_date.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart'; import 'package:model/model.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart'; @@ -16,6 +17,7 @@ class SearchEmailFilter { final PresentationMailbox? mailbox; final EmailReceiveTimeType emailReceiveTimeType; final bool hasAttachment; + final UTCDate? before; SearchEmailFilter({ Set? from, @@ -27,6 +29,7 @@ class SearchEmailFilter { Set? hasKeyword, Set? notKeyword, this.mailbox, + this.before, }) : from = from ?? {}, to = to ?? {}, hasKeyword = hasKeyword ?? {}, @@ -45,6 +48,7 @@ class SearchEmailFilter { PresentationMailbox? mailbox, EmailReceiveTimeType? emailReceiveTimeType, bool? hasAttachment, + UTCDate? before, }) { return SearchEmailFilter( from: from ?? this.from, @@ -56,16 +60,18 @@ class SearchEmailFilter { mailbox: mailbox ?? this.mailbox, emailReceiveTimeType: emailReceiveTimeType ?? this.emailReceiveTimeType, hasAttachment: hasAttachment ?? this.hasAttachment, + before: before ?? this.before, ); } - Filter? mappingToEmailFilterCondition({Filter? moreFilterCondition}) { + Filter mappingToEmailFilterCondition({Filter? moreFilterCondition}) { final emailEmailFilterConditionShared = EmailFilterCondition( text: text?.value, inMailbox: mailbox?.id, after: emailReceiveTimeType.toUTCDate(), hasAttachment: hasAttachment == false ? null : hasAttachment, subject: subject, + before: before, ); return LogicFilterOperator(Operator.AND, { emailEmailFilterConditionShared, diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index 6020c8373..6d825fc18 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -865,13 +865,12 @@ class ThreadController extends BaseController { void searchMoreEmails() { if (canSearchMore && _accountId != null) { + searchController.updateFilterEmail(before: emailList.last.receivedAt); consumeState(_searchMoreEmailInteractor.execute( _accountId!, limit: ThreadConstants.defaultLimit, sort: _sortOrder, - filter: EmailFilterCondition( - text: searchQuery?.value, - before: emailList.last.receivedAt), + filter: searchController.searchEmailFilter.value.mappingToEmailFilterCondition(), properties: ThreadConstants.propertiesDefault, lastEmailId: emailList.last.id )); diff --git a/lib/features/thread/presentation/thread_view.dart b/lib/features/thread/presentation/thread_view.dart index 0cf7033fb..b254fdc67 100644 --- a/lib/features/thread/presentation/thread_view.dart +++ b/lib/features/thread/presentation/thread_view.dart @@ -540,7 +540,7 @@ class ThreadView extends GetWidget with AppLoaderMixin, && !controller.isLoadingMore && scrollInfo.metrics.pixels == scrollInfo.metrics.maxScrollExtent ) { - if (controller.isSearchActive()) { + if (controller.isSearchActive() || controller.isAdvanceSearchActive()) { controller.searchMoreEmails(); } else { controller.loadMoreEmails();