TF-1831 Persist browser history when invoke system back button in Setting View
Signed-off-by: dab246 <tdvu@linagora.com> (cherry picked from commit fe6b0a52c93be1b92024ff38aaf59f4e92677920)
This commit is contained in:
+29
-9
@@ -1414,13 +1414,23 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
BackButtonInterceptor.removeByName(AppRoutes.dashboard);
|
BackButtonInterceptor.removeByName(AppRoutes.dashboard);
|
||||||
final result = await push(
|
final result = await push(
|
||||||
AppRoutes.settings,
|
AppRoutes.settings,
|
||||||
arguments: ManageAccountArguments(sessionCurrent)
|
arguments: ManageAccountArguments(
|
||||||
|
sessionCurrent,
|
||||||
|
previousUri: RouteUtils.baseUri,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
BackButtonInterceptor.add(_onBackButtonInterceptor, name: AppRoutes.dashboard);
|
BackButtonInterceptor.add(_onBackButtonInterceptor, name: AppRoutes.dashboard);
|
||||||
if (result is VacationResponse) {
|
|
||||||
vacationResponse.value = result;
|
if (result is Tuple2) {
|
||||||
dispatchMailboxUIAction(RefreshChangeMailboxAction(null));
|
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,
|
AppRoutes.settings,
|
||||||
arguments: ManageAccountArguments(
|
arguments: ManageAccountArguments(
|
||||||
sessionCurrent,
|
sessionCurrent,
|
||||||
menuSettingCurrent: AccountMenuItem.vacation
|
menuSettingCurrent: AccountMenuItem.vacation,
|
||||||
|
previousUri: RouteUtils.baseUri
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
BackButtonInterceptor.add(_onBackButtonInterceptor, name: AppRoutes.dashboard);
|
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());
|
setSelectedEmail(email.toPresentationEmail());
|
||||||
}
|
}
|
||||||
|
|
||||||
void _replaceBrowserHistory() {
|
void _replaceBrowserHistory({Uri? uri}) {
|
||||||
|
log('MailboxDashBoardController::_replaceBrowserHistory:uri: $uri');
|
||||||
if (PlatformInfo.isWeb) {
|
if (PlatformInfo.isWeb) {
|
||||||
final selectedMailboxId = selectedMailbox.value?.id;
|
final selectedMailboxId = selectedMailbox.value?.id;
|
||||||
final selectedEmailId = selectedEmail.value?.id;
|
final selectedEmailId = selectedEmail.value?.id;
|
||||||
@@ -2247,7 +2267,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
}
|
}
|
||||||
RouteUtils.replaceBrowserHistory(
|
RouteUtils.replaceBrowserHistory(
|
||||||
title: title,
|
title: title,
|
||||||
url: RouteUtils.createUrlWebLocationBar(
|
url: uri ?? RouteUtils.createUrlWebLocationBar(
|
||||||
AppRoutes.dashboard,
|
AppRoutes.dashboard,
|
||||||
router: NavigationRouter(
|
router: NavigationRouter(
|
||||||
emailId: selectedEmail.value?.id,
|
emailId: selectedEmail.value?.id,
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
|
|
||||||
import 'package:back_button_interceptor/back_button_interceptor.dart';
|
import 'package:back_button_interceptor/back_button_interceptor.dart';
|
||||||
import 'package:core/core.dart';
|
import 'package:core/core.dart';
|
||||||
|
import 'package:dartz/dartz.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:forward/forward/capability_forward.dart';
|
import 'package:forward/forward/capability_forward.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
@@ -51,6 +52,7 @@ class ManageAccountDashBoardController extends ReloadableController {
|
|||||||
|
|
||||||
Session? sessionCurrent;
|
Session? sessionCurrent;
|
||||||
bool? isVacationDateDialogDisplayed;
|
bool? isVacationDateDialogDisplayed;
|
||||||
|
Uri? previousUri;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
@@ -97,6 +99,7 @@ class ManageAccountDashBoardController extends ReloadableController {
|
|||||||
if (arguments is ManageAccountArguments) {
|
if (arguments is ManageAccountArguments) {
|
||||||
sessionCurrent = arguments.session;
|
sessionCurrent = arguments.session;
|
||||||
accountId.value = arguments.session?.personalAccount.accountId;
|
accountId.value = arguments.session?.personalAccount.accountId;
|
||||||
|
previousUri = arguments.previousUri;
|
||||||
_getUserProfile();
|
_getUserProfile();
|
||||||
_bindingInteractorForMenuItemView(sessionCurrent, accountId.value);
|
_bindingInteractorForMenuItemView(sessionCurrent, accountId.value);
|
||||||
_getVacationResponse();
|
_getVacationResponse();
|
||||||
@@ -217,7 +220,7 @@ class ManageAccountDashBoardController extends ReloadableController {
|
|||||||
|
|
||||||
void backToMailboxDashBoard({BuildContext? context}) {
|
void backToMailboxDashBoard({BuildContext? context}) {
|
||||||
if (context != null && canBack(context)) {
|
if (context != null && canBack(context)) {
|
||||||
popBack(result: vacationResponse.value);
|
popBack(result: Tuple2(vacationResponse.value, previousUri));
|
||||||
} else {
|
} else {
|
||||||
log('ManageAccountDashBoardController::backToMailboxDashBoard(): canBack: FALSE');
|
log('ManageAccountDashBoardController::backToMailboxDashBoard(): canBack: FALSE');
|
||||||
pushAndPopAll(
|
pushAndPopAll(
|
||||||
@@ -316,32 +319,22 @@ class ManageAccountDashBoardController extends ReloadableController {
|
|||||||
|
|
||||||
bool _navigateToScreen() {
|
bool _navigateToScreen() {
|
||||||
log('ManageAccountDashBoardController::_navigateToScreen: settingsPageLevel: $settingsPageLevel');
|
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) {
|
switch(settingsPageLevel.value) {
|
||||||
case SettingsPageLevel.level1:
|
case SettingsPageLevel.level1:
|
||||||
backToUniversalSettings();
|
backToUniversalSettings();
|
||||||
return true;
|
return true;
|
||||||
case SettingsPageLevel.universal:
|
case SettingsPageLevel.universal:
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (currentContext != null && responsiveUtils.isWebDesktop(currentContext!)) {
|
|
||||||
if (accountMenuItemSelected.value == AccountMenuItem.profiles) {
|
|
||||||
backToMailboxDashBoard(context: currentContext);
|
backToMailboxDashBoard(context: currentContext);
|
||||||
return true;
|
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,9 +7,20 @@ class ManageAccountArguments with EquatableMixin {
|
|||||||
|
|
||||||
final Session? session;
|
final Session? session;
|
||||||
final AccountMenuItem? menuSettingCurrent;
|
final AccountMenuItem? menuSettingCurrent;
|
||||||
|
final Uri? previousUri;
|
||||||
|
|
||||||
ManageAccountArguments(this.session, {this.menuSettingCurrent});
|
ManageAccountArguments(
|
||||||
|
this.session,
|
||||||
|
{
|
||||||
|
this.menuSettingCurrent,
|
||||||
|
this.previousUri,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [session, menuSettingCurrent];
|
List<Object?> get props => [
|
||||||
|
session,
|
||||||
|
menuSettingCurrent,
|
||||||
|
previousUri,
|
||||||
|
];
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user