TF-3334 Auto resynchronisation search view when receives websocket notification on mobile & tablet responsive web

This commit is contained in:
dab246
2024-12-18 13:08:00 +07:00
committed by Dat H. Pham
parent d74951a1ac
commit d36327f69c
2 changed files with 35 additions and 23 deletions
@@ -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/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/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/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/email/presentation/utils/email_utils.dart';
import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.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'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
@@ -100,7 +101,7 @@ class SearchEmailController extends BaseController
final resultSearchViewState = Rx<Either<Failure, Success>>(Right(UIState.idle)); final resultSearchViewState = Rx<Either<Failure, Success>>(Right(UIState.idle));
late Debouncer<String> _deBouncerTime; late Debouncer<String> _deBouncerTime;
late Worker dashBoardViewStateWorker; late Worker emailUIActionWorker;
late Worker dashBoardActionWorker; late Worker dashBoardActionWorker;
late SearchMoreState searchMoreState; late SearchMoreState searchMoreState;
late bool canSearchMore; late bool canSearchMore;
@@ -246,6 +247,15 @@ class SearchEmailController extends BaseController
} }
} }
); );
emailUIActionWorker = ever(
mailboxDashBoardController.emailUIAction,
(action) {
if (action is RefreshChangeEmailAction) {
_refreshEmailChanges();
}
},
);
} }
void _onSearchTextInputListener() { void _onSearchTextInputListener() {
@@ -966,7 +976,7 @@ class SearchEmailController extends BaseController
resultSearchScrollController.dispose(); resultSearchScrollController.dispose();
listSearchFilterScrollController.dispose(); listSearchFilterScrollController.dispose();
_deBouncerTime.cancel(); _deBouncerTime.cancel();
dashBoardViewStateWorker.dispose(); emailUIActionWorker.dispose();
dashBoardActionWorker.dispose(); dashBoardActionWorker.dispose();
super.onClose(); super.onClose();
} }
@@ -316,10 +316,7 @@ class ThreadController extends BaseController with EmailActionController {
ever(mailboxDashBoardController.emailUIAction, (action) { ever(mailboxDashBoardController.emailUIAction, (action) {
if (action is RefreshChangeEmailAction) { if (action is RefreshChangeEmailAction) {
if (action.newState != _currentEmailState) { _refreshEmailChanges(newState: action.newState);
_refreshEmailChanges();
}
mailboxDashBoardController.clearEmailUIAction();
} else if (action is RefreshAllEmailAction) { } else if (action is RefreshAllEmailAction) {
refreshAllEmail(); refreshAllEmail();
mailboxDashBoardController.clearEmailUIAction(); mailboxDashBoardController.clearEmailUIAction();
@@ -516,28 +513,33 @@ class ThreadController extends BaseController with EmailActionController {
return limit; return limit;
} }
void _refreshEmailChanges({jmap.State? currentEmailState}) { void _refreshEmailChanges({jmap.State? newState}) {
log('ThreadController::_refreshEmailChanges(): currentEmailState: $currentEmailState'); log('ThreadController::_refreshEmailChanges(): newState: $newState');
if (searchController.isSearchEmailRunning) { if (searchController.isSearchEmailRunning) {
_searchEmail(limit: limitEmailFetched, needRefreshSearchState: true); _searchEmail(limit: limitEmailFetched, needRefreshSearchState: true);
} else { } else {
final newEmailState = currentEmailState ?? _currentEmailState; if (_currentEmailState == null ||
log('ThreadController::_refreshEmailChanges(): newEmailState: $newEmailState'); _currentEmailState == newState ||
if (_session != null && _accountId != null && newEmailState != null) { _session == null ||
consumeState(_refreshChangesEmailsInMailboxInteractor.execute( _accountId == null) {
return;
}
consumeState(_refreshChangesEmailsInMailboxInteractor.execute(
_session!,
_accountId!,
_currentEmailState!,
sort: EmailSortOrderType.mostRecent.getSortOrder().toNullable(),
propertiesCreated: EmailUtils.getPropertiesForEmailGetMethod(
_session!, _session!,
_accountId!, _accountId!,
newEmailState, ),
sort: EmailSortOrderType.mostRecent.getSortOrder().toNullable(), propertiesUpdated: ThreadConstants.propertiesUpdatedDefault,
propertiesCreated: EmailUtils.getPropertiesForEmailGetMethod(_session!, _accountId!), emailFilter: EmailFilter(
propertiesUpdated: ThreadConstants.propertiesUpdatedDefault, filter: _getFilterCondition(mailboxIdSelected: selectedMailboxId),
emailFilter: EmailFilter( filterOption: mailboxDashBoardController.filterMessageOption.value,
filter: _getFilterCondition(mailboxIdSelected: selectedMailboxId), mailboxId: selectedMailboxId,
filterOption: mailboxDashBoardController.filterMessageOption.value, ),
mailboxId: selectedMailboxId ));
)
));
}
} }
} }