From 275fe6faf99a45079fc123023063a07e2c53cb6a Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 6 May 2022 18:05:36 +0700 Subject: [PATCH] TF-474 Use `Ever/Worker` to listen `Obx` object --- .../email/presentation/email_controller.dart | 31 ++-- .../presentation/mailbox_controller.dart | 94 ++++++------ .../mailbox_dashboard_view_web.dart | 5 +- .../manage_account_dashboard_view.dart | 5 +- .../identities/identities_controller.dart | 21 ++- .../presentation/thread_controller.dart | 137 ++++++++++-------- 6 files changed, 165 insertions(+), 128 deletions(-) diff --git a/lib/features/email/presentation/email_controller.dart b/lib/features/email/presentation/email_controller.dart index 4d19ebd4a..3d06c7087 100644 --- a/lib/features/email/presentation/email_controller.dart +++ b/lib/features/email/presentation/email_controller.dart @@ -68,6 +68,8 @@ class EmailController extends BaseController { EmailId? _currentEmailId; List? initialEmailContents; + late Worker emailWorker; + PresentationMailbox? get currentMailbox => mailboxDashBoardController.selectedMailbox.value; PresentationEmail? get currentEmail => mailboxDashBoardController.selectedEmail.value; @@ -85,12 +87,22 @@ class EmailController extends BaseController { @override void onInit() { - mailboxDashBoardController.selectedEmail.listen((presentationEmail) { - log('EmailController::onReady(): selectedEmail: ${presentationEmail.toString()}'); - if (_currentEmailId != presentationEmail?.id) { - _currentEmailId = presentationEmail?.id; - _resetToOriginalValue(); - if (presentationEmail != null) { + _initWorker(); + super.onInit(); + } + + @override + void onClose() { + _clearWorker(); + super.onClose(); + } + + void _initWorker() { + emailWorker = ever( mailboxDashBoardController.selectedEmail, (presentationEmail) { + if (presentationEmail is PresentationEmail) { + if (_currentEmailId != presentationEmail.id) { + _currentEmailId = presentationEmail.id; + _resetToOriginalValue(); _getEmailContentAction(presentationEmail.id); if (!presentationEmail.hasRead) { markAsEmailRead(presentationEmail, ReadActions.markAsRead); @@ -98,13 +110,10 @@ class EmailController extends BaseController { } } }); - super.onInit(); } - @override - void onClose() { - mailboxDashBoardController.selectedEmail.close(); - super.onClose(); + void _clearWorker() { + emailWorker.call(); } void _getEmailContentAction(EmailId emailId) async { diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index 8dd1d00e3..90f21a4d9 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -92,6 +92,8 @@ class MailboxController extends BaseMailboxController { jmap_state.State? currentMailboxState; List listMailboxNameAsStringExist = []; + late Worker accountIdWorker, viewStateWorker; + MailboxController( this._getAllMailboxInteractor, this._refreshAllMailboxInteractor, @@ -106,7 +108,7 @@ class MailboxController extends BaseMailboxController { @override void onInit() { - _onMailboxDashBoardListener(); + _initWorker(); super.onInit(); } @@ -122,10 +124,11 @@ class MailboxController extends BaseMailboxController { @override void onClose() { - mailboxDashBoardController.accountId.close(); - mailboxDashBoardController.viewState.close(); searchInputController.dispose(); searchFocus.dispose(); + _openMailboxEventController.close(); + mailboxListScrollController.dispose(); + _clearWorker(); super.onClose(); } @@ -176,50 +179,55 @@ class MailboxController extends BaseMailboxController { @override void onError(error) {} - void _onMailboxDashBoardListener() { - mailboxDashBoardController.accountId.listen((accountId) { - log('MailboxController::_onMailboxDashBoardListener(): accountId: $accountId'); - if (accountId != null) { + void _initWorker() { + accountIdWorker = ever(mailboxDashBoardController.accountId, (accountId) { + if (accountId is AccountId) { getAllMailboxAction(accountId); } }); - mailboxDashBoardController.viewState.listen((state) { - log('MailboxController::_onMailboxDashBoardListener(): viewState: $viewState'); - state.fold((failure) { - if (failure is EmptyTrashFolderFailure) { - mailboxDashBoardController.clearState(); - refreshMailboxChanges(); - } - }, (success) { - if (success is MarkAsMultipleEmailReadAllSuccess || - success is MarkAsMultipleEmailReadHasSomeEmailFailure) { - mailboxDashBoardController.clearState(); - refreshMailboxChanges(); - } else if (success is MoveMultipleEmailToMailboxAllSuccess || - success is MoveMultipleEmailToMailboxHasSomeEmailFailure) { - mailboxDashBoardController.clearState(); - refreshMailboxChanges(); - } else if (success is DeleteMultipleEmailsPermanentlyAllSuccess || - success is DeleteMultipleEmailsPermanentlyHasSomeEmailFailure) { - mailboxDashBoardController.clearState(); - refreshMailboxChanges(); - } else if (success is EmptyTrashFolderSuccess) { - mailboxDashBoardController.clearState(); - refreshMailboxChanges(); - } else if (success is MarkAsEmailReadSuccess || - success is MoveToMailboxSuccess || - success is DeleteEmailPermanentlySuccess || - success is SaveEmailAsDraftsSuccess || - success is RemoveEmailDraftsSuccess || - success is SendEmailSuccess || - success is UpdateEmailDraftsSuccess) { - refreshMailboxChanges(); - } - }); + viewStateWorker = ever(mailboxDashBoardController.viewState, (state) { + if (state is Either) { + state.fold((failure) { + if (failure is EmptyTrashFolderFailure) { + mailboxDashBoardController.clearState(); + refreshMailboxChanges(); + } + }, (success) { + if (success is MarkAsMultipleEmailReadAllSuccess || + success is MarkAsMultipleEmailReadHasSomeEmailFailure) { + mailboxDashBoardController.clearState(); + refreshMailboxChanges(); + } else if (success is MoveMultipleEmailToMailboxAllSuccess || + success is MoveMultipleEmailToMailboxHasSomeEmailFailure) { + mailboxDashBoardController.clearState(); + refreshMailboxChanges(); + } else if (success is DeleteMultipleEmailsPermanentlyAllSuccess || + success is DeleteMultipleEmailsPermanentlyHasSomeEmailFailure) { + mailboxDashBoardController.clearState(); + refreshMailboxChanges(); + } else if (success is EmptyTrashFolderSuccess) { + mailboxDashBoardController.clearState(); + refreshMailboxChanges(); + } else if (success is MarkAsEmailReadSuccess || + success is MoveToMailboxSuccess || + success is DeleteEmailPermanentlySuccess || + success is SaveEmailAsDraftsSuccess || + success is RemoveEmailDraftsSuccess || + success is SendEmailSuccess || + success is UpdateEmailDraftsSuccess) { + refreshMailboxChanges(); + } + }); + } }); } + void _clearWorker() { + accountIdWorker.call(); + viewStateWorker.call(); + } + void _initCollapseMailboxCategories() { if (kIsWeb && currentContext != null && (_responsiveUtils.isMobile(currentContext!) || _responsiveUtils.isTablet(currentContext!))) { @@ -680,10 +688,4 @@ class MailboxController extends BaseMailboxController { _cancelSelectMailbox(); mailboxDashBoardController.closeMailboxMenuDrawer(); } - - @override - void dispose() { - _openMailboxEventController.close(); - super.dispose(); - } } \ No newline at end of file diff --git a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart index 174baa165..5c7d13960 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart @@ -174,7 +174,10 @@ class MailboxDashBoardView extends GetWidget with Ne ..addOnTapAvatarActionWithPositionClick((position) => controller.openPopupMenuAction(context, position, popupMenuUserSettingActionTile(context, controller.userProfile.value, - onLogoutAction: () => controller.logoutAction(), + onLogoutAction: () { + popBack(); + controller.logoutAction(); + }, onSettingAction: () { popBack(); controller.goToSettings(); diff --git a/lib/features/manage_account/presentation/manage_account_dashboard_view.dart b/lib/features/manage_account/presentation/manage_account_dashboard_view.dart index c28f593c4..dde38cf08 100644 --- a/lib/features/manage_account/presentation/manage_account_dashboard_view.dart +++ b/lib/features/manage_account/presentation/manage_account_dashboard_view.dart @@ -121,7 +121,10 @@ class ManageAccountDashBoardView extends GetWidget controller.openPopupMenuAction(context, position, popupMenuUserSettingActionTile(context, controller.userProfile.value, - onLogoutAction: () => controller.logoutAction(), + onLogoutAction: () { + popBack(); + controller.logoutAction(); + }, onSettingAction: () { popBack(); controller.goToSettings(); diff --git a/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart b/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart index 8132c5db5..7ffe76d8f 100644 --- a/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart +++ b/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart @@ -45,6 +45,8 @@ class IdentitiesController extends BaseController { final idIdentityAll = IdentityId(Id('all')); + late Worker accountIdWorker; + IdentitiesController( this._getAllIdentitiesInteractor, this._deleteIdentityInteractor, @@ -55,10 +57,16 @@ class IdentitiesController extends BaseController { @override void onInit() { - _onAccountDashBoardListener(); + _initWorker(); super.onInit(); } + @override + void onClose() { + _clearWorker(); + super.onClose(); + } + @override void onDone() { viewState.value.fold( @@ -91,15 +99,18 @@ class IdentitiesController extends BaseController { void onError(error) { } - void _onAccountDashBoardListener() { - _accountDashBoardController.accountId.listen((accountId) { - log('IdentitiesController::_onAccountDashBoardListener(): accountId: $accountId'); - if (accountId != null) { + void _initWorker() { + accountIdWorker = ever(_accountDashBoardController.accountId, (accountId) { + if (accountId is AccountId) { _getAllIdentities(accountId); } }); } + void _clearWorker() { + accountIdWorker.call(); + } + void _getAllIdentities(AccountId accountId) { consumeState(_getAllIdentitiesInteractor.execute(accountId)); } diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index 1242cf325..8fc02c3d5 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -61,6 +61,7 @@ import 'package:tmail_ui_user/features/thread/domain/usecases/search_email_inter import 'package:tmail_ui_user/features/thread/domain/usecases/search_more_email_interactor.dart'; import 'package:tmail_ui_user/features/thread/presentation/extensions/filter_message_option_extension.dart'; import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart'; +import 'package:tmail_ui_user/features/thread/presentation/model/search_state.dart'; import 'package:tmail_ui_user/features/thread/presentation/model/search_status.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart'; @@ -97,6 +98,7 @@ class ThreadController extends BaseController { MailboxId? _currentMailboxId; jmap.State? _currentEmailState; final ScrollController listEmailController = ScrollController(); + late Worker mailboxWorker, searchWorker, dashboardActionWorker, viewStateWorker; SearchQuery? get searchQuery => mailboxDashBoardController.searchQuery; @@ -126,7 +128,7 @@ class ThreadController extends BaseController { @override void onInit() { - _onMailboxDashBoardListener(); + _initWorker(); super.onInit(); } @@ -138,11 +140,8 @@ class ThreadController extends BaseController { @override void onClose() { - mailboxDashBoardController.selectedMailbox.close(); - mailboxDashBoardController.dashBoardAction.close(); - mailboxDashBoardController.viewState.close(); - mailboxDashBoardController.searchState.close(); listEmailController.dispose(); + _clearWorker(); super.onClose(); } @@ -224,67 +223,77 @@ class ThreadController extends BaseController { @override void onError(error) {} - void _onMailboxDashBoardListener() { - mailboxDashBoardController.selectedMailbox.listen((selectedMailbox) { - log('ThreadController::_onMailboxDashBoardListener(): selectMailbox: ${selectedMailbox?.name?.name}(${selectedMailbox?.id})'); - if (_currentMailboxId != selectedMailbox?.id) { - _currentMailboxId = selectedMailbox?.id; - _resetToOriginalValue(); - _getAllEmail(); - } - }); - - mailboxDashBoardController.searchState.listen((state) { - log('ThreadController::_onMailboxDashBoardListener(): searchState: $state'); - if (state.searchStatus == SearchStatus.INACTIVE) { - emailListSearch.clear(); - } else if (state.searchStatus == SearchStatus.ACTIVE) { - cancelSelectEmail(); - } - }); - - mailboxDashBoardController.dashBoardAction.listen((action) { - log('ThreadController::_onMailboxDashBoardListener(): dashBoardAction: ${action.runtimeType}'); - if (action is RefreshAllEmailAction) { - refreshAllEmail(); - mailboxDashBoardController.clearDashBoardAction(); - } else if (action is MarkAsReadAllEmailAction) { - markAsReadAllEmails(); - mailboxDashBoardController.clearDashBoardAction(); - } if (action is SelectionAllEmailAction) { - setSelectAllEmailAction(); - mailboxDashBoardController.clearDashBoardAction(); - } if (action is CancelSelectionAllEmailAction) { - cancelSelectEmail(); - mailboxDashBoardController.clearDashBoardAction(); - } if (action is FilterMessageAction) { - filterMessagesAction(action.context, action.option); - mailboxDashBoardController.clearDashBoardAction(); - } if (action is HandleEmailActionTypeAction) { - log('ThreadController::_onMailboxDashBoardListener(): ${action.listEmailSelected.length}'); - pressEmailSelectionAction(action.context, action.emailAction, action.listEmailSelected); - mailboxDashBoardController.clearDashBoardAction(); - } - }); - - mailboxDashBoardController.viewState.listen((state) { - log('ThreadController::_onMailboxDashBoardListener(): viewState: $state'); - state.map((success) { - if (success is SearchEmailNewQuery){ - mailboxDashBoardController.clearState(); - _searchEmail(); - } else if (success is MarkAsEmailReadSuccess - || success is MoveToMailboxSuccess - || success is MarkAsStarEmailSuccess - || success is DeleteEmailPermanentlySuccess - || success is SaveEmailAsDraftsSuccess - || success is RemoveEmailDraftsSuccess - || success is SendEmailSuccess - || success is UpdateEmailDraftsSuccess) { - _refreshEmailChanges(); + void _initWorker() { + mailboxWorker = ever(mailboxDashBoardController.selectedMailbox, (mailbox) { + if (mailbox is PresentationMailbox) { + if (_currentMailboxId != mailbox.id) { + _currentMailboxId = mailbox.id; + _resetToOriginalValue(); + _getAllEmail(); } - }); + } }); + + searchWorker = ever(mailboxDashBoardController.searchState, (searchState) { + if (searchState is SearchState) { + if (searchState.searchStatus == SearchStatus.INACTIVE) { + emailListSearch.clear(); + } else if (searchState.searchStatus == SearchStatus.ACTIVE) { + cancelSelectEmail(); + } + } + }); + + dashboardActionWorker = ever(mailboxDashBoardController.dashBoardAction, (action) { + if (action is DashBoardAction) { + if (action is RefreshAllEmailAction) { + refreshAllEmail(); + mailboxDashBoardController.clearDashBoardAction(); + } else if (action is MarkAsReadAllEmailAction) { + markAsReadAllEmails(); + mailboxDashBoardController.clearDashBoardAction(); + } if (action is SelectionAllEmailAction) { + setSelectAllEmailAction(); + mailboxDashBoardController.clearDashBoardAction(); + } if (action is CancelSelectionAllEmailAction) { + cancelSelectEmail(); + mailboxDashBoardController.clearDashBoardAction(); + } if (action is FilterMessageAction) { + filterMessagesAction(action.context, action.option); + mailboxDashBoardController.clearDashBoardAction(); + } if (action is HandleEmailActionTypeAction) { + pressEmailSelectionAction(action.context, action.emailAction, action.listEmailSelected); + mailboxDashBoardController.clearDashBoardAction(); + } + } + }); + + viewStateWorker = ever(mailboxDashBoardController.viewState, (viewState) { + if (viewState is Either) { + viewState.map((success) { + if (success is SearchEmailNewQuery){ + mailboxDashBoardController.clearState(); + _searchEmail(); + } else if (success is MarkAsEmailReadSuccess + || success is MoveToMailboxSuccess + || success is MarkAsStarEmailSuccess + || success is DeleteEmailPermanentlySuccess + || success is SaveEmailAsDraftsSuccess + || success is RemoveEmailDraftsSuccess + || success is SendEmailSuccess + || success is UpdateEmailDraftsSuccess) { + _refreshEmailChanges(); + } + }); + } + }); + } + + void _clearWorker() { + mailboxWorker.call(); + dashboardActionWorker.call(); + searchWorker.call(); + viewStateWorker.call(); } void _getAllEmail() {