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 6b948baac..39b94406e 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -1414,13 +1414,23 @@ class MailboxDashBoardController extends ReloadableController { BackButtonInterceptor.removeByName(AppRoutes.dashboard); final result = await push( AppRoutes.settings, - arguments: ManageAccountArguments(sessionCurrent) + arguments: ManageAccountArguments( + sessionCurrent, + previousUri: RouteUtils.baseUri, + ), ); BackButtonInterceptor.add(_onBackButtonInterceptor, name: AppRoutes.dashboard); - if (result is VacationResponse) { - vacationResponse.value = result; - dispatchMailboxUIAction(RefreshChangeMailboxAction(null)); + + if (result is Tuple2) { + if (result.value1 is VacationResponse) { + vacationResponse.value = result.value1; + dispatchMailboxUIAction(RefreshChangeMailboxAction(null)); + } + await Future.delayed( + const Duration(milliseconds: 500), + () => _replaceBrowserHistory(uri: result.value2) + ); } } @@ -1477,13 +1487,22 @@ class MailboxDashBoardController extends ReloadableController { AppRoutes.settings, arguments: ManageAccountArguments( sessionCurrent, - menuSettingCurrent: AccountMenuItem.vacation + menuSettingCurrent: AccountMenuItem.vacation, + previousUri: RouteUtils.baseUri ) ); BackButtonInterceptor.add(_onBackButtonInterceptor, name: AppRoutes.dashboard); - if (result is VacationResponse) { - vacationResponse.value = result; + + if (result is Tuple2) { + if (result.value1 is VacationResponse) { + vacationResponse.value = result.value1; + dispatchMailboxUIAction(RefreshChangeMailboxAction(null)); + } + await Future.delayed( + const Duration(milliseconds: 500), + () => _replaceBrowserHistory(uri: result.value2) + ); } } @@ -2232,7 +2251,8 @@ class MailboxDashBoardController extends ReloadableController { setSelectedEmail(email.toPresentationEmail()); } - void _replaceBrowserHistory() { + void _replaceBrowserHistory({Uri? uri}) { + log('MailboxDashBoardController::_replaceBrowserHistory:uri: $uri'); if (PlatformInfo.isWeb) { final selectedMailboxId = selectedMailbox.value?.id; final selectedEmailId = selectedEmail.value?.id; @@ -2247,7 +2267,7 @@ class MailboxDashBoardController extends ReloadableController { } RouteUtils.replaceBrowserHistory( title: title, - url: RouteUtils.createUrlWebLocationBar( + url: uri ?? RouteUtils.createUrlWebLocationBar( AppRoutes.dashboard, router: NavigationRouter( emailId: selectedEmail.value?.id, diff --git a/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart b/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart index 596fb5598..0d3e909f8 100644 --- a/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart +++ b/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart @@ -1,6 +1,7 @@ import 'package:back_button_interceptor/back_button_interceptor.dart'; import 'package:core/core.dart'; +import 'package:dartz/dartz.dart'; import 'package:flutter/material.dart'; import 'package:forward/forward/capability_forward.dart'; import 'package:get/get.dart'; @@ -51,6 +52,7 @@ class ManageAccountDashBoardController extends ReloadableController { Session? sessionCurrent; bool? isVacationDateDialogDisplayed; + Uri? previousUri; @override void onInit() { @@ -97,6 +99,7 @@ class ManageAccountDashBoardController extends ReloadableController { if (arguments is ManageAccountArguments) { sessionCurrent = arguments.session; accountId.value = arguments.session?.personalAccount.accountId; + previousUri = arguments.previousUri; _getUserProfile(); _bindingInteractorForMenuItemView(sessionCurrent, accountId.value); _getVacationResponse(); @@ -217,7 +220,7 @@ class ManageAccountDashBoardController extends ReloadableController { void backToMailboxDashBoard({BuildContext? context}) { if (context != null && canBack(context)) { - popBack(result: vacationResponse.value); + popBack(result: Tuple2(vacationResponse.value, previousUri)); } else { log('ManageAccountDashBoardController::backToMailboxDashBoard(): canBack: FALSE'); pushAndPopAll( @@ -316,32 +319,22 @@ class ManageAccountDashBoardController extends ReloadableController { bool _navigateToScreen() { log('ManageAccountDashBoardController::_navigateToScreen: settingsPageLevel: $settingsPageLevel'); - if (PlatformInfo.isMobile) { + if (currentContext != null && responsiveUtils.isWebDesktop(currentContext!)) { + if (accountMenuItemSelected.value == AccountMenuItem.profiles) { + backToMailboxDashBoard(context: currentContext); + return true; + } else { + selectSettings(AccountMenuItem.profiles); + return true; + } + } else { switch(settingsPageLevel.value) { case SettingsPageLevel.level1: backToUniversalSettings(); return true; case SettingsPageLevel.universal: - return false; - } - } else { - if (currentContext != null && responsiveUtils.isWebDesktop(currentContext!)) { - if (accountMenuItemSelected.value == AccountMenuItem.profiles) { backToMailboxDashBoard(context: currentContext); return true; - } else { - selectSettings(AccountMenuItem.profiles); - return true; - } - } else { - switch(settingsPageLevel.value) { - case SettingsPageLevel.level1: - backToUniversalSettings(); - return true; - case SettingsPageLevel.universal: - backToMailboxDashBoard(context: currentContext); - return true; - } } } } diff --git a/lib/features/manage_account/presentation/model/manage_account_arguments.dart b/lib/features/manage_account/presentation/model/manage_account_arguments.dart index 17eab59cc..dd5968ff1 100644 --- a/lib/features/manage_account/presentation/model/manage_account_arguments.dart +++ b/lib/features/manage_account/presentation/model/manage_account_arguments.dart @@ -7,9 +7,20 @@ class ManageAccountArguments with EquatableMixin { final Session? session; final AccountMenuItem? menuSettingCurrent; + final Uri? previousUri; - ManageAccountArguments(this.session, {this.menuSettingCurrent}); + ManageAccountArguments( + this.session, + { + this.menuSettingCurrent, + this.previousUri, + } + ); @override - List get props => [session, menuSettingCurrent]; + List get props => [ + session, + menuSettingCurrent, + previousUri, + ]; } \ No newline at end of file