TF-4243 Add Delete label action to context menu

This commit is contained in:
dab246
2026-01-27 12:38:58 +07:00
committed by Dat H. Pham
parent 6aab6f83eb
commit 5914877b1b
8 changed files with 88 additions and 14 deletions
@@ -104,7 +104,7 @@ class EmailView extends GetWidget<SingleEmailController> {
handleEmailAction: controller.handleEmailAction,
additionalActions: [],
emailIsRead: presentationEmail.hasRead,
isLabelFeatureEnabled: controller.isLabelAvailable,
isLabelAvailable: controller.isLabelAvailable,
labels: controller.mailboxDashBoardController.labelController.labels,
openBottomSheetContextMenu: controller.mailboxDashBoardController.openBottomSheetContextMenu,
openPopupMenu: controller.mailboxDashBoardController.openPopupMenuActionGroup,
@@ -315,7 +315,7 @@ class EmailView extends GetWidget<SingleEmailController> {
EmailActionType.deletePermanently,
],
emailIsRead: presentationEmail.hasRead,
isLabelFeatureEnabled: controller.isLabelAvailable,
isLabelAvailable: controller.isLabelAvailable,
labels: controller.mailboxDashBoardController.labelController.labels,
openBottomSheetContextMenu: controller.mailboxDashBoardController.openBottomSheetContextMenu,
openPopupMenu: controller.mailboxDashBoardController.openPopupMenuActionGroup,
@@ -488,7 +488,7 @@ class EmailActionReactor {
) handleEmailAction,
required List<EmailActionType> additionalActions,
required bool emailIsRead,
required bool isLabelFeatureEnabled,
required bool isLabelAvailable,
required OpenBottomSheetContextMenuAction openBottomSheetContextMenu,
required OpenPopupMenuActionGroup openPopupMenu,
List<Label>? labels,
@@ -507,7 +507,7 @@ class EmailActionReactor {
if (EmailUtils.isReplyToListEnabled(presentationEmail.listPost ?? '') &&
additionalActions.contains(EmailActionType.replyToList))
EmailActionType.replyToList,
if (isLabelFeatureEnabled)
if (isLabelAvailable)
EmailActionType.labelAs,
if (PlatformInfo.isWeb &&
PlatformInfo.isCanvasKit &&
@@ -28,6 +28,8 @@ extension HandleLabelActionTypeExtension on LabelController {
if (label == null) return;
openEditLabelModal(accountId: accountId, label: label);
break;
case LabelActionType.delete:
break;
}
}
@@ -12,7 +12,7 @@ import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
mixin LabelContextMenuMixin on PopupContextMenuActionMixin {
static const _labelActions = [LabelActionType.edit];
static const _labelActions = [LabelActionType.edit, LabelActionType.delete];
Future<void> _openLabelPopupMenuAction(
BuildContext context,
@@ -5,7 +5,8 @@ import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
enum LabelActionType {
create,
edit;
edit,
delete;
String getContextMenuTitle(AppLocalizations appLocalizations) {
switch (this) {
@@ -13,6 +14,8 @@ enum LabelActionType {
return appLocalizations.create;
case LabelActionType.edit:
return appLocalizations.edit;
case LabelActionType.delete:
return appLocalizations.delete;
}
}
@@ -22,15 +25,22 @@ enum LabelActionType {
return appLocalizations.createANewLabel;
case LabelActionType.edit:
return appLocalizations.editLabel;
case LabelActionType.delete:
return appLocalizations.deleteLabel;
}
}
String getModalSubtitle(AppLocalizations appLocalizations) {
String getModalSubtitle(
AppLocalizations appLocalizations, {
String labelName = '',
}) {
switch (this) {
case LabelActionType.create:
return appLocalizations.organizeYourInboxWithACustomCategory;
case LabelActionType.edit:
return appLocalizations.updateTheLabelName;
case LabelActionType.delete:
return appLocalizations.areYouSureYouWantToDeleteTheLabel(labelName);
}
}
@@ -40,15 +50,19 @@ enum LabelActionType {
return appLocalizations.createLabel;
case LabelActionType.edit:
return appLocalizations.save;
case LabelActionType.delete:
return '';
}
}
Key getModalPositiveActionKey() {
Key? getModalPositiveActionKey() {
switch (this) {
case LabelActionType.create:
return const Key('create_label_button_action');
case LabelActionType.edit:
return const Key('save_label_button_action');
case LabelActionType.delete:
return null;
}
}
@@ -58,16 +72,44 @@ enum LabelActionType {
return imagePaths.icAddNewFolder;
case LabelActionType.edit:
return imagePaths.icRenameMailbox;
case LabelActionType.delete:
return imagePaths.icDeleteMailbox;
}
}
Color getPopupMenuTitleColor() => Colors.black;
Color getPopupMenuTitleColor() {
switch (this) {
case LabelActionType.delete:
return AppColor.redFF3347;
default:
return Colors.black;
}
}
Color getPopupMenuIconColor() => AppColor.steelGrayA540;
Color getPopupMenuIconColor() {
switch (this) {
case LabelActionType.delete:
return AppColor.redFF3347;
default:
return AppColor.steelGrayA540;
}
}
Color getContextMenuIconColor() =>
AppColor.gray424244.withValues(alpha: 0.72);
Color getContextMenuIconColor() {
switch (this) {
case LabelActionType.delete:
return AppColor.redFF3347;
default:
return AppColor.gray424244.withValues(alpha: 0.72);
}
}
Color getContextMenuTitleColor() =>
AppColor.gray424244.withValues(alpha: 0.9);
Color getContextMenuTitleColor() {
switch (this) {
case LabelActionType.delete:
return AppColor.redFF3347;
default:
return AppColor.gray424244.withValues(alpha: 0.9);
}
}
}
+16
View File
@@ -5421,5 +5421,21 @@
"placeholders": {
"labelName": {}
}
},
"deleteLabel": "Delete label",
"@deleteLabel": {
"type": "text",
"placeholders_order": [],
"placeholders": {}
},
"areYouSureYouWantToDeleteTheLabel": "Are you sure you want to delete the label \"{labelName}\"?",
"@areYouSureYouWantToDeleteTheLabel": {
"type": "text",
"placeholders_order": [
"labelName"
],
"placeholders": {
"labelName": {}
}
}
}
@@ -5740,4 +5740,18 @@ class AppLocalizations {
args: [labelName],
);
}
String get deleteLabel {
return Intl.message(
'Delete label',
name: 'deleteLabel',
);
}
String areYouSureYouWantToDeleteTheLabel(String labelName) {
return Intl.message(
'Are you sure you want to delete the label "$labelName"?',
name: 'areYouSureYouWantToDeleteTheLabel',
args: [labelName],
);
}
}