From 1ad18e5ecc10129993935c986d0dc1681db250ed Mon Sep 17 00:00:00 2001 From: hieubt Date: Tue, 5 Dec 2023 22:17:17 +0700 Subject: [PATCH] TF-2381 Fix duplicate searching result after load mre (cherry picked from commit 1cebbf8495990e9eecd78500a6c08d116314d5dc) --- .../controller/mailbox_dashboard_controller.dart | 1 + .../presentation/search_email_controller.dart | 9 +++++++-- .../thread/presentation/thread_controller.dart | 16 ++++++++++++---- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart index 2d326a67a..14776bba9 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -621,6 +621,7 @@ class MailboxDashBoardController extends ReloadableController { if (queryString?.isNotEmpty == true) { searchController.updateFilterEmail(text: SearchQuery(queryString!)); } + searchController.updateFilterEmail(sortOrderOption: searchController.sortOrderFiltered.value.getSortOrder()); dispatchAction(StartSearchEmailAction()); KeyboardUtils.hideKeyboard(context); if (_searchInsideEmailDetailedViewIsActive(context)) { diff --git a/lib/features/search/email/presentation/search_email_controller.dart b/lib/features/search/email/presentation/search_email_controller.dart index d6ad911de..b3a3ef584 100644 --- a/lib/features/search/email/presentation/search_email_controller.dart +++ b/lib/features/search/email/presentation/search_email_controller.dart @@ -362,7 +362,12 @@ class SearchEmailController extends BaseController void searchMoreEmailsAction() { if (canSearchMore && session != null && accountId != null) { final lastEmail = listResultSearch.last; - _updateSimpleSearchFilter(beforeOption: optionOf(lastEmail.receivedAt)); + final firstEmail = listResultSearch.first; + if (emailSortOrderType.value == EmailSortOrderType.oldest) { + _updateSimpleSearchFilter(beforeOption: optionOf(firstEmail.receivedAt)); + } else { + _updateSimpleSearchFilter(beforeOption: optionOf(lastEmail.receivedAt)); + } consumeState(_searchMoreEmailInteractor.execute( session!, @@ -384,7 +389,7 @@ class SearchEmailController extends BaseController if (success.emailList.isNotEmpty) { final resultEmailSearchList = success.emailList .map((email) => email.toSearchPresentationEmail(mailboxDashBoardController.mapMailboxById)) - .where((email) => !listResultSearch.contains(email)) + .where((email) => listResultSearch.every((emailInCurrentList) => emailInCurrentList.id != email.id)) .toList() .syncPresentationEmail( mapMailboxById: mailboxDashBoardController.mapMailboxById, diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index 5b803c446..ef2e015c0 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -37,6 +37,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/remove_ema import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart' as search; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_email_rule_filter_request.dart'; import 'package:tmail_ui_user/features/manage_account/domain/state/create_new_rule_filter_state.dart'; @@ -779,10 +780,17 @@ class ThreadController extends BaseController with EmailActionController { void searchMoreEmails() { if (canSearchMore && _session != null && _accountId != null) { - final oldestEmail = mailboxDashBoardController.emailsInCurrentMailbox.isNotEmpty + final lastEmail = mailboxDashBoardController.emailsInCurrentMailbox.isNotEmpty ? mailboxDashBoardController.emailsInCurrentMailbox.last : null; - searchController.updateFilterEmail(beforeOption: optionOf(oldestEmail?.receivedAt)); + final firstEmail = mailboxDashBoardController.emailsInCurrentMailbox.isNotEmpty + ? mailboxDashBoardController.emailsInCurrentMailbox.first + : null; + if (optionOf(_searchEmailFilter.sortOrder).toString() == EmailSortOrderType.oldest.getSortOrder().toString()) { + searchController.updateFilterEmail(beforeOption: optionOf(firstEmail?.receivedAt)); + } else { + searchController.updateFilterEmail(beforeOption: optionOf(lastEmail?.receivedAt)); + } consumeState(_searchMoreEmailInteractor.execute( _session!, _accountId!, @@ -790,7 +798,7 @@ class ThreadController extends BaseController with EmailActionController { sort: _searchEmailFilter.sortOrder ?? _sortOrder, filter: _searchEmailFilter.mappingToEmailFilterCondition(moreFilterCondition: _getFilterCondition()), properties: EmailUtils.getPropertiesForEmailGetMethod(_session!, _accountId!), - lastEmailId: oldestEmail?.id + lastEmailId: lastEmail?.id )); } } @@ -802,7 +810,7 @@ class ThreadController extends BaseController with EmailActionController { canSearchMore = true; final resultEmailSearchList = success.emailList .map((email) => email.toSearchPresentationEmail(mailboxDashBoardController.mapMailboxById)) - .where((email) => !mailboxDashBoardController.emailsInCurrentMailbox.contains(email)) + .where((email) => mailboxDashBoardController.emailsInCurrentMailbox.every((emailInCurrentMailbox) => emailInCurrentMailbox.id != email.id)) .toList() .syncPresentationEmail( mapMailboxById: mailboxDashBoardController.mapMailboxById,