From fe310b666a22099b460a6c2b13536d2659d58174 Mon Sep 17 00:00:00 2001 From: dab246 Date: Tue, 29 Aug 2023 15:42:15 +0700 Subject: [PATCH] TF-1977 Close email view and scroll to position inbox when clicking on logo (cherry picked from commit 843c703e80559ab7d6a9fa3a4562ae85c1426a1f) --- .../presentation/action/email_ui_action.dart | 4 ++- .../controller/single_email_controller.dart | 16 ++++++++++ .../presentation/mailbox_controller.dart | 29 ++++++++++++------- .../mailbox_dashboard_controller.dart | 4 ++- 4 files changed, 40 insertions(+), 13 deletions(-) diff --git a/lib/features/email/presentation/action/email_ui_action.dart b/lib/features/email/presentation/action/email_ui_action.dart index eeb63d8ae..3d8ee6ae5 100644 --- a/lib/features/email/presentation/action/email_ui_action.dart +++ b/lib/features/email/presentation/action/email_ui_action.dart @@ -18,4 +18,6 @@ class RefreshChangeEmailAction extends EmailUIAction { @override List get props => [newState]; -} \ No newline at end of file +} + +class CloseEmailDetailedViewAction extends EmailUIAction {} \ No newline at end of file diff --git a/lib/features/email/presentation/controller/single_email_controller.dart b/lib/features/email/presentation/controller/single_email_controller.dart index 2fdaec026..2a0345989 100644 --- a/lib/features/email/presentation/controller/single_email_controller.dart +++ b/lib/features/email/presentation/controller/single_email_controller.dart @@ -34,6 +34,7 @@ import 'package:tmail_ui_user/features/email/domain/model/mark_read_action.dart' import 'package:tmail_ui_user/features/email/domain/state/parse_calendar_event_state.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/parse_calendar_event_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/store_opened_email_interactor.dart'; +import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.dart'; import 'package:tmail_ui_user/features/email/presentation/bindings/calendar_event_interactor_bindings.dart'; import 'package:tmail_ui_user/features/email/presentation/controller/email_supervisor_controller.dart'; import 'package:tmail_ui_user/features/email/presentation/model/email_loaded.dart'; @@ -213,6 +214,21 @@ class SingleEmailController extends BaseController with AppLoaderMixin { mailboxDashBoardController.selectedEmail, _handleOpenEmailDetailedView ); + + ever(mailboxDashBoardController.emailUIAction, (action) { + if (action is CloseEmailDetailedViewAction) { + if (emailSupervisorController.supportedPageView.isTrue) { + emailSupervisorController.popEmailQueue(_currentEmailId); + emailSupervisorController.setCurrentEmailIndex(-1); + emailSupervisorController.disposePageViewController(); + } + _updateCurrentEmailId(null); + _resetToOriginalValue(); + mailboxDashBoardController.clearSelectedEmail(); + mailboxDashBoardController.dispatchRoute(DashboardRoutes.thread); + mailboxDashBoardController.clearEmailUIAction(); + } + }); } bool isListEmailContainSelectedEmail(PresentationEmail selectedEmail) { diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index a8c70fa55..63830efbf 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -276,7 +276,10 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM mailboxDashBoardController.clearMailboxUIAction(); } else if (action is OpenMailboxAction) { if (currentContext != null) { - openMailbox(currentContext!, action.presentationMailbox); + _handleOpenMailbox(currentContext!, action.presentationMailbox); + if (action.presentationMailbox.role == PresentationMailbox.roleInbox) { + _autoScrollToTopMailboxList(); + } } mailboxDashBoardController.clearMailboxUIAction(); } @@ -744,15 +747,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM final inboxMailbox = findMailboxNodeByRole(PresentationMailbox.roleInbox); mailboxDashBoardController.setSelectedMailbox(inboxMailbox?.item); _updateSelectedMailboxRouteOnBrowser(); - - WidgetsBinding.instance.addPostFrameCallback((_) { - if(mailboxListScrollController.hasClients){ - mailboxListScrollController.animateTo( - 0, - duration: const Duration(milliseconds: 500), - curve: Curves.fastOutSlowIn); - } - }); + _autoScrollToTopMailboxList(); } void _deleteMailboxFailure(DeleteMultipleMailboxFailure failure) { @@ -1209,8 +1204,20 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM final newMailboxNode = findMailboxNodeById(_newFolderId!); log('MailboxController::_redirectToNewFolder:newMailboxNode: $newMailboxNode'); if (newMailboxNode != null && currentContext != null) { - openMailbox(currentContext!, newMailboxNode.item); + _handleOpenMailbox(currentContext!, newMailboxNode.item); } _clearNewFolderId(); } + + void _autoScrollToTopMailboxList() { + WidgetsBinding.instance.addPostFrameCallback((_) { + if (mailboxListScrollController.hasClients){ + mailboxListScrollController.animateTo( + 0, + duration: const Duration(milliseconds: 500), + curve: Curves.fastOutSlowIn + ); + } + }); + } } \ No newline at end of file diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart index 50003f46c..f5a69ae70 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -2087,7 +2087,9 @@ class MailboxDashBoardController extends ReloadableController { void redirectToInboxAction() { log('MailboxDashBoardController::redirectToInboxAction:'); - if (selectedMailbox.value?.role == PresentationMailbox.roleInbox) return; + if (dashboardRoute.value == DashboardRoutes.emailDetailed) { + dispatchEmailUIAction(CloseEmailDetailedViewAction()); + } final inboxId = getMailboxIdByRole(PresentationMailbox.roleInbox); if (inboxId == null) return;