From 586b8505e03c00a1bd82d5c20200fc8b75a1725a Mon Sep 17 00:00:00 2001 From: dab246 Date: Sat, 23 Nov 2024 11:09:32 +0700 Subject: [PATCH] TF-3292 Fix [SEARCH] If I filter emails by date and then sort them by relevance, the filter isn't applied --- docs/adr/0052-logic-sort-order-in-search.md | 2 +- .../model/search/search_email_filter.dart | 8 ++------ .../email/presentation/search_email_controller.dart | 12 +++++++++--- .../thread/presentation/thread_controller.dart | 10 +++++----- 4 files changed, 17 insertions(+), 15 deletions(-) diff --git a/docs/adr/0052-logic-sort-order-in-search.md b/docs/adr/0052-logic-sort-order-in-search.md index d90b87dfc..0fddafc81 100644 --- a/docs/adr/0052-logic-sort-order-in-search.md +++ b/docs/adr/0052-logic-sort-order-in-search.md @@ -79,7 +79,7 @@ Accepted Brief the logic flows when click `Sort Order` in search: -- To sort by `Subject`, `Sender` or `Relevance` we will have to use the `position` property and ignore `before` and `after` in `conditions` of `filter` +- To sort by `Subject`, `Sender` or `Relevance` we will have to use the `position` property of `filter` ```json { 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 d5b4846e0..954729538 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 @@ -99,16 +99,12 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin { ? text?.value.trim() : null, inMailbox: mailbox?.mailboxId, - after: sortOrderType.isScrollByPosition() - ? null - : emailReceiveTimeType.getAfterDate(startDate), + after: emailReceiveTimeType.getAfterDate(startDate), hasAttachment: !hasAttachment ? null : hasAttachment, subject: subject?.trim().isNotEmpty == true ? subject?.trim() : null, - before: sortOrderType.isScrollByPosition() - ? null - : emailReceiveTimeType.getBeforeDate(endDate, before), + before: emailReceiveTimeType.getBeforeDate(endDate, before), from: from.length == 1 ? from.first : null, diff --git a/lib/features/search/email/presentation/search_email_controller.dart b/lib/features/search/email/presentation/search_email_controller.dart index e92905595..3f883e87d 100644 --- a/lib/features/search/email/presentation/search_email_controller.dart +++ b/lib/features/search/email/presentation/search_email_controller.dart @@ -215,7 +215,9 @@ class SearchEmailController extends BaseController currentSearchText.value = value; _updateSimpleSearchFilter( textOption: option(value.isNotEmpty, SearchQuery(value)), - beforeOption: const None(), + beforeOption: !searchEmailFilter.value.sortOrderType.isScrollByPosition() + ? const None() + : null, positionOption: option(searchEmailFilter.value.sortOrderType.isScrollByPosition(), 0) ); if (value.isNotEmpty && session != null && accountId != null) { @@ -319,7 +321,9 @@ class SearchEmailController extends BaseController : ThreadConstants.defaultLimit; _updateSimpleSearchFilter( - beforeOption: const None(), + beforeOption: !searchEmailFilter.value.sortOrderType.isScrollByPosition() + ? const None() + : null, positionOption: option(searchEmailFilter.value.sortOrderType.isScrollByPosition(), 0), ); @@ -435,7 +439,9 @@ class SearchEmailController extends BaseController _updateSimpleSearchFilter( positionOption: option(searchEmailFilter.value.sortOrderType.isScrollByPosition(), 0), - beforeOption: const None(), + beforeOption: !searchEmailFilter.value.sortOrderType.isScrollByPosition() + ? const None() + : null, ); consumeState(_searchEmailInteractor.execute( diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index 543329b30..5459832a2 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -949,7 +949,10 @@ class ThreadController extends BaseController with EmailActionController { searchController.updateFilterEmail( positionOption: option(_searchEmailFilter.sortOrderType.isScrollByPosition(), 0), - beforeOption: const None()); + beforeOption: !_searchEmailFilter.sortOrderType.isScrollByPosition() + ? const None() + : null, + ); searchController.activateSimpleSearch(); @@ -1023,10 +1026,7 @@ class ThreadController extends BaseController with EmailActionController { if (_searchEmailFilter.sortOrderType.isScrollByPosition()) { final nextPosition = mailboxDashBoardController.emailsInCurrentMailbox.length; log('ThreadController::_searchMoreEmails:nextPosition: $nextPosition'); - searchController.updateFilterEmail( - positionOption: Some(nextPosition), - beforeOption: const None() - ); + searchController.updateFilterEmail(positionOption: Some(nextPosition)); } else if (_searchEmailFilter.sortOrderType == EmailSortOrderType.oldest) { searchController.updateFilterEmail(startDateOption: optionOf(lastEmail?.receivedAt)); } else {