From d36327f69c3bfdafddf168df96ae930081dc2c12 Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 18 Dec 2024 13:08:00 +0700 Subject: [PATCH] TF-3334 Auto resynchronisation search view when receives websocket notification on mobile & tablet responsive web --- .../presentation/search_email_controller.dart | 14 +++++- .../presentation/thread_controller.dart | 44 ++++++++++--------- 2 files changed, 35 insertions(+), 23 deletions(-) diff --git a/lib/features/search/email/presentation/search_email_controller.dart b/lib/features/search/email/presentation/search_email_controller.dart index aec3fce50..f96f957ea 100644 --- a/lib/features/search/email/presentation/search_email_controller.dart +++ b/lib/features/search/email/presentation/search_email_controller.dart @@ -31,6 +31,7 @@ import 'package:tmail_ui_user/features/composer/presentation/extensions/prefix_e import 'package:tmail_ui_user/features/contact/presentation/model/contact_arguments.dart'; import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart'; import 'package:tmail_ui_user/features/email/domain/model/mark_read_action.dart'; +import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.dart'; import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart'; import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart'; @@ -100,7 +101,7 @@ class SearchEmailController extends BaseController final resultSearchViewState = Rx>(Right(UIState.idle)); late Debouncer _deBouncerTime; - late Worker dashBoardViewStateWorker; + late Worker emailUIActionWorker; late Worker dashBoardActionWorker; late SearchMoreState searchMoreState; late bool canSearchMore; @@ -246,6 +247,15 @@ class SearchEmailController extends BaseController } } ); + + emailUIActionWorker = ever( + mailboxDashBoardController.emailUIAction, + (action) { + if (action is RefreshChangeEmailAction) { + _refreshEmailChanges(); + } + }, + ); } void _onSearchTextInputListener() { @@ -966,7 +976,7 @@ class SearchEmailController extends BaseController resultSearchScrollController.dispose(); listSearchFilterScrollController.dispose(); _deBouncerTime.cancel(); - dashBoardViewStateWorker.dispose(); + emailUIActionWorker.dispose(); dashBoardActionWorker.dispose(); super.onClose(); } diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index 61ba7fdbb..8aac45a65 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -316,10 +316,7 @@ class ThreadController extends BaseController with EmailActionController { ever(mailboxDashBoardController.emailUIAction, (action) { if (action is RefreshChangeEmailAction) { - if (action.newState != _currentEmailState) { - _refreshEmailChanges(); - } - mailboxDashBoardController.clearEmailUIAction(); + _refreshEmailChanges(newState: action.newState); } else if (action is RefreshAllEmailAction) { refreshAllEmail(); mailboxDashBoardController.clearEmailUIAction(); @@ -516,28 +513,33 @@ class ThreadController extends BaseController with EmailActionController { return limit; } - void _refreshEmailChanges({jmap.State? currentEmailState}) { - log('ThreadController::_refreshEmailChanges(): currentEmailState: $currentEmailState'); + void _refreshEmailChanges({jmap.State? newState}) { + log('ThreadController::_refreshEmailChanges(): newState: $newState'); if (searchController.isSearchEmailRunning) { _searchEmail(limit: limitEmailFetched, needRefreshSearchState: true); } else { - final newEmailState = currentEmailState ?? _currentEmailState; - log('ThreadController::_refreshEmailChanges(): newEmailState: $newEmailState'); - if (_session != null && _accountId != null && newEmailState != null) { - consumeState(_refreshChangesEmailsInMailboxInteractor.execute( + if (_currentEmailState == null || + _currentEmailState == newState || + _session == null || + _accountId == null) { + return; + } + consumeState(_refreshChangesEmailsInMailboxInteractor.execute( + _session!, + _accountId!, + _currentEmailState!, + sort: EmailSortOrderType.mostRecent.getSortOrder().toNullable(), + propertiesCreated: EmailUtils.getPropertiesForEmailGetMethod( _session!, _accountId!, - newEmailState, - sort: EmailSortOrderType.mostRecent.getSortOrder().toNullable(), - propertiesCreated: EmailUtils.getPropertiesForEmailGetMethod(_session!, _accountId!), - propertiesUpdated: ThreadConstants.propertiesUpdatedDefault, - emailFilter: EmailFilter( - filter: _getFilterCondition(mailboxIdSelected: selectedMailboxId), - filterOption: mailboxDashBoardController.filterMessageOption.value, - mailboxId: selectedMailboxId - ) - )); - } + ), + propertiesUpdated: ThreadConstants.propertiesUpdatedDefault, + emailFilter: EmailFilter( + filter: _getFilterCondition(mailboxIdSelected: selectedMailboxId), + filterOption: mailboxDashBoardController.filterMessageOption.value, + mailboxId: selectedMailboxId, + ), + )); } }