TF-2381 Fix duplicate searching result after load mre

(cherry picked from commit 1cebbf8495990e9eecd78500a6c08d116314d5dc)
This commit is contained in:
hieubt
2023-12-05 22:17:17 +07:00
committed by Dat H. Pham
parent d4f72b7d81
commit 1ad18e5ecc
3 changed files with 20 additions and 6 deletions
@@ -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)) {
@@ -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,
@@ -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,