From 85a74039f60cbf07c20579fe7fe35477b06d3241 Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 10 Feb 2023 03:23:06 +0700 Subject: [PATCH] TF-1427 Handle hide mailbox in search mailbox view --- .../presentation/search_mailbox_bindings.dart | 9 +++ .../search_mailbox_controller.dart | 62 +++++++++++++++++++ 2 files changed, 71 insertions(+) diff --git a/lib/features/search/mailbox/presentation/search_mailbox_bindings.dart b/lib/features/search/mailbox/presentation/search_mailbox_bindings.dart index aea9d1cf8..1348b36bc 100644 --- a/lib/features/search/mailbox/presentation/search_mailbox_bindings.dart +++ b/lib/features/search/mailbox/presentation/search_mailbox_bindings.dart @@ -19,6 +19,7 @@ import 'package:tmail_ui_user/features/mailbox/domain/usecases/move_mailbox_inte import 'package:tmail_ui_user/features/mailbox/domain/usecases/refresh_all_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/domain/usecases/rename_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/domain/usecases/search_mailbox_interactor.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/usecases/subscribe_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/search/mailbox/presentation/search_mailbox_controller.dart'; @@ -36,6 +37,7 @@ class SearchMailboxBindings extends BaseBindings { Get.find(), Get.find(), Get.find(), + Get.find(), Get.find(), Get.find() )); @@ -66,7 +68,14 @@ class SearchMailboxBindings extends BaseBindings { @override void bindingsInteractor() { + Get.lazyPut(() => GetAllMailboxInteractor(Get.find())); + Get.lazyPut(() => RefreshAllMailboxInteractor(Get.find())); + Get.lazyPut(() => RenameMailboxInteractor(Get.find())); + Get.lazyPut(() => MoveMailboxInteractor(Get.find())); + Get.lazyPut(() => DeleteMultipleMailboxInteractor(Get.find())); + Get.lazyPut(() => VerifyNameInteractor()); Get.lazyPut(() => SearchMailboxInteractor()); + Get.lazyPut(() => SubscribeMailboxInteractor(Get.find())); } @override diff --git a/lib/features/search/mailbox/presentation/search_mailbox_controller.dart b/lib/features/search/mailbox/presentation/search_mailbox_controller.dart index f0fa3fd5e..0186cfc6c 100644 --- a/lib/features/search/mailbox/presentation/search_mailbox_controller.dart +++ b/lib/features/search/mailbox/presentation/search_mailbox_controller.dart @@ -18,8 +18,11 @@ import 'package:tmail_ui_user/features/base/base_mailbox_controller.dart'; import 'package:debounce_throttle/debounce_throttle.dart'; import 'package:tmail_ui_user/features/base/mixin/mailbox_action_handler_mixin.dart'; import 'package:tmail_ui_user/features/email/domain/model/move_action.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/model/mailbox_subscribe_action_state.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/model/mailbox_subscribe_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/move_mailbox_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/rename_mailbox_request.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/model/subscribe_mailbox_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/delete_multiple_mailbox_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/get_all_mailboxes_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/mark_as_mailbox_read_state.dart'; @@ -27,12 +30,14 @@ import 'package:tmail_ui_user/features/mailbox/domain/state/move_mailbox_state.d import 'package:tmail_ui_user/features/mailbox/domain/state/refresh_changes_all_mailboxes_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/rename_mailbox_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/search_mailbox_state.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/state/subscribe_mailbox_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/usecases/delete_multiple_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/domain/usecases/get_all_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/domain/usecases/move_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/domain/usecases/refresh_all_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/domain/usecases/rename_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/domain/usecases/search_mailbox_interactor.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/usecases/subscribe_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/action/mailbox_ui_action.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree_builder.dart'; @@ -53,6 +58,7 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa final RenameMailboxInteractor _renameMailboxInteractor; final MoveMailboxInteractor _moveMailboxInteractor; final DeleteMultipleMailboxInteractor _deleteMultipleMailboxInteractor; + final SubscribeMailboxInteractor _subscribeMailboxInteractor; final dashboardController = Get.find(); final responsiveUtils = Get.find(); @@ -71,6 +77,7 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa this._renameMailboxInteractor, this._moveMailboxInteractor, this._deleteMultipleMailboxInteractor, + this._subscribeMailboxInteractor, TreeBuilder treeBuilder, VerifyNameInteractor verifyNameInteractor ) : super(treeBuilder, verifyNameInteractor); @@ -123,6 +130,8 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa _deleteMultipleMailboxSuccess(success.listMailboxIdDeleted, success.currentMailboxState); } else if (success is DeleteMultipleMailboxHasSomeSuccess) { _deleteMultipleMailboxSuccess(success.listMailboxIdDeleted, success.currentMailboxState); + } else if (success is SubscribeMailboxSuccess) { + _handleSubscribeMailboxSuccess(success); } } @@ -242,6 +251,13 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa onDeleteMailboxAction: _deleteMailboxAction ); break; + case MailboxActions.disableMailbox: + _subscribeMailboxAction(SubscribeMailboxRequest( + mailbox.id, + MailboxSubscribeState.disabled, + MailboxSubscribeAction.unSubscribe + )); + break; default: break; } @@ -378,6 +394,52 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa } } + void _subscribeMailboxAction(SubscribeMailboxRequest subscribeMailboxRequest) { + final _accountId = dashboardController.accountId.value; + if (_accountId != null) { + consumeState(_subscribeMailboxInteractor.execute( + _accountId, + subscribeMailboxRequest + )); + } + } + + void _handleSubscribeMailboxSuccess(SubscribeMailboxSuccess success) { + if(success.mailboxSubscribeStateAction == MailboxSubscribeAction.unSubscribe + && currentOverlayContext != null + && currentContext != null + ) { + _appToast.showBottomToast( + currentOverlayContext!, + AppLocalizations.of(currentContext!).toastMsgHideMailboxSuccess, + actionName: AppLocalizations.of(currentContext!).undo, + onActionClick: () => _invokeUndoUnsubscribeMailboxAction(success.mailboxId), + leadingIcon: SvgPicture.asset( + imagePaths.icFolderMailbox, + width: 24, + height: 24, + color: Colors.white, + fit: BoxFit.fill + ), + backgroundColor: AppColor.toastSuccessBackgroundColor, + textColor: Colors.white, + textActionColor: Colors.white, + actionIcon: SvgPicture.asset(imagePaths.icUndo), + maxWidth: responsiveUtils.getMaxWidthToast(currentContext!) + ); + } + + refreshMailboxChanges(mailboxState: success.currentMailboxState); + } + + void _invokeUndoUnsubscribeMailboxAction(MailboxId mailboxId) { + _subscribeMailboxAction(SubscribeMailboxRequest( + mailboxId, + MailboxSubscribeState.enabled, + MailboxSubscribeAction.undo + )); + } + void openMailboxAction(BuildContext context, PresentationMailbox mailbox) { FocusScope.of(context).unfocus(); dashboardController.openMailboxAction(context, mailbox);