From 9af311ae1d93a361722927a73d3723091edae339 Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 7 Dec 2022 15:37:47 +0700 Subject: [PATCH] TF-1201 Support right click to open mailbox in new tab --- .../mailbox/presentation/mailbox_controller.dart | 13 +++++++++++++ .../mailbox/presentation/mailbox_view_web.dart | 1 + .../mailbox/presentation/model/mailbox_actions.dart | 7 +++++++ .../presentation/mixin/email_action_controller.dart | 11 ++--------- lib/main/utils/app_utils.dart | 8 ++++++++ 5 files changed, 31 insertions(+), 9 deletions(-) diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index 4c847b082..bd0fb0f2a 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -71,6 +71,7 @@ import 'package:tmail_ui_user/main/routes/app_routes.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'; +import 'package:tmail_ui_user/main/utils/app_utils.dart'; import 'package:uuid/uuid.dart'; class MailboxController extends BaseMailboxController { @@ -1121,11 +1122,23 @@ class MailboxController extends BaseMailboxController { case MailboxActions.markAsRead: _markAsReadMailboxAction(context, mailbox); break; + case MailboxActions.openInNewTab: + openMailboxInNewTabAction(mailbox); + break; default: break; } } + void openMailboxInNewTabAction(PresentationMailbox mailbox) { + final mailboxRouteWeb = RouteUtils.generateRouteBrowser( + AppRoutes.dashboard, + NavigationRouter(mailboxId: mailbox.id) + ); + log('MailboxController::openMailboxInNewTabAction(): mailboxRouteWeb: $mailboxRouteWeb'); + AppUtils.launchLink(mailboxRouteWeb.toString()); + } + void _updateSelectedMailboxRouteOnBrowser() { if (BuildUtils.isWeb) { final selectedMailboxId = selectedMailbox?.id; diff --git a/lib/features/mailbox/presentation/mailbox_view_web.dart b/lib/features/mailbox/presentation/mailbox_view_web.dart index 2afad7c4c..19f5c180c 100644 --- a/lib/features/mailbox/presentation/mailbox_view_web.dart +++ b/lib/features/mailbox/presentation/mailbox_view_web.dart @@ -401,6 +401,7 @@ class MailboxView extends GetWidget with AppLoaderMixin, Popu PresentationMailbox mailbox ) { final mailboxActionsSupported = [ + MailboxActions.openInNewTab, MailboxActions.markAsRead, MailboxActions.move, MailboxActions.rename, diff --git a/lib/features/mailbox/presentation/model/mailbox_actions.dart b/lib/features/mailbox/presentation/model/mailbox_actions.dart index 69a3ab1d1..3b33869ab 100644 --- a/lib/features/mailbox/presentation/model/mailbox_actions.dart +++ b/lib/features/mailbox/presentation/model/mailbox_actions.dart @@ -14,6 +14,7 @@ enum MailboxActions { move, markAsRead, selectForRuleAction, + openInNewTab } extension MailboxActionsExtension on MailboxActions { @@ -35,6 +36,8 @@ extension MailboxActionsExtension on MailboxActions { String getTitleContextMenu(BuildContext context) { switch(this) { + case MailboxActions.openInNewTab: + return AppLocalizations.of(context).openInNewTab; case MailboxActions.markAsRead: return AppLocalizations.of(context).mark_as_read; case MailboxActions.move: @@ -50,6 +53,8 @@ extension MailboxActionsExtension on MailboxActions { String getContextMenuIcon(ImagePaths imagePaths) { switch(this) { + case MailboxActions.openInNewTab: + return imagePaths.icOpenInNewTab; case MailboxActions.markAsRead: return imagePaths.icRead; case MailboxActions.move: @@ -110,6 +115,8 @@ extension MailboxActionsExtension on MailboxActions { ContextMenuItemState getContextMenuItemState(PresentationMailbox mailbox) { switch(this) { + case MailboxActions.openInNewTab: + return ContextMenuItemState.activated; case MailboxActions.markAsRead: return mailbox.getCountUnReadEmails().isNotEmpty ? ContextMenuItemState.activated diff --git a/lib/features/thread/presentation/mixin/email_action_controller.dart b/lib/features/thread/presentation/mixin/email_action_controller.dart index 6723c32a3..af584f5fd 100644 --- a/lib/features/thread/presentation/mixin/email_action_controller.dart +++ b/lib/features/thread/presentation/mixin/email_action_controller.dart @@ -28,7 +28,7 @@ import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_t 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/route_navigation.dart'; -import 'package:url_launcher/url_launcher.dart'; +import 'package:tmail_ui_user/main/utils/app_utils.dart'; mixin EmailActionController on ViewAsDialogActionMixin { @@ -283,13 +283,6 @@ mixin EmailActionController on ViewAsDialogActionMixin { } void openEmailInNewTabAction(BuildContext context, PresentationEmail email) { - launchLink(email.routeWebAsString); - } - - Future launchLink(String url, {bool isNewTab = true}) async { - await launchUrl( - Uri.parse(url), - webOnlyWindowName: isNewTab ? '_blank' : '_self', - ); + AppUtils.launchLink(email.routeWebAsString); } } \ No newline at end of file diff --git a/lib/main/utils/app_utils.dart b/lib/main/utils/app_utils.dart index 4a11e0881..590b36330 100644 --- a/lib/main/utils/app_utils.dart +++ b/lib/main/utils/app_utils.dart @@ -1,5 +1,6 @@ import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:tmail_ui_user/main/utils/app_config.dart'; +import 'package:url_launcher/url_launcher.dart'; class AppUtils { @@ -12,4 +13,11 @@ class AppUtils { static Future loadFcmConfigFile() { return dotenv.load(fileName: AppConfig.appFCMConfigurationPath); } + + static Future launchLink(String url, {bool isNewTab = true}) async { + await launchUrl( + Uri.parse(url), + webOnlyWindowName: isNewTab ? '_blank' : '_self', + ); + } } \ No newline at end of file