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 @override
List<Object?> get props => [newState]; 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/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/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/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/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/controller/email_supervisor_controller.dart';
import 'package:tmail_ui_user/features/email/presentation/model/email_loaded.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, mailboxDashBoardController.selectedEmail,
_handleOpenEmailDetailedView _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) { bool isListEmailContainSelectedEmail(PresentationEmail selectedEmail) {
@@ -276,7 +276,10 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
mailboxDashBoardController.clearMailboxUIAction(); mailboxDashBoardController.clearMailboxUIAction();
} else if (action is OpenMailboxAction) { } else if (action is OpenMailboxAction) {
if (currentContext != null) { if (currentContext != null) {
openMailbox(currentContext!, action.presentationMailbox); _handleOpenMailbox(currentContext!, action.presentationMailbox);
if (action.presentationMailbox.role == PresentationMailbox.roleInbox) {
_autoScrollToTopMailboxList();
}
} }
mailboxDashBoardController.clearMailboxUIAction(); mailboxDashBoardController.clearMailboxUIAction();
} }
@@ -744,15 +747,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
final inboxMailbox = findMailboxNodeByRole(PresentationMailbox.roleInbox); final inboxMailbox = findMailboxNodeByRole(PresentationMailbox.roleInbox);
mailboxDashBoardController.setSelectedMailbox(inboxMailbox?.item); mailboxDashBoardController.setSelectedMailbox(inboxMailbox?.item);
_updateSelectedMailboxRouteOnBrowser(); _updateSelectedMailboxRouteOnBrowser();
_autoScrollToTopMailboxList();
WidgetsBinding.instance.addPostFrameCallback((_) {
if(mailboxListScrollController.hasClients){
mailboxListScrollController.animateTo(
0,
duration: const Duration(milliseconds: 500),
curve: Curves.fastOutSlowIn);
}
});
} }
void _deleteMailboxFailure(DeleteMultipleMailboxFailure failure) { void _deleteMailboxFailure(DeleteMultipleMailboxFailure failure) {
@@ -1209,8 +1204,20 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
final newMailboxNode = findMailboxNodeById(_newFolderId!); final newMailboxNode = findMailboxNodeById(_newFolderId!);
log('MailboxController::_redirectToNewFolder:newMailboxNode: $newMailboxNode'); log('MailboxController::_redirectToNewFolder:newMailboxNode: $newMailboxNode');
if (newMailboxNode != null && currentContext != null) { if (newMailboxNode != null && currentContext != null) {
openMailbox(currentContext!, newMailboxNode.item); _handleOpenMailbox(currentContext!, newMailboxNode.item);
} }
_clearNewFolderId(); _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() { void redirectToInboxAction() {
log('MailboxDashBoardController::redirectToInboxAction:'); log('MailboxDashBoardController::redirectToInboxAction:');
if (selectedMailbox.value?.role == PresentationMailbox.roleInbox) return; if (dashboardRoute.value == DashboardRoutes.emailDetailed) {
dispatchEmailUIAction(CloseEmailDetailedViewAction());
}
final inboxId = getMailboxIdByRole(PresentationMailbox.roleInbox); final inboxId = getMailboxIdByRole(PresentationMailbox.roleInbox);
if (inboxId == null) return; if (inboxId == null) return;