From 03b3d1181f17a221945b690a16a7bf90fe1e12a3 Mon Sep 17 00:00:00 2001 From: dab246 Date: Thu, 11 Dec 2025 12:25:49 +0700 Subject: [PATCH] TF-4195 Add `Label as` to email context menu --- assets/images/ic_thumbs_up.svg | 3 +++ core/lib/presentation/resources/image_paths.dart | 1 + .../extensions/email_action_type_extension.dart | 4 ++++ .../presentation/controller/single_email_controller.dart | 5 +++++ lib/features/email/presentation/email_view.dart | 2 ++ .../utils/email_action_reactor/email_action_reactor.dart | 3 +++ lib/l10n/intl_messages.arb | 6 ++++++ lib/main/localizations/app_localizations.dart | 7 +++++++ model/lib/email/email_action_type.dart | 1 + 9 files changed, 32 insertions(+) create mode 100644 assets/images/ic_thumbs_up.svg diff --git a/assets/images/ic_thumbs_up.svg b/assets/images/ic_thumbs_up.svg new file mode 100644 index 000000000..6783c7c53 --- /dev/null +++ b/assets/images/ic_thumbs_up.svg @@ -0,0 +1,3 @@ + + + diff --git a/core/lib/presentation/resources/image_paths.dart b/core/lib/presentation/resources/image_paths.dart index d220549a7..cea0e2cdf 100644 --- a/core/lib/presentation/resources/image_paths.dart +++ b/core/lib/presentation/resources/image_paths.dart @@ -277,6 +277,7 @@ class ImagePaths { String get icAiMorePolite => _getImagePath('ic_ai_more_polite.svg'); String get icTag => _getImagePath('ic_tag.svg'); String get icColorPicker => _getImagePath('ic_color_picker.svg'); + String get icThumbsUp => _getImagePath('ic_thumbs_up.svg'); String _getImagePath(String imageName) { return AssetsPaths.images + imageName; diff --git a/lib/features/composer/presentation/extensions/email_action_type_extension.dart b/lib/features/composer/presentation/extensions/email_action_type_extension.dart index 99263639d..0a1ba7414 100644 --- a/lib/features/composer/presentation/extensions/email_action_type_extension.dart +++ b/lib/features/composer/presentation/extensions/email_action_type_extension.dart @@ -175,6 +175,8 @@ extension EmailActionTypeExtension on EmailActionType { case EmailActionType.moveToTrash: case EmailActionType.deletePermanently: return imagePaths.icDeleteComposer; + case EmailActionType.labelAs: + return imagePaths.icTag; default: return ''; } @@ -222,6 +224,8 @@ extension EmailActionTypeExtension on EmailActionType { return appLocalizations.move_to_trash; case EmailActionType.deletePermanently: return appLocalizations.delete_permanently; + case EmailActionType.labelAs: + return appLocalizations.labelAs; default: return ''; } diff --git a/lib/features/email/presentation/controller/single_email_controller.dart b/lib/features/email/presentation/controller/single_email_controller.dart index 4a9cffda1..ec1378ad0 100644 --- a/lib/features/email/presentation/controller/single_email_controller.dart +++ b/lib/features/email/presentation/controller/single_email_controller.dart @@ -1551,4 +1551,9 @@ class SingleEmailController extends BaseController with AppLoaderMixin { _threadDetailController?.onNextMobile(); } } + + bool get isLabelFeatureEnabled { + return mailboxDashBoardController.isLabelCapabilitySupported && + mailboxDashBoardController.labelController.isLabelSettingEnabled.isTrue; + } } \ No newline at end of file diff --git a/lib/features/email/presentation/email_view.dart b/lib/features/email/presentation/email_view.dart index baf1b26cc..c6688fb05 100644 --- a/lib/features/email/presentation/email_view.dart +++ b/lib/features/email/presentation/email_view.dart @@ -102,6 +102,7 @@ class EmailView extends GetWidget { handleEmailAction: controller.handleEmailAction, additionalActions: [], emailIsRead: presentationEmail.hasRead, + isLabelFeatureEnabled: controller.isLabelFeatureEnabled, openBottomSheetContextMenu: controller.mailboxDashBoardController.openBottomSheetContextMenu, openPopupMenu: controller.mailboxDashBoardController.openPopupMenuActionGroup, ); @@ -307,6 +308,7 @@ class EmailView extends GetWidget { EmailActionType.deletePermanently, ], emailIsRead: presentationEmail.hasRead, + isLabelFeatureEnabled: controller.isLabelFeatureEnabled, openBottomSheetContextMenu: controller.mailboxDashBoardController.openBottomSheetContextMenu, openPopupMenu: controller.mailboxDashBoardController.openPopupMenuActionGroup, ), diff --git a/lib/features/email/presentation/utils/email_action_reactor/email_action_reactor.dart b/lib/features/email/presentation/utils/email_action_reactor/email_action_reactor.dart index 35cd624e1..7d4f5341b 100644 --- a/lib/features/email/presentation/utils/email_action_reactor/email_action_reactor.dart +++ b/lib/features/email/presentation/utils/email_action_reactor/email_action_reactor.dart @@ -483,6 +483,7 @@ class EmailActionReactor { ) handleEmailAction, required List additionalActions, required bool emailIsRead, + required bool isLabelFeatureEnabled, required OpenBottomSheetContextMenuAction openBottomSheetContextMenu, required OpenPopupMenuActionGroup openPopupMenu, }) { @@ -499,6 +500,8 @@ class EmailActionReactor { if (EmailUtils.isReplyToListEnabled(presentationEmail.listPost ?? '') && additionalActions.contains(EmailActionType.replyToList)) EmailActionType.replyToList, + if (isLabelFeatureEnabled) + EmailActionType.labelAs, if (PlatformInfo.isWeb && PlatformInfo.isCanvasKit && additionalActions.contains(EmailActionType.printAll)) diff --git a/lib/l10n/intl_messages.arb b/lib/l10n/intl_messages.arb index 8175408a6..3ea2816d4 100644 --- a/lib/l10n/intl_messages.arb +++ b/lib/l10n/intl_messages.arb @@ -5289,5 +5289,11 @@ "type": "text", "placeholders_order": [], "placeholders": {} + }, + "labelAs": "Label as", + "@labelAs": { + "type": "text", + "placeholders_order": [], + "placeholders": {} } } \ No newline at end of file diff --git a/lib/main/localizations/app_localizations.dart b/lib/main/localizations/app_localizations.dart index 69baf4746..9fb49d18b 100644 --- a/lib/main/localizations/app_localizations.dart +++ b/lib/main/localizations/app_localizations.dart @@ -5619,4 +5619,11 @@ class AppLocalizations { name: 'theLabelFeatureIsNowAvailable', ); } + + String get labelAs { + return Intl.message( + 'Label as', + name: 'labelAs', + ); + } } diff --git a/model/lib/email/email_action_type.dart b/model/lib/email/email_action_type.dart index b56c6d057..30cba1d76 100644 --- a/model/lib/email/email_action_type.dart +++ b/model/lib/email/email_action_type.dart @@ -4,6 +4,7 @@ enum EmailActionType { replyToList(1), forward(1), replyAll(1), + labelAs(1), compose(), markAsRead(2), markAsUnread(2),