TF-1831 Handle system back button in search email

Signed-off-by: dab246 <tdvu@linagora.com>

Signed-off-by: dab246 <tdvu@linagora.com>
(cherry picked from commit f4ffd113f192415c8613bf12fe40db1af902edaf)
This commit is contained in:
dab246
2023-12-09 15:59:20 +07:00
committed by Dat H. Pham
parent 535ac67971
commit bb98f02918
20 changed files with 492 additions and 250 deletions
@@ -36,8 +36,8 @@ import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_sta
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_star_state.dart';
import 'package:tmail_ui_user/features/email/domain/state/move_to_mailbox_state.dart';
import 'package:tmail_ui_user/features/email/domain/state/unsubscribe_email_state.dart';
import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.dart';
import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/action/mailbox_ui_action.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_all_recent_search_latest_state.dart';
@@ -71,7 +71,9 @@ import 'package:tmail_ui_user/features/thread/presentation/mixin/email_action_co
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:tmail_ui_user/main/routes/route_utils.dart';
class SearchEmailController extends BaseController
with EmailActionController,
@@ -99,6 +101,7 @@ class SearchEmailController extends BaseController
late Debouncer<String> _deBouncerTime;
late Worker dashBoardViewStateWorker;
late Worker dashBoardActionWorker;
late SearchMoreState searchMoreState;
late bool canSearchMore;
@@ -217,6 +220,16 @@ class SearchEmailController extends BaseController
}
});
});
dashBoardActionWorker = ever(
mailboxDashBoardController.dashBoardAction,
(action) {
if (action is CloseSearchEmailViewAction) {
closeSearchView(context: currentContext);
mailboxDashBoardController.clearDashBoardAction();
}
}
);
}
void _refreshEmailChanges() {
@@ -293,7 +306,18 @@ class SearchEmailController extends BaseController
canSearchMore = true;
searchIsRunning.value = true;
cancelSelectionMode(context);
if (PlatformInfo.isWeb) {
RouteUtils.replaceBrowserHistory(
title: 'SearchEmail',
url: RouteUtils.createUrlWebLocationBar(
AppRoutes.dashboard,
router: NavigationRouter(
searchQuery: searchQuery,
dashboardType: DashboardType.search
)
)
);
}
consumeState(_searchEmailInteractor.execute(
session!,
accountId!,
@@ -646,7 +670,6 @@ class SearchEmailController extends BaseController
textInputSearchController.clear();
currentSearchText.value = '';
listSuggestionSearch.clear();
textInputSearchFocus.requestFocus();
}
void clearAllResultSearch() {
@@ -658,14 +681,26 @@ class SearchEmailController extends BaseController
simpleSearchFilter.value = SimpleSearchFilter();
}
void closeSearchView(BuildContext context) {
log('SearchEmailController::closeSearchView(): ');
void closeSearchView({BuildContext? context}) {
clearAllTextInputSearchForm();
clearAllResultSearch();
KeyboardUtils.hideKeyboard(context);
if (context != null) {
KeyboardUtils.hideKeyboard(context);
}
mailboxDashBoardController.searchController.disableAllSearchEmail();
mailboxDashBoardController.dispatchMailboxUIAction(SelectMailboxDefaultAction());
mailboxDashBoardController.dispatchRoute(DashboardRoutes.thread);
if (PlatformInfo.isWeb) {
RouteUtils.replaceBrowserHistory(
title: 'Mailbox-${mailboxDashBoardController.selectedMailbox.value?.id.id.value}',
url: RouteUtils.createUrlWebLocationBar(
AppRoutes.dashboard,
router: NavigationRouter(
mailboxId: mailboxDashBoardController.selectedMailbox.value?.id,
dashboardType: DashboardType.normal
)
)
);
}
SearchEmailBindings().disposeBindings();
}
@@ -811,6 +846,7 @@ class SearchEmailController extends BaseController
resultSearchScrollController.dispose();
_deBouncerTime.cancel();
dashBoardViewStateWorker.dispose();
dashBoardActionWorker.dispose();
super.onClose();
}
}
@@ -43,7 +43,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
Widget build(BuildContext context) {
if (controller.responsiveUtils.isWebDesktop(context)) {
WidgetsBinding.instance.addPostFrameCallback((_) {
controller.closeSearchView(context);
controller.closeSearchView(context: context);
});
}
@@ -115,7 +115,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
fit: BoxFit.fill
),
tooltip: AppLocalizations.of(context).back,
onTap: () => controller.closeSearchView(context)
onTap: () => controller.closeSearchView(context: context)
),
Expanded(child: TextFieldBuilder(
onTextChange: controller.onTextSearchChange,