TF-1201 Support right click to open mailbox in new tab

This commit is contained in:
dab246
2022-12-07 15:37:47 +07:00
committed by Dat H. Pham
parent c9cfd43734
commit 9af311ae1d
5 changed files with 31 additions and 9 deletions
@@ -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;
@@ -401,6 +401,7 @@ class MailboxView extends GetWidget<MailboxController> with AppLoaderMixin, Popu
PresentationMailbox mailbox
) {
final mailboxActionsSupported = [
MailboxActions.openInNewTab,
MailboxActions.markAsRead,
MailboxActions.move,
MailboxActions.rename,
@@ -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
@@ -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<void> launchLink(String url, {bool isNewTab = true}) async {
await launchUrl(
Uri.parse(url),
webOnlyWindowName: isNewTab ? '_blank' : '_self',
);
AppUtils.launchLink(email.routeWebAsString);
}
}
+8
View File
@@ -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<void> loadFcmConfigFile() {
return dotenv.load(fileName: AppConfig.appFCMConfigurationPath);
}
static Future<void> launchLink(String url, {bool isNewTab = true}) async {
await launchUrl(
Uri.parse(url),
webOnlyWindowName: isNewTab ? '_blank' : '_self',
);
}
}