From 7703db7f5ae9848028777c9bb1f9d431a3531419 Mon Sep 17 00:00:00 2001 From: HuyNguyen Date: Tue, 14 Feb 2023 13:04:12 +0700 Subject: [PATCH] Add GetAll and Refresh mailbox interactor to BaseMailboxController --- .../base/base_mailbox_controller.dart | 31 ++++++- .../destination_picker_bindings.dart | 4 +- .../destination_picker_controller.dart | 17 ++-- .../presentation/mailbox_bindings.dart | 6 +- .../presentation/mailbox_controller.dart | 80 +++++++++---------- .../utils/mailbox_method_action_define.dart | 3 +- .../bindings/mailbox_visibility_bindings.dart | 6 +- .../mailbox_visibility_controller.dart | 54 ++++++------- .../mailbox_visibility_view.dart | 53 +++++++----- .../state/mailbox_visibility_state.dart | 5 ++ ...ailbox_visibility_folder_tile_builder.dart | 22 +++-- .../presentation/search_mailbox_bindings.dart | 6 +- .../search_mailbox_controller.dart | 37 +++++---- 13 files changed, 189 insertions(+), 135 deletions(-) create mode 100644 lib/features/manage_account/presentation/mailbox_visibility/state/mailbox_visibility_state.dart diff --git a/lib/features/base/base_mailbox_controller.dart b/lib/features/base/base_mailbox_controller.dart index 10d4299a0..9af0e55f6 100644 --- a/lib/features/base/base_mailbox_controller.dart +++ b/lib/features/base/base_mailbox_controller.dart @@ -9,6 +9,8 @@ import 'package:core/utils/build_utils.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:model/mailbox/expand_mode.dart'; @@ -22,6 +24,8 @@ import 'package:tmail_ui_user/features/mailbox/domain/model/mailbox_subscribe_st import 'package:tmail_ui_user/features/mailbox/domain/model/subscribe_mailbox_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/subscribe_multiple_mailbox_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/subscribe_request.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/usecases/get_all_mailbox_interactor.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/usecases/refresh_all_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/extensions/list_mailbox_node_extension.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart'; @@ -42,11 +46,17 @@ import 'package:jmap_dart_client/jmap/core/state.dart' as jmap; abstract class BaseMailboxController extends BaseController { final TreeBuilder _treeBuilder; final VerifyNameInteractor verifyNameInteractor; + final GetAllMailboxInteractor? getAllMailboxInteractor; + final RefreshAllMailboxInteractor? refreshAllMailboxInteractor; jmap.State? currentMailboxState; BaseMailboxController( this._treeBuilder, - this.verifyNameInteractor + this.verifyNameInteractor, + { + this.getAllMailboxInteractor, + this.refreshAllMailboxInteractor + } ); final personalMailboxTree = MailboxTree(MailboxNode.root()).obs; @@ -416,4 +426,23 @@ abstract class BaseMailboxController extends BaseController { } return null; } + + void getAllMailbox(Session session, AccountId accountId) async { + if (getAllMailboxInteractor != null) { + consumeState(getAllMailboxInteractor!.execute(session, accountId)); + } + } + + void refreshMailboxChanges( + Session session, + AccountId accountId, + jmap.State currentMailboxState + ) { + if (refreshAllMailboxInteractor != null) { + log('BaseMailboxController::refreshMailboxChanges(): currentMailboxState: $currentMailboxState'); + final newMailboxState = currentMailboxState; + log('BaseMailboxController::refreshMailboxChanges(): newMailboxState: $newMailboxState'); + consumeState(refreshAllMailboxInteractor!.execute(session, accountId, newMailboxState)); + } + } } \ No newline at end of file diff --git a/lib/features/destination_picker/presentation/destination_picker_bindings.dart b/lib/features/destination_picker/presentation/destination_picker_bindings.dart index 9b4b50fd7..f31cdf196 100644 --- a/lib/features/destination_picker/presentation/destination_picker_bindings.dart +++ b/lib/features/destination_picker/presentation/destination_picker_bindings.dart @@ -44,12 +44,12 @@ class DestinationPickerBindings extends BaseBindings { @override void bindingsController() { Get.lazyPut(() => DestinationPickerController( - Get.find(), Get.find(), Get.find(), - Get.find(), Get.find(), Get.find(), + Get.find(), + Get.find(), )); } diff --git a/lib/features/destination_picker/presentation/destination_picker_controller.dart b/lib/features/destination_picker/presentation/destination_picker_controller.dart index 2e0828b77..0df5f8949 100644 --- a/lib/features/destination_picker/presentation/destination_picker_controller.dart +++ b/lib/features/destination_picker/presentation/destination_picker_controller.dart @@ -56,10 +56,8 @@ class DestinationPickerController extends BaseMailboxController { final _imagePaths = Get.find(); final _responsiveUtils = Get.find(); - final GetAllMailboxInteractor _getAllMailboxInteractor; final SearchMailboxInteractor _searchMailboxInteractor; final CreateNewMailboxInteractor _createNewMailboxInteractor; - final RefreshAllMailboxInteractor _refreshAllMailboxInteractor; final mailboxAction = Rxn(); final listMailboxSearched = [].obs; @@ -84,13 +82,18 @@ class DestinationPickerController extends BaseMailboxController { List listMailboxNameAsStringExist = []; DestinationPickerController( - this._getAllMailboxInteractor, this._searchMailboxInteractor, this._createNewMailboxInteractor, - this._refreshAllMailboxInteractor, TreeBuilder treeBuilder, VerifyNameInteractor verifyNameInteractor, - ) : super(treeBuilder, verifyNameInteractor); + GetAllMailboxInteractor getAllMailboxInteractor, + RefreshAllMailboxInteractor refreshAllMailboxInteractor + ) : super( + treeBuilder, + verifyNameInteractor, + getAllMailboxInteractor : getAllMailboxInteractor, + refreshAllMailboxInteractor : refreshAllMailboxInteractor + ); @override void onInit() { @@ -159,13 +162,13 @@ class DestinationPickerController extends BaseMailboxController { void getAllMailboxAction() { if (accountId != null && _session != null) { - consumeState(_getAllMailboxInteractor.execute(_session!, accountId!)); + getAllMailbox(_session!, accountId!); } } void _refreshMailboxChanges(jmap.State currentMailboxState) { if (accountId != null && _session != null) { - consumeState(_refreshAllMailboxInteractor.execute(_session!, accountId!, currentMailboxState)); + refreshMailboxChanges(_session!, accountId!, currentMailboxState); } } diff --git a/lib/features/mailbox/presentation/mailbox_bindings.dart b/lib/features/mailbox/presentation/mailbox_bindings.dart index 8f0138382..ca35e8590 100644 --- a/lib/features/mailbox/presentation/mailbox_bindings.dart +++ b/lib/features/mailbox/presentation/mailbox_bindings.dart @@ -48,8 +48,6 @@ class MailboxBindings extends BaseBindings { @override void bindingsController() { Get.put(MailboxController( - Get.find(), - Get.find(), Get.find(), Get.find(), Get.find(), @@ -57,7 +55,9 @@ class MailboxBindings extends BaseBindings { Get.find(), Get.find(), Get.find(), - Get.find() + Get.find(), + Get.find(), + Get.find() )); } diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index a6caabc73..53a5657b5 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -9,7 +9,6 @@ import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/error/method/error_method_response.dart'; import 'package:jmap_dart_client/jmap/core/id.dart'; -import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/state.dart' as jmap; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; @@ -86,8 +85,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM final _responsiveUtils = Get.find(); final _uuid = Get.find(); final isMailboxListScrollable = false.obs; - final GetAllMailboxInteractor _getAllMailboxInteractor; - final RefreshAllMailboxInteractor _refreshAllMailboxInteractor; final CreateNewMailboxInteractor _createNewMailboxInteractor; final DeleteMultipleMailboxInteractor _deleteMultipleMailboxInteractor; final RenameMailboxInteractor _renameMailboxInteractor; @@ -106,8 +103,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM PresentationEmail? get selectedEmail => mailboxDashBoardController.selectedEmail.value; MailboxController( - this._getAllMailboxInteractor, - this._refreshAllMailboxInteractor, this._createNewMailboxInteractor, this._deleteMultipleMailboxInteractor, this._renameMailboxInteractor, @@ -116,7 +111,14 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM this._subscribeMultipleMailboxInteractor, TreeBuilder treeBuilder, VerifyNameInteractor verifyNameInteractor, - ) : super(treeBuilder, verifyNameInteractor); + GetAllMailboxInteractor getAllMailboxInteractor, + RefreshAllMailboxInteractor refreshAllMailboxInteractor, + ) : super( + treeBuilder, + verifyNameInteractor, + getAllMailboxInteractor: getAllMailboxInteractor, + refreshAllMailboxInteractor: refreshAllMailboxInteractor + ); @override void onInit() { @@ -177,7 +179,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM } else if (success is DeleteMultipleMailboxHasSomeSuccess) { _deleteMultipleMailboxSuccess(success.listMailboxIdDeleted, success.currentMailboxState); } else if (success is RenameMailboxSuccess) { - refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + _refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } else if (success is MoveMailboxSuccess) { _moveMailboxSuccess(success); } else if (success is SubscribeMailboxSuccess) { @@ -198,7 +200,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM void _registerObxStreamListener() { ever(mailboxDashBoardController.accountId, (accountId) { if (accountId is AccountId) { - getAllMailboxAction(mailboxDashBoardController.sessionCurrent!, accountId); + getAllMailbox(mailboxDashBoardController.sessionCurrent!, accountId); } }); @@ -211,37 +213,37 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM if (state is Either) { state.fold((failure) => null, (success) { if (success is MarkAsMultipleEmailReadAllSuccess) { - refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + _refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } else if (success is MarkAsMultipleEmailReadHasSomeEmailFailure) { - refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + _refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } else if (success is MoveMultipleEmailToMailboxAllSuccess) { - refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + _refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } else if (success is MoveMultipleEmailToMailboxHasSomeEmailFailure) { - refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + _refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } else if (success is DeleteMultipleEmailsPermanentlyAllSuccess) { - refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + _refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } else if (success is DeleteMultipleEmailsPermanentlyHasSomeEmailFailure) { - refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + _refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } else if (success is EmptyTrashFolderSuccess) { - refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + _refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } else if (success is MarkAsEmailReadSuccess) { - refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + _refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } else if (success is MoveToMailboxSuccess) { - refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + _refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } else if (success is DeleteEmailPermanentlySuccess) { - refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + _refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } else if (success is SaveEmailAsDraftsSuccess) { - refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + _refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } else if (success is RemoveEmailDraftsSuccess) { - refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + _refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } else if (success is SendEmailSuccess) { - refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + _refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } else if (success is MarkAsMailboxReadAllSuccess) { - refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + _refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } else if (success is MarkAsMailboxReadHasSomeEmailFailure) { - refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + _refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } else if (success is UpdateEmailDraftsSuccess) { - refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + _refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } }); } @@ -263,7 +265,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM mailboxDashBoardController.clearMailboxUIAction(); } else if (action is RefreshChangeMailboxAction) { if (action.newState != currentMailboxState) { - refreshMailboxChanges(); + _refreshMailboxChanges(); } mailboxDashBoardController.clearMailboxUIAction(); } @@ -282,27 +284,23 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM } } - void getAllMailboxAction(Session session, AccountId accountId) async { - consumeState(_getAllMailboxInteractor.execute(session, accountId)); - } - void refreshAllMailbox() { final session = mailboxDashBoardController.sessionCurrent; final accountId = mailboxDashBoardController.accountId.value; if (session != null && accountId != null) { - consumeState(_getAllMailboxInteractor.execute(session, accountId)); + consumeState(getAllMailboxInteractor!.execute(session, accountId)); } } - - void refreshMailboxChanges({jmap.State? currentMailboxState}) { + + void _refreshMailboxChanges({jmap.State? currentMailboxState}) { mailboxDashBoardController.showSpamReportBanner(); - log('MailboxController::refreshMailboxChanges(): currentMailboxState: $currentMailboxState'); + log('MailboxController::_refreshMailboxChanges(): currentMailboxState: $currentMailboxState'); final newMailboxState = currentMailboxState ?? this.currentMailboxState; - log('MailboxController::refreshMailboxChanges(): newMailboxState: $newMailboxState'); + log('MailboxController::_refreshMailboxChanges(): newMailboxState: $newMailboxState'); final accountId = mailboxDashBoardController.accountId.value; final session = mailboxDashBoardController.sessionCurrent; if (accountId != null && session != null && newMailboxState != null) { - consumeState(_refreshAllMailboxInteractor.execute(session, accountId, newMailboxState)); + refreshMailboxChanges(session, accountId, newMailboxState); } } @@ -531,7 +529,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM maxWidth: _responsiveUtils.getMaxWidthToast(currentContext!)); } - refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + _refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } void _createNewMailboxFailure(CreateNewMailboxFailure failure) { @@ -676,7 +674,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM _switchBackToMailboxDefault(); _closeEmailViewIfMailboxDisabledOrNotExist(listMailboxIdDeleted); } - refreshMailboxChanges(currentMailboxState: currentMailboxState); + _refreshMailboxChanges(currentMailboxState: currentMailboxState); } void _openConfirmationDialogDeleteMultipleMailboxAction( @@ -817,7 +815,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM maxWidth: _responsiveUtils.getMaxWidthToast(currentContext!)); } - refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + _refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } void _undoMovingMailbox(MoveMailboxRequest newMoveRequest) { @@ -1020,7 +1018,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM } } - refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + _refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } void _handleUnsubscribeMultipleMailboxAllSuccess(SubscribeMultipleMailboxAllSuccess success) { @@ -1036,7 +1034,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM } } - refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + _refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } void _handleUnsubscribeMultipleMailboxHasSomeSuccess(SubscribeMultipleMailboxHasSomeSuccess success) { @@ -1052,7 +1050,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM } } - refreshMailboxChanges(currentMailboxState: success.currentMailboxState); + _refreshMailboxChanges(currentMailboxState: success.currentMailboxState); } void _closeEmailViewIfMailboxDisabledOrNotExist(List mailboxIdsDisabled) { diff --git a/lib/features/mailbox/presentation/utils/mailbox_method_action_define.dart b/lib/features/mailbox/presentation/utils/mailbox_method_action_define.dart index fab441a59..d2d36835a 100644 --- a/lib/features/mailbox/presentation/utils/mailbox_method_action_define.dart +++ b/lib/features/mailbox/presentation/utils/mailbox_method_action_define.dart @@ -14,4 +14,5 @@ typedef OnClickExpandMailboxNodeAction = void Function(MailboxNode); typedef OnClickOpenMailboxNodeAction = void Function(MailboxNode); typedef OnSelectMailboxNodeAction = void Function(MailboxNode); typedef OnClickOpenMenuMailboxNodeAction = void Function(RelativeRect, MailboxNode); -typedef OnLongPressMailboxNodeAction = void Function(MailboxNode); \ No newline at end of file +typedef OnLongPressMailboxNodeAction = void Function(MailboxNode); +typedef OnClickSubscribeMailboxAction = void Function(MailboxNode); \ No newline at end of file diff --git a/lib/features/manage_account/presentation/mailbox_visibility/bindings/mailbox_visibility_bindings.dart b/lib/features/manage_account/presentation/mailbox_visibility/bindings/mailbox_visibility_bindings.dart index 07e7a578e..f18e443a3 100644 --- a/lib/features/manage_account/presentation/mailbox_visibility/bindings/mailbox_visibility_bindings.dart +++ b/lib/features/manage_account/presentation/mailbox_visibility/bindings/mailbox_visibility_bindings.dart @@ -1,4 +1,6 @@ import 'package:get/get.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/usecases/get_all_mailbox_interactor.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/usecases/refresh_all_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree_builder.dart'; import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_controller.dart'; @@ -9,7 +11,9 @@ class MailboxVisibilityBindings extends Bindings { void dependencies() { Get.lazyPut(() => MailboxVisibilityController( Get.find(), - Get.find() + Get.find(), + Get.find(), + Get.find(), )); _bindingsUtils(); } diff --git a/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_controller.dart b/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_controller.dart index 71518ad26..9a162035e 100644 --- a/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_controller.dart +++ b/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_controller.dart @@ -3,11 +3,10 @@ import 'package:core/presentation/resources/image_paths.dart'; import 'package:core/presentation/utils/app_toast.dart'; import 'package:core/presentation/utils/responsive_utils.dart'; import 'package:core/utils/app_logger.dart'; +import 'package:dartz/dartz.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; -import 'package:jmap_dart_client/jmap/account_id.dart'; -import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/state.dart' as jmap; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:model/mailbox/expand_mode.dart'; @@ -30,13 +29,12 @@ import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_catego import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree_builder.dart'; import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart'; +import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visibility/state/mailbox_visibility_state.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; class MailboxVisibilityController extends BaseMailboxController { - GetAllMailboxInteractor? _getAllMailboxInteractor; - RefreshAllMailboxInteractor? _refreshAllMailboxInteractor; SubscribeMailboxInteractor? _subscribeMailboxInteractor; SubscribeMultipleMailboxInteractor? _subscribeMultipleMailboxInteractor; final _accountDashBoardController = Get.find(); @@ -55,14 +53,19 @@ class MailboxVisibilityController extends BaseMailboxController { MailboxVisibilityController( TreeBuilder treeBuilder, VerifyNameInteractor verifyNameInteractor, - ) : super(treeBuilder, verifyNameInteractor); + GetAllMailboxInteractor getAllMailboxInteractor, + RefreshAllMailboxInteractor refreshAllMailboxInteractor + ) : super( + treeBuilder, + verifyNameInteractor, + getAllMailboxInteractor: getAllMailboxInteractor, + refreshAllMailboxInteractor: refreshAllMailboxInteractor + ); @override void onInit() { super.onInit(); try { - _getAllMailboxInteractor = Get.find(); - _refreshAllMailboxInteractor = Get.find(); _subscribeMailboxInteractor = Get.find(); _subscribeMultipleMailboxInteractor = Get.find(); } catch (e) { @@ -87,7 +90,6 @@ class MailboxVisibilityController extends BaseMailboxController { _handleUnsubscribeMultipleMailboxHasSomeSuccess(success); } }); - } @override @@ -95,31 +97,16 @@ class MailboxVisibilityController extends BaseMailboxController { final _session = _accountDashBoardController.sessionCurrent.value; final _accountId = _accountDashBoardController.accountId.value; if(_session != null && _accountId != null) { - getAllMailboxAction(_session, _accountId); + getAllMailbox(_session, _accountId); } super.onReady(); } - void getAllMailboxAction(Session session, AccountId accountId) async { - if(_getAllMailboxInteractor != null){ - consumeState(_getAllMailboxInteractor!.execute(session, accountId)); - } - } - - void refreshMailboxChanges({jmap.State? currentMailboxState}) { - log('MailboxVisibilityController::refreshMailboxChanges(): currentMailboxState: $currentMailboxState'); - final newMailboxState = currentMailboxState ?? _currentMailboxState; - log('MailboxVisibilityController::refreshMailboxChanges(): newMailboxState: $newMailboxState'); - final session = _accountDashBoardController.sessionCurrent.value; - final accountId = _accountDashBoardController.accountId.value; - if (accountId != null && session != null && newMailboxState != null) { - consumeState(_refreshAllMailboxInteractor!.execute(session, accountId, newMailboxState)); - } - } - void _buildMailboxTreeHasSubscribed(List mailboxList) async { + dispatchState(Right(LoadingBuildTreeMailboxVisibility())); final _mailboxList = mailboxList; await buildTree(_mailboxList); + dispatchState(Right(BuildTreeMailboxVisibilitySuccess())); } void _refreshMailboxTreeHasSubscribed(List mailboxList) async { @@ -187,7 +174,7 @@ class MailboxVisibilityController extends BaseMailboxController { _showToastSubscribeMailboxSuccess(subscribeMailboxSuccess.mailboxId); } - refreshMailboxChanges(currentMailboxState: subscribeMailboxSuccess.currentMailboxState); + _refreshMailboxChanges(subscribeMailboxSuccess.currentEmailState); } void _handleUnsubscribeMultipleMailboxHasSomeSuccess(SubscribeMultipleMailboxHasSomeSuccess subscribeMailboxSuccess) { @@ -198,7 +185,7 @@ class MailboxVisibilityController extends BaseMailboxController { ); } - refreshMailboxChanges(currentMailboxState: subscribeMailboxSuccess.currentMailboxState); + _refreshMailboxChanges(subscribeMailboxSuccess.currentEmailState); } void _handleUnsubscribeMultipleMailboxAllSuccess(SubscribeMultipleMailboxAllSuccess subscribeMailboxSuccess) { @@ -209,7 +196,16 @@ class MailboxVisibilityController extends BaseMailboxController { ); } - refreshMailboxChanges(currentMailboxState: subscribeMailboxSuccess.currentMailboxState); + _refreshMailboxChanges(subscribeMailboxSuccess.currentEmailState); + } + + void _refreshMailboxChanges(jmap.State? currentEmailState) { + final _session = _accountDashBoardController.sessionCurrent.value; + final _accountId = _accountDashBoardController.accountId.value; + final currentMailboxState = currentEmailState ?? _currentMailboxState; + if (_session != null && _accountId != null && currentMailboxState != null) { + refreshMailboxChanges(_session, _accountId, currentMailboxState); + } } void _showToastSubscribeMailboxSuccess( diff --git a/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_view.dart b/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_view.dart index 1764fc2ca..5088d2c1e 100644 --- a/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_view.dart +++ b/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_view.dart @@ -1,3 +1,4 @@ +import 'package:core/core.dart'; import 'package:core/presentation/extensions/color_extension.dart'; import 'package:core/presentation/resources/image_paths.dart'; import 'package:core/presentation/state/success.dart'; @@ -13,6 +14,7 @@ import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_controller.dart'; +import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visibility/state/mailbox_visibility_state.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visibility/widgets/mailbox_visibility_folder_tile_builder.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visibility/widgets/mailbox_visibility_header_widget.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings_utils.dart'; @@ -51,12 +53,12 @@ class MailboxVisibilityView extends GetWidget with children: [ if (_responsiveUtils.isWebDesktop(context))...[ const MailboxVisibilityHeaderWidget(), - _buildLoadingView(), const Padding( padding: EdgeInsets.symmetric(vertical: 16), child: Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2), ), ], + _buildLoadingView(), Expanded(child: _buildListMailbox(context)), ] ), @@ -69,19 +71,34 @@ class MailboxVisibilityView extends GetWidget with Widget _buildLoadingView() { return Obx(() => controller.viewState.value.fold( (failure) => const SizedBox.shrink(), - (success) => success is LoadingState - ? const Center( - child: Padding( - padding: EdgeInsets.only(top: 16), - child: SizedBox( - height: 24, - width: 24, - child: CupertinoActivityIndicator( - color: AppColor.colorTextButton, - ), - )), - ) - : const SizedBox.shrink())); + (success) { + if (success is LoadingState) { + return const Center( + child: Padding( + padding: EdgeInsets.only(top: 16), + child: SizedBox( + height: 24, + width: 24, + child: CupertinoActivityIndicator( + color: AppColor.colorTextButton, + ), + )), + ); + } else if (success is LoadingBuildTreeMailboxVisibility) { + return const Center( + child: Padding( + padding: EdgeInsets.only(top: 16), + child: SizedBox( + height: 24, + width: 24, + child: CupertinoActivityIndicator( + color: AppColor.colorTextButton, + ), + )), + ); + } + return const SizedBox.shrink(); + })); } Widget _buildListMailbox(BuildContext context) { @@ -182,15 +199,15 @@ class MailboxVisibilityView extends GetWidget with context, key: const Key('children_tree_mailbox_child'), isExpanded: mailboxNode.expandMode == ExpandMode.EXPAND, - parent: Obx(() => controller.defaultMailboxIsNotEmpty ? (MailBoxVisibilityFolderTileBuilder(context, _imagePaths, mailboxNode, lastNode: lastNode) + parent: (MailBoxVisibilityFolderTileBuilder(context, _imagePaths, mailboxNode, lastNode: lastNode) ..addOnExpandFolderActionClick((mailboxNode) => controller.toggleMailboxFolder(mailboxNode)) ..addOnSubscribeMailboxActionClick((mailboxNode) => controller.subscribeMailbox(mailboxNode))) - .build(context) : const SizedBox.shrink()) , + .build(context), children: _buildListChildTileWidget(context, mailboxNode) ).build() - : Obx(() => controller.defaultMailboxIsNotEmpty ? (MailBoxVisibilityFolderTileBuilder(context, _imagePaths, mailboxNode, lastNode: lastNode) + : (MailBoxVisibilityFolderTileBuilder(context, _imagePaths, mailboxNode, lastNode: lastNode) ..addOnExpandFolderActionClick((mailboxNode) => controller.toggleMailboxFolder(mailboxNode)) ..addOnSubscribeMailboxActionClick((mailboxNode) => controller.subscribeMailbox(mailboxNode))) - .build(context) : const SizedBox.shrink())).toList() ?? []; + .build(context)).toList() ?? []; } } \ No newline at end of file diff --git a/lib/features/manage_account/presentation/mailbox_visibility/state/mailbox_visibility_state.dart b/lib/features/manage_account/presentation/mailbox_visibility/state/mailbox_visibility_state.dart new file mode 100644 index 000000000..15b59175b --- /dev/null +++ b/lib/features/manage_account/presentation/mailbox_visibility/state/mailbox_visibility_state.dart @@ -0,0 +1,5 @@ +import 'package:core/presentation/state/success.dart'; + +class LoadingBuildTreeMailboxVisibility extends LoadingState {} + +class BuildTreeMailboxVisibilitySuccess extends UIState {} \ No newline at end of file diff --git a/lib/features/manage_account/presentation/mailbox_visibility/widgets/mailbox_visibility_folder_tile_builder.dart b/lib/features/manage_account/presentation/mailbox_visibility/widgets/mailbox_visibility_folder_tile_builder.dart index dde620d78..c0186e7b6 100644 --- a/lib/features/manage_account/presentation/mailbox_visibility/widgets/mailbox_visibility_folder_tile_builder.dart +++ b/lib/features/manage_account/presentation/mailbox_visibility/widgets/mailbox_visibility_folder_tile_builder.dart @@ -5,11 +5,9 @@ import 'package:model/mailbox/expand_mode.dart'; import 'package:tmail_ui_user/features/mailbox/domain/extensions/presentation_mailbox_extension.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_method_action_define.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; -typedef OnExpandFolderActionClick = void Function(MailboxNode); -typedef OnSubscribeMailboxActionClick = void Function(MailboxNode); - class MailBoxVisibilityFolderTileBuilder { final MailboxNode _mailboxNode; final BuildContext _context; @@ -17,8 +15,8 @@ class MailBoxVisibilityFolderTileBuilder { final MailboxNode? lastNode; final MailboxActions? mailboxActions; - OnSubscribeMailboxActionClick? _onSubscribeMailboxActionClick; - OnExpandFolderActionClick? _onExpandFolderActionClick; + OnClickExpandMailboxNodeAction? _onClickExpandMailboxNodeAction; + OnClickSubscribeMailboxAction? _onClickSubscribeMailboxAction; bool isHoverItem = false; MailBoxVisibilityFolderTileBuilder( @@ -29,12 +27,12 @@ class MailBoxVisibilityFolderTileBuilder { this.mailboxActions, }); - void addOnExpandFolderActionClick(OnExpandFolderActionClick onExpandFolderActionClick) { - _onExpandFolderActionClick = onExpandFolderActionClick; + void addOnExpandFolderActionClick(OnClickExpandMailboxNodeAction onClickExpandMailboxNodeAction) { + _onClickExpandMailboxNodeAction = onClickExpandMailboxNodeAction; } - void addOnSubscribeMailboxActionClick(OnSubscribeMailboxActionClick onSubscribeMailboxActionClick) { - _onSubscribeMailboxActionClick = onSubscribeMailboxActionClick; + void addOnSubscribeMailboxActionClick(OnClickSubscribeMailboxAction onClickSubscribeMailboxAction) { + _onClickSubscribeMailboxAction = onClickSubscribeMailboxAction; } Widget build(BuildContext context) => _buildMailboxItem(context); @@ -124,7 +122,7 @@ class MailBoxVisibilityFolderTileBuilder { tooltip: _mailboxNode.expandMode == ExpandMode.EXPAND ? AppLocalizations.of(_context).collapse : AppLocalizations.of(_context).expand, - onTap: () => _onExpandFolderActionClick?.call(_mailboxNode)), + onTap: () => _onClickExpandMailboxNodeAction?.call(_mailboxNode)), ], ) else @@ -155,7 +153,7 @@ class MailBoxVisibilityFolderTileBuilder { tooltip: _mailboxNode.expandMode == ExpandMode.EXPAND ? AppLocalizations.of(_context).collapse : AppLocalizations.of(_context).expand, - onTap: () => _onExpandFolderActionClick?.call(_mailboxNode)), + onTap: () => _onClickExpandMailboxNodeAction?.call(_mailboxNode)), ], ) else @@ -242,7 +240,7 @@ class MailBoxVisibilityFolderTileBuilder { Widget _buildSubscribeMailboxItem(BuildContext context, MailboxNode _mailboxNode) { return InkWell( - onTap: () => _onSubscribeMailboxActionClick?.call(_mailboxNode), + onTap: () => _onClickSubscribeMailboxAction?.call(_mailboxNode), child: Text( _mailboxNode.item.isSubscribedMailbox ? AppLocalizations.of(context).hide diff --git a/lib/features/search/mailbox/presentation/search_mailbox_bindings.dart b/lib/features/search/mailbox/presentation/search_mailbox_bindings.dart index 92f47338e..a3a89a452 100644 --- a/lib/features/search/mailbox/presentation/search_mailbox_bindings.dart +++ b/lib/features/search/mailbox/presentation/search_mailbox_bindings.dart @@ -32,8 +32,6 @@ class SearchMailboxBindings extends BaseBindings { @override void bindingsController() { Get.lazyPut(() => SearchMailboxController( - Get.find(), - Get.find(), Get.find(), Get.find(), Get.find(), @@ -41,7 +39,9 @@ class SearchMailboxBindings extends BaseBindings { Get.find(), Get.find(), Get.find(), - Get.find() + Get.find(), + Get.find(), + Get.find(), )); } diff --git a/lib/features/search/mailbox/presentation/search_mailbox_controller.dart b/lib/features/search/mailbox/presentation/search_mailbox_controller.dart index 5a63ced6e..0b1caeae0 100644 --- a/lib/features/search/mailbox/presentation/search_mailbox_controller.dart +++ b/lib/features/search/mailbox/presentation/search_mailbox_controller.dart @@ -59,8 +59,6 @@ import 'package:jmap_dart_client/jmap/core/state.dart' as jmap; class SearchMailboxController extends BaseMailboxController with MailboxActionHandlerMixin { - final GetAllMailboxInteractor _getAllMailboxInteractor; - final RefreshAllMailboxInteractor _refreshAllMailboxInteractor; final SearchMailboxInteractor _searchMailboxInteractor; final RenameMailboxInteractor _renameMailboxInteractor; final MoveMailboxInteractor _moveMailboxInteractor; @@ -83,8 +81,6 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa PresentationEmail? get selectedEmail => dashboardController.selectedEmail.value; SearchMailboxController( - this._getAllMailboxInteractor, - this._refreshAllMailboxInteractor, this._searchMailboxInteractor, this._renameMailboxInteractor, this._moveMailboxInteractor, @@ -92,8 +88,15 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa this._subscribeMailboxInteractor, this._subscribeMultipleMailboxInteractor, TreeBuilder treeBuilder, - VerifyNameInteractor verifyNameInteractor - ) : super(treeBuilder, verifyNameInteractor); + VerifyNameInteractor verifyNameInteractor, + GetAllMailboxInteractor getAllMailboxInteractor, + RefreshAllMailboxInteractor refreshAllMailboxInteractor + ) : super( + treeBuilder, + verifyNameInteractor, + getAllMailboxInteractor: getAllMailboxInteractor, + refreshAllMailboxInteractor: refreshAllMailboxInteractor + ); @override void onInit() { @@ -132,11 +135,11 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa if (success is SearchMailboxSuccess) { _handleSearchMailboxSuccess(success); } else if (success is MarkAsMailboxReadAllSuccess) { - refreshMailboxChanges(mailboxState: success.currentMailboxState); + _refreshMailboxChanges(mailboxState: success.currentMailboxState); } else if (success is MarkAsMailboxReadHasSomeEmailFailure) { - refreshMailboxChanges(mailboxState: success.currentMailboxState); + _refreshMailboxChanges(mailboxState: success.currentMailboxState); } else if (success is RenameMailboxSuccess) { - refreshMailboxChanges(mailboxState: success.currentMailboxState); + _refreshMailboxChanges(mailboxState: success.currentMailboxState); } else if (success is MoveMailboxSuccess) { _moveMailboxSuccess(success); } else if (success is DeleteMultipleMailboxAllSuccess) { @@ -169,17 +172,17 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa final session = dashboardController.sessionCurrent; final accountId = dashboardController.accountId.value; if (session != null && accountId != null) { - consumeState(_getAllMailboxInteractor.execute(session, accountId)); + getAllMailbox(session, accountId); } } - void refreshMailboxChanges({jmap.State? mailboxState}) { + void _refreshMailboxChanges({jmap.State? mailboxState}) { dashboardController.dispatchMailboxUIAction(RefreshChangeMailboxAction(null)); final newMailboxState = mailboxState ?? currentMailboxState; final accountId = dashboardController.accountId.value; final session = dashboardController.sessionCurrent; if (session != null && accountId != null && newMailboxState != null) { - consumeState(_refreshAllMailboxInteractor.execute(session, accountId, newMailboxState)); + refreshMailboxChanges(session, accountId, newMailboxState); } } @@ -355,7 +358,7 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa ); } - refreshMailboxChanges(mailboxState: success.currentMailboxState); + _refreshMailboxChanges(mailboxState: success.currentMailboxState); } void _undoMovingMailbox(MoveMailboxRequest newMoveRequest) { @@ -405,7 +408,7 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa dashboardController.dispatchMailboxUIAction(SelectMailboxDefaultAction()); } - refreshMailboxChanges(mailboxState: currentMailboxState); + _refreshMailboxChanges(mailboxState: currentMailboxState); } void _deleteMailboxFailure(DeleteMultipleMailboxFailure failure) { @@ -455,7 +458,7 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa } } - refreshMailboxChanges(mailboxState: success.currentMailboxState); + _refreshMailboxChanges(mailboxState: success.currentMailboxState); } void _handleSubscribeMultipleMailboxAllSuccess(SubscribeMultipleMailboxAllSuccess success) { @@ -473,7 +476,7 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa } } - refreshMailboxChanges(mailboxState: success.currentMailboxState); + _refreshMailboxChanges(mailboxState: success.currentMailboxState); } void _handleSubscribeMultipleMailboxHasSomeSuccess(SubscribeMultipleMailboxHasSomeSuccess success) { @@ -491,7 +494,7 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa } } - refreshMailboxChanges(mailboxState: success.currentMailboxState); + _refreshMailboxChanges(mailboxState: success.currentMailboxState); } void _showToastSubscribeMailboxSuccess(