TF-1977 Close email view and scroll to position inbox when clicking on logo

(cherry picked from commit 843c703e80559ab7d6a9fa3a4562ae85c1426a1f)
This commit is contained in:
dab246
2023-08-29 15:42:15 +07:00
committed by Dat Vu
parent 53db04c4dd
commit fe310b666a
4 changed files with 40 additions and 13 deletions
@@ -18,4 +18,6 @@ class RefreshChangeEmailAction extends EmailUIAction {
@override
List<Object?> get props => [newState];
}
}
class CloseEmailDetailedViewAction extends EmailUIAction {}
@@ -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) {
@@ -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
);
}
});
}
}
@@ -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;