TF-934 Handle route path when open email in new tab

This commit is contained in:
dab246
2022-11-04 22:00:37 +07:00
committed by Dat H. Pham
parent 4c9beb7526
commit 171b791449
12 changed files with 189 additions and 71 deletions
@@ -34,6 +34,7 @@ import 'package:tmail_ui_user/features/thread/data/network/thread_isolate_worker
import 'package:tmail_ui_user/features/thread/data/repository/thread_repository_impl.dart';
import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/empty_trash_folder_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/get_email_by_id_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/get_emails_in_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/load_more_emails_in_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/mark_as_multiple_email_read_interactor.dart';
@@ -65,6 +66,7 @@ class ThreadBindings extends BaseBindings {
Get.find<MarkAsEmailReadInteractor>(),
Get.find<MoveToMailboxInteractor>(),
Get.find<CachingManager>(),
Get.find<GetEmailByIdInteractor>(),
));
}
@@ -135,6 +137,7 @@ class ThreadBindings extends BaseBindings {
Get.lazyPut(() => MoveToMailboxInteractor(
Get.find<EmailRepository>(),
Get.find<MailboxRepository>()));
Get.lazyPut(() => GetEmailByIdInteractor(Get.find<ThreadRepository>()));
}
@override
@@ -54,6 +54,7 @@ import 'package:tmail_ui_user/features/thread/domain/model/get_email_request.dar
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
import 'package:tmail_ui_user/features/thread/domain/state/empty_trash_folder_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/get_all_email_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/get_email_by_id_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/load_more_emails_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/mark_as_multiple_email_read_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/mark_as_star_multiple_email_state.dart';
@@ -62,6 +63,7 @@ import 'package:tmail_ui_user/features/thread/domain/state/refresh_changes_all_e
import 'package:tmail_ui_user/features/thread/domain/state/search_email_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/search_more_email_state.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/empty_trash_folder_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/get_email_by_id_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/get_emails_in_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/load_more_emails_in_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/mark_as_multiple_email_read_interactor.dart';
@@ -102,6 +104,7 @@ class ThreadController extends BaseController {
final MarkAsEmailReadInteractor _markAsEmailReadInteractor;
final MoveToMailboxInteractor _moveToMailboxInteractor;
final CachingManager _cachingManager;
final GetEmailByIdInteractor _getEmailByIdInteractor;
final listEmailDrag = <PresentationEmail>[].obs;
bool _rangeSelectionMode = false;
@@ -149,11 +152,12 @@ class ThreadController extends BaseController {
this._markAsEmailReadInteractor,
this._moveToMailboxInteractor,
this._cachingManager,
this._getEmailByIdInteractor,
);
@override
void onInit() {
_initWorker();
_registerListenerWorker();
super.onInit();
}
@@ -167,7 +171,7 @@ class ThreadController extends BaseController {
void onClose() {
listEmailController.dispose();
focusNodeKeyBoard.dispose();
_clearWorker();
_unregisterListenerWorker();
super.onClose();
}
@@ -195,6 +199,16 @@ class ThreadController extends BaseController {
_searchMoreEmailsSuccess(success);
} else if (success is SearchingMoreState || success is LoadingMoreState) {
_isLoadingMore = true;
} else if (success is GetEmailByIdSuccess) {
if (currentContext != null) {
final mailboxContain = success.email
.findMailboxContain(mailboxDashBoardController.mapMailboxById);
pressEmailAction(
currentContext!,
EmailActionType.preview,
success.email,
mailboxContain: mailboxContain);
}
}
}
);
@@ -243,7 +257,7 @@ class ThreadController extends BaseController {
_handleErrorGetAllOrRefreshChangesEmail(error);
}
void _initWorker() {
void _registerListenerWorker() {
mailboxWorker = ever(mailboxDashBoardController.selectedMailbox, (mailbox) {
if (mailbox is PresentationMailbox) {
if (_currentMailboxId != mailbox.id) {
@@ -272,39 +286,40 @@ class ThreadController extends BaseController {
});
dashboardActionWorker = ever(mailboxDashBoardController.dashBoardAction, (action) {
if (action is DashBoardAction) {
if (action is RefreshAllEmailAction) {
refreshAllEmail();
mailboxDashBoardController.clearDashBoardAction();
} else if (action is SelectionAllEmailAction) {
setSelectAllEmailAction();
mailboxDashBoardController.clearDashBoardAction();
} else if (action is CancelSelectionAllEmailAction) {
cancelSelectEmail();
mailboxDashBoardController.clearDashBoardAction();
} else if (action is FilterMessageAction) {
filterMessagesAction(action.context, action.option);
mailboxDashBoardController.clearDashBoardAction();
} else if (action is HandleEmailActionTypeAction) {
pressEmailSelectionAction(action.context, action.emailAction, action.listEmailSelected);
mailboxDashBoardController.clearDashBoardAction();
} else if (action is OpenEmailDetailedFromSuggestionQuickSearchAction) {
final mailboxContain = action.presentationEmail
.findMailboxContain(mailboxDashBoardController.mapMailboxById);
pressEmailAction(
action.context,
EmailActionType.preview,
action.presentationEmail,
mailboxContain: mailboxContain);
mailboxDashBoardController.clearDashBoardAction();
} else if (action is StartSearchEmailAction) {
cancelSelectEmail();
_searchEmail();
mailboxDashBoardController.clearDashBoardAction();
} else if (action is EmptyTrashAction) {
deleteSelectionEmailsPermanently(action.context, DeleteActionType.all);
mailboxDashBoardController.clearDashBoardAction();
}
if (action is RefreshAllEmailAction) {
refreshAllEmail();
mailboxDashBoardController.clearDashBoardAction();
} else if (action is SelectionAllEmailAction) {
setSelectAllEmailAction();
mailboxDashBoardController.clearDashBoardAction();
} else if (action is CancelSelectionAllEmailAction) {
cancelSelectEmail();
mailboxDashBoardController.clearDashBoardAction();
} else if (action is FilterMessageAction) {
filterMessagesAction(action.context, action.option);
mailboxDashBoardController.clearDashBoardAction();
} else if (action is HandleEmailActionTypeAction) {
pressEmailSelectionAction(action.context, action.emailAction, action.listEmailSelected);
mailboxDashBoardController.clearDashBoardAction();
} else if (action is OpenEmailDetailedFromSuggestionQuickSearchAction) {
final mailboxContain = action.presentationEmail
.findMailboxContain(mailboxDashBoardController.mapMailboxById);
pressEmailAction(
action.context,
EmailActionType.preview,
action.presentationEmail,
mailboxContain: mailboxContain);
mailboxDashBoardController.clearDashBoardAction();
} else if (action is StartSearchEmailAction) {
cancelSelectEmail();
_searchEmail();
mailboxDashBoardController.clearDashBoardAction();
} else if (action is EmptyTrashAction) {
deleteSelectionEmailsPermanently(action.context, DeleteActionType.all);
mailboxDashBoardController.clearDashBoardAction();
} else if (action is SelectEmailByIdAction) {
_openEmailDetailedView(action.emailId);
mailboxDashBoardController.clearDashBoardAction();
}
});
@@ -339,12 +354,12 @@ class ThreadController extends BaseController {
});
}
void _clearWorker() {
mailboxWorker.call();
dashboardActionWorker.call();
searchWorker.call();
advancedSearchFilterWorker.call();
viewStateWorker.call();
void _unregisterListenerWorker() {
mailboxWorker.dispose();
dashboardActionWorker.dispose();
searchWorker.dispose();
advancedSearchFilterWorker.dispose();
viewStateWorker.dispose();
}
void _handleErrorGetAllOrRefreshChangesEmail(dynamic error) async {
@@ -1529,4 +1544,13 @@ class ThreadController extends BaseController {
? KeyEventResult.handled
: KeyEventResult.ignored;
}
void _openEmailDetailedView(EmailId emailId) {
if (_accountId != null) {
consumeState(_getEmailByIdInteractor.execute(
_accountId!,
emailId,
properties: ThreadConstants.propertiesDefault));
}
}
}
@@ -12,8 +12,8 @@ import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
import 'package:tmail_ui_user/features/thread/presentation/mixin/base_email_item_tile.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/browser_route_utils.dart';
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
import 'package:tmail_ui_user/main/routes/route_utils.dart';
import 'package:url_launcher/link.dart';
class EmailTileBuilder with BaseEmailItemTile {
@@ -91,7 +91,7 @@ class EmailTileBuilder with BaseEmailItemTile {
color: AppColor.colorItemEmailSelectedDesktop)
: null,
child: Link(
uri: BrowserRouteUtils.generateRoutePathBrowser(
uri: RouteUtils.generateRoutePathBrowser(
AppRoutes.dashboard,
NavigationRouter(
emailId: _presentationEmail.id,
@@ -118,7 +118,7 @@ class EmailTileBuilder with BaseEmailItemTile {
color: Colors.white),
alignment: Alignment.center,
child: Link(
uri: BrowserRouteUtils.generateRoutePathBrowser(
uri: RouteUtils.generateRoutePathBrowser(
AppRoutes.dashboard,
NavigationRouter(
emailId: _presentationEmail.id,