TF-1201 Support right click to open mailbox in new tab
This commit is contained in:
@@ -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/navigation_router.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.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/routes/route_utils.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
import 'package:uuid/uuid.dart';
|
import 'package:uuid/uuid.dart';
|
||||||
|
|
||||||
class MailboxController extends BaseMailboxController {
|
class MailboxController extends BaseMailboxController {
|
||||||
@@ -1121,11 +1122,23 @@ class MailboxController extends BaseMailboxController {
|
|||||||
case MailboxActions.markAsRead:
|
case MailboxActions.markAsRead:
|
||||||
_markAsReadMailboxAction(context, mailbox);
|
_markAsReadMailboxAction(context, mailbox);
|
||||||
break;
|
break;
|
||||||
|
case MailboxActions.openInNewTab:
|
||||||
|
openMailboxInNewTabAction(mailbox);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
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() {
|
void _updateSelectedMailboxRouteOnBrowser() {
|
||||||
if (BuildUtils.isWeb) {
|
if (BuildUtils.isWeb) {
|
||||||
final selectedMailboxId = selectedMailbox?.id;
|
final selectedMailboxId = selectedMailbox?.id;
|
||||||
|
|||||||
@@ -401,6 +401,7 @@ class MailboxView extends GetWidget<MailboxController> with AppLoaderMixin, Popu
|
|||||||
PresentationMailbox mailbox
|
PresentationMailbox mailbox
|
||||||
) {
|
) {
|
||||||
final mailboxActionsSupported = [
|
final mailboxActionsSupported = [
|
||||||
|
MailboxActions.openInNewTab,
|
||||||
MailboxActions.markAsRead,
|
MailboxActions.markAsRead,
|
||||||
MailboxActions.move,
|
MailboxActions.move,
|
||||||
MailboxActions.rename,
|
MailboxActions.rename,
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ enum MailboxActions {
|
|||||||
move,
|
move,
|
||||||
markAsRead,
|
markAsRead,
|
||||||
selectForRuleAction,
|
selectForRuleAction,
|
||||||
|
openInNewTab
|
||||||
}
|
}
|
||||||
|
|
||||||
extension MailboxActionsExtension on MailboxActions {
|
extension MailboxActionsExtension on MailboxActions {
|
||||||
@@ -35,6 +36,8 @@ extension MailboxActionsExtension on MailboxActions {
|
|||||||
|
|
||||||
String getTitleContextMenu(BuildContext context) {
|
String getTitleContextMenu(BuildContext context) {
|
||||||
switch(this) {
|
switch(this) {
|
||||||
|
case MailboxActions.openInNewTab:
|
||||||
|
return AppLocalizations.of(context).openInNewTab;
|
||||||
case MailboxActions.markAsRead:
|
case MailboxActions.markAsRead:
|
||||||
return AppLocalizations.of(context).mark_as_read;
|
return AppLocalizations.of(context).mark_as_read;
|
||||||
case MailboxActions.move:
|
case MailboxActions.move:
|
||||||
@@ -50,6 +53,8 @@ extension MailboxActionsExtension on MailboxActions {
|
|||||||
|
|
||||||
String getContextMenuIcon(ImagePaths imagePaths) {
|
String getContextMenuIcon(ImagePaths imagePaths) {
|
||||||
switch(this) {
|
switch(this) {
|
||||||
|
case MailboxActions.openInNewTab:
|
||||||
|
return imagePaths.icOpenInNewTab;
|
||||||
case MailboxActions.markAsRead:
|
case MailboxActions.markAsRead:
|
||||||
return imagePaths.icRead;
|
return imagePaths.icRead;
|
||||||
case MailboxActions.move:
|
case MailboxActions.move:
|
||||||
@@ -110,6 +115,8 @@ extension MailboxActionsExtension on MailboxActions {
|
|||||||
|
|
||||||
ContextMenuItemState getContextMenuItemState(PresentationMailbox mailbox) {
|
ContextMenuItemState getContextMenuItemState(PresentationMailbox mailbox) {
|
||||||
switch(this) {
|
switch(this) {
|
||||||
|
case MailboxActions.openInNewTab:
|
||||||
|
return ContextMenuItemState.activated;
|
||||||
case MailboxActions.markAsRead:
|
case MailboxActions.markAsRead:
|
||||||
return mailbox.getCountUnReadEmails().isNotEmpty
|
return mailbox.getCountUnReadEmails().isNotEmpty
|
||||||
? ContextMenuItemState.activated
|
? 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/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.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 {
|
mixin EmailActionController on ViewAsDialogActionMixin {
|
||||||
|
|
||||||
@@ -283,13 +283,6 @@ mixin EmailActionController on ViewAsDialogActionMixin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void openEmailInNewTabAction(BuildContext context, PresentationEmail email) {
|
void openEmailInNewTabAction(BuildContext context, PresentationEmail email) {
|
||||||
launchLink(email.routeWebAsString);
|
AppUtils.launchLink(email.routeWebAsString);
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> launchLink(String url, {bool isNewTab = true}) async {
|
|
||||||
await launchUrl(
|
|
||||||
Uri.parse(url),
|
|
||||||
webOnlyWindowName: isNewTab ? '_blank' : '_self',
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
||||||
import 'package:tmail_ui_user/main/utils/app_config.dart';
|
import 'package:tmail_ui_user/main/utils/app_config.dart';
|
||||||
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
|
||||||
class AppUtils {
|
class AppUtils {
|
||||||
|
|
||||||
@@ -12,4 +13,11 @@ class AppUtils {
|
|||||||
static Future<void> loadFcmConfigFile() {
|
static Future<void> loadFcmConfigFile() {
|
||||||
return dotenv.load(fileName: AppConfig.appFCMConfigurationPath);
|
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',
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user