From 5d6d3afb78cf4770fe9059eabca8b2bdff644a0f Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 2 Oct 2024 00:39:46 +0700 Subject: [PATCH] TF-3025 Avoid search results being reloaded when performing certain actions `read/star/...` --- .../thread/domain/state/search_email_state.dart | 2 ++ .../domain/usecases/search_email_interactor.dart | 7 ++++++- .../thread/presentation/thread_controller.dart | 11 +++++++---- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/lib/features/thread/domain/state/search_email_state.dart b/lib/features/thread/domain/state/search_email_state.dart index 701b96a09..05599e9de 100644 --- a/lib/features/thread/domain/state/search_email_state.dart +++ b/lib/features/thread/domain/state/search_email_state.dart @@ -4,6 +4,8 @@ import 'package:model/email/presentation_email.dart'; class SearchingState extends LoadingState {} +class RefreshingSearchState extends LoadingState {} + class SearchEmailSuccess extends UIState { final List emailList; diff --git a/lib/features/thread/domain/usecases/search_email_interactor.dart b/lib/features/thread/domain/usecases/search_email_interactor.dart index 2646f834d..6a096dcdb 100644 --- a/lib/features/thread/domain/usecases/search_email_interactor.dart +++ b/lib/features/thread/domain/usecases/search_email_interactor.dart @@ -26,10 +26,15 @@ class SearchEmailInteractor { Set? sort, Filter? filter, Properties? properties, + bool isRefreshChange = false, } ) async* { try { - yield Right(SearchingState()); + if (isRefreshChange) { + yield Right(RefreshingSearchState()); + } else { + yield Right(SearchingState()); + } final emailList = await threadRepository.searchEmails( session, diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index 995d3c010..bac4ccf63 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -578,7 +578,7 @@ class ThreadController extends BaseController with EmailActionController { void _refreshEmailChanges({jmap.State? currentEmailState}) { log('ThreadController::_refreshEmailChanges(): currentEmailState: $currentEmailState'); if (searchController.isSearchEmailRunning) { - _searchEmail(limit: limitEmailFetched); + _searchEmail(limit: limitEmailFetched, isRefreshChange: true); } else { final newEmailState = currentEmailState ?? _currentEmailState; log('ThreadController::_refreshEmailChanges(): newEmailState: $newEmailState'); @@ -802,12 +802,14 @@ class ThreadController extends BaseController with EmailActionController { searchController.clearTextSearch(); } - void _searchEmail({UnsignedInt? limit}) { + void _searchEmail({UnsignedInt? limit, bool isRefreshChange = false}) { if (_session != null && _accountId != null) { - if (listEmailController.hasClients) { + if (!isRefreshChange && listEmailController.hasClients) { listEmailController.jumpTo(0); } - mailboxDashBoardController.emailsInCurrentMailbox.clear(); + if (!isRefreshChange) { + mailboxDashBoardController.emailsInCurrentMailbox.clear(); + } canSearchMore = false; searchController.updateFilterEmail( @@ -826,6 +828,7 @@ class ThreadController extends BaseController with EmailActionController { moreFilterCondition: _getFilterCondition() ), properties: EmailUtils.getPropertiesForEmailGetMethod(_session!, _accountId!), + isRefreshChange: isRefreshChange )); } else { consumeState(Stream.value(Left(SearchEmailFailure(NotFoundSessionException()))));