TF-3963 Additional context menu actions for ThreadView and EmailView

This commit is contained in:
DatDang
2025-08-21 16:58:49 +07:00
committed by Dat H. Pham
parent 81c8ac9bfb
commit f1280c5de9
5 changed files with 24 additions and 8 deletions
@@ -158,6 +158,8 @@ extension EmailActionTypeExtension on EmailActionType {
return imagePaths.icOpenInNewTab; return imagePaths.icOpenInNewTab;
case EmailActionType.printAll: case EmailActionType.printAll:
return imagePaths.icPrinter; return imagePaths.icPrinter;
case EmailActionType.reply:
return imagePaths.icReply;
case EmailActionType.forward: case EmailActionType.forward:
return imagePaths.icForward; return imagePaths.icForward;
case EmailActionType.replyAll: case EmailActionType.replyAll:
@@ -202,6 +204,8 @@ extension EmailActionTypeExtension on EmailActionType {
return appLocalizations.openInNewTab; return appLocalizations.openInNewTab;
case EmailActionType.printAll: case EmailActionType.printAll:
return appLocalizations.print; return appLocalizations.print;
case EmailActionType.reply:
return appLocalizations.reply;
case EmailActionType.forward: case EmailActionType.forward:
return appLocalizations.forward; return appLocalizations.forward;
case EmailActionType.replyAll: case EmailActionType.replyAll:
@@ -263,18 +263,16 @@ class EmailView extends GetWidget<SingleEmailController> {
username: controller.session?.username, username: controller.session?.username,
handleEmailAction: (email, action) => controller.handleEmailAction(context, email, action), handleEmailAction: (email, action) => controller.handleEmailAction(context, email, action),
additionalActions: [ additionalActions: [
EmailActionType.reply,
EmailActionType.forward, EmailActionType.forward,
EmailActionType.replyAll, EmailActionType.replyAll,
EmailActionType.replyToList, EmailActionType.replyToList,
EmailActionType.printAll, EmailActionType.printAll,
if (controller.responsiveUtils.isMobile(context)) EmailActionType.moveToMailbox,
EmailActionType.moveToMailbox, EmailActionType.markAsStarred,
if (!controller.responsiveUtils.isDesktop(context)) ...[ EmailActionType.unMarkAsStarred,
EmailActionType.markAsStarred, EmailActionType.moveToTrash,
EmailActionType.unMarkAsStarred, EmailActionType.deletePermanently,
EmailActionType.moveToTrash,
EmailActionType.deletePermanently,
],
], ],
emailIsRead: presentationEmail.hasRead, emailIsRead: presentationEmail.hasRead,
openBottomSheetContextMenu: controller.mailboxDashBoardController.openBottomSheetContextMenu, openBottomSheetContextMenu: controller.mailboxDashBoardController.openBottomSheetContextMenu,
@@ -538,6 +538,8 @@ class EmailActionReactor {
if (currentContext == null) return; if (currentContext == null) return;
final moreActions = [ final moreActions = [
if (additionalActions.contains(EmailActionType.reply))
EmailActionType.reply,
if (additionalActions.contains(EmailActionType.forward)) if (additionalActions.contains(EmailActionType.forward))
EmailActionType.forward, EmailActionType.forward,
if (presentationEmail.getCountMailAddressWithoutMe(username?.value ?? '') > 1 && if (presentationEmail.getCountMailAddressWithoutMe(username?.value ?? '') > 1 &&
@@ -18,8 +18,14 @@ extension HandleEmailMoreActionExtension on SearchEmailController {
final mailboxContain = presentationEmail.mailboxContain; final mailboxContain = presentationEmail.mailboxContain;
final isDrafts = mailboxContain?.isDrafts ?? false; final isDrafts = mailboxContain?.isDrafts ?? false;
final isSpam = mailboxContain?.isSpam ?? false; final isSpam = mailboxContain?.isSpam ?? false;
final isRead = presentationEmail.hasRead;
final isTrash = mailboxContain?.isTrash ?? false;
final canPermanentlyDelete = isDrafts || isSpam || isTrash;
final listEmailActions = [ final listEmailActions = [
isRead ? EmailActionType.markAsUnread : EmailActionType.markAsRead,
EmailActionType.moveToMailbox,
canPermanentlyDelete ? EmailActionType.deletePermanently : EmailActionType.moveToTrash,
isSpam ? EmailActionType.unSpam : EmailActionType.moveToSpam, isSpam ? EmailActionType.unSpam : EmailActionType.moveToSpam,
if (!isDrafts) EmailActionType.editAsNewEmail, if (!isDrafts) EmailActionType.editAsNewEmail,
]; ];
@@ -619,8 +619,14 @@ class ThreadView extends GetWidget<ThreadController>
final isSpam = mailboxContain?.isSpam ?? false; final isSpam = mailboxContain?.isSpam ?? false;
final isArchive = mailboxContain?.isArchive ?? false; final isArchive = mailboxContain?.isArchive ?? false;
final isTemplates = mailboxContain?.isTemplates ?? false; final isTemplates = mailboxContain?.isTemplates ?? false;
final isRead = presentationEmail.hasRead;
final isTrash = mailboxContain?.isTrash ?? false;
final canPermanentlyDelete = isDrafts || isSpam || isTrash;
final listEmailActions = [ final listEmailActions = [
isRead ? EmailActionType.markAsUnread : EmailActionType.markAsRead,
EmailActionType.moveToMailbox,
canPermanentlyDelete ? EmailActionType.deletePermanently : EmailActionType.moveToTrash,
EmailActionType.openInNewTab, EmailActionType.openInNewTab,
if (!isDrafts && !isChildOfTeamMailboxes) if (!isDrafts && !isChildOfTeamMailboxes)
isSpam ? EmailActionType.unSpam : EmailActionType.moveToSpam, isSpam ? EmailActionType.unSpam : EmailActionType.moveToSpam,