diff --git a/lib/features/base/widget/popup_menu/popup_menu_item_action_widget.dart b/lib/features/base/widget/popup_menu/popup_menu_item_action_widget.dart index 6e0087602..1900ccd61 100644 --- a/lib/features/base/widget/popup_menu/popup_menu_item_action_widget.dart +++ b/lib/features/base/widget/popup_menu/popup_menu_item_action_widget.dart @@ -46,7 +46,9 @@ class PopupMenuItemActionWidget extends StatelessWidget { Expanded( child: Text( menuAction.getActionNameWithLimitation(), - style: ThemeUtils.textStyleBodyBody3(color: Colors.black), + style: ThemeUtils.textStyleBodyBody3( + color: menuAction.actionNameColor, + ), maxLines: 1, ), ), 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 9753a714b..f52162778 100644 --- a/lib/features/composer/presentation/extensions/email_action_type_extension.dart +++ b/lib/features/composer/presentation/extensions/email_action_type_extension.dart @@ -1,7 +1,8 @@ +import 'package:core/presentation/extensions/color_extension.dart'; import 'package:core/presentation/extensions/html_extension.dart'; import 'package:core/presentation/resources/image_paths.dart'; -import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; import 'package:model/email/email_action_type.dart'; import 'package:model/email/presentation_email.dart'; import 'package:model/extensions/list_email_address_extension.dart'; @@ -181,4 +182,22 @@ extension EmailActionTypeExtension on EmailActionType { return ''; } } + + Color getPopupMenuIconColor() { + switch(this) { + case EmailActionType.deletePermanently: + return AppColor.redFF3347; + default: + return AppColor.steelGrayA540; + } + } + + Color getPopupMenuTitleColor() { + switch(this) { + case EmailActionType.deletePermanently: + return AppColor.redFF3347; + default: + return Colors.black; + } + } } \ 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 c40dfbb56..c5dda0c7f 100644 --- a/lib/features/email/presentation/email_view.dart +++ b/lib/features/email/presentation/email_view.dart @@ -574,7 +574,7 @@ class EmailView extends GetWidget { }, ); } else { - final popupMenuActions = emailActions.map((actionType) { + final popupMenuItems = emailActions.map((actionType) { return PopupMenuItem( padding: EdgeInsets.zero, child: PopupMenuItemActionWidget( @@ -595,11 +595,7 @@ class EmailView extends GetWidget { ); }).toList(); - controller.openPopupMenuAction( - context, - position, - popupMenuActions, - ); + controller.openPopupMenuAction(context, position, popupMenuItems); } } } \ No newline at end of file diff --git a/lib/features/email/presentation/model/popup_menu_item_email_action.dart b/lib/features/email/presentation/model/popup_menu_item_email_action.dart index 42885a32e..c39bbebc9 100644 --- a/lib/features/email/presentation/model/popup_menu_item_email_action.dart +++ b/lib/features/email/presentation/model/popup_menu_item_email_action.dart @@ -1,4 +1,5 @@ import 'package:core/presentation/resources/image_paths.dart'; +import 'package:flutter/material.dart'; import 'package:model/email/email_action_type.dart'; import 'package:tmail_ui_user/features/base/model/popup_menu_item_action.dart'; import 'package:tmail_ui_user/features/composer/presentation/extensions/email_action_type_extension.dart'; @@ -20,4 +21,10 @@ class PopupMenuItemEmailAction @override String get actionName => action.getTitle(appLocalizations); + + @override + Color get actionIconColor => action.getPopupMenuIconColor(); + + @override + Color get actionNameColor => action.getPopupMenuTitleColor(); } diff --git a/lib/features/mailbox/presentation/extensions/handle_mailbox_action_extension.dart b/lib/features/mailbox/presentation/extensions/handle_mailbox_action_extension.dart index b54ff04d3..3d3ee3688 100644 --- a/lib/features/mailbox/presentation/extensions/handle_mailbox_action_extension.dart +++ b/lib/features/mailbox/presentation/extensions/handle_mailbox_action_extension.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:model/email/presentation_email.dart'; import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; +import 'package:tmail_ui_user/features/base/widget/popup_menu/popup_menu_item_action_widget.dart'; import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_controller.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_utils.dart'; @@ -73,20 +74,18 @@ extension HandleMailboxActionExtension on MailboxController { final isSubAddressingSupported = session?.isSubAddressingSupported(accountId) ?? false; - final contextMenuActions = listContextMenuItemAction( - mailbox, - mailboxDashBoardController.enableSpamReport, - deletedMessageVaultSupported, - isSubAddressingSupported, - imagePaths, - AppLocalizations.of(context), - ); - - if (contextMenuActions.isEmpty) { - return; - } - if (responsiveUtils.isScreenWithShortestSide(context)) { + final contextMenuActions = listContextMenuItemAction( + mailbox, + mailboxDashBoardController.enableSpamReport, + deletedMessageVaultSupported, + isSubAddressingSupported, + imagePaths, + AppLocalizations.of(context), + ); + + if (contextMenuActions.isEmpty) return; + openBottomSheetContextMenuAction( context: context, itemActions: contextMenuActions, @@ -97,17 +96,30 @@ extension HandleMailboxActionExtension on MailboxController { ), ); } else { - openPopupMenuAction( - context, - position, - popupMenuMailboxActionTiles( - context, - imagePaths, - mailbox, - contextMenuActions, - handleMailboxAction: handleMailboxAction, - ), + final popupMenuActions = getListPopupMenuItemAction( + AppLocalizations.of(context), + imagePaths, + mailbox, + mailboxDashBoardController.enableSpamReport, + deletedMessageVaultSupported, + isSubAddressingSupported, ); + + if (popupMenuActions.isEmpty) return; + + final popupMenuItems = popupMenuActions.map((menuAction) { + return PopupMenuItem( + padding: EdgeInsets.zero, + child: PopupMenuItemActionWidget( + menuAction: menuAction, + menuActionClick: (menuAction) { + handleMailboxAction(context, menuAction.action, mailbox); + }, + ), + ); + }).toList(); + + openPopupMenuAction(context, position, popupMenuItems); } } } \ No newline at end of file diff --git a/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart b/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart index bb958a86b..95a552be9 100644 --- a/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart +++ b/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart @@ -2,12 +2,13 @@ import 'package:core/presentation/resources/image_paths.dart'; import 'package:core/presentation/utils/theme_utils.dart'; import 'package:core/utils/platform_info.dart'; import 'package:flutter/material.dart'; -import 'package:model/extensions/presentation_mailbox_extension.dart'; -import 'package:model/mailbox/presentation_mailbox.dart'; +import 'package:model/model.dart'; +import 'package:tmail_ui_user/features/base/model/popup_menu_item_action.dart'; import 'package:tmail_ui_user/features/base/widget/popup_item_widget.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/context_item_mailbox_action.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/model/popup_menu_item_mailbox_action.dart'; mixin MailboxWidgetMixin { @@ -131,6 +132,32 @@ mixin MailboxWidgetMixin { return listContextMenuItemAction; } + List getListPopupMenuItemAction( + AppLocalizations appLocalizations, + ImagePaths imagePaths, + PresentationMailbox presentationMailbox, + bool spamReportEnabled, + bool deletedMessageVaultSupported, + bool isSubAddressingSupported, + ) { + final mailboxActionsSupported = _listActionForAllMailboxType( + presentationMailbox, + spamReportEnabled, + deletedMessageVaultSupported, + isSubAddressingSupported, + ); + + final popupMenuActions = mailboxActionsSupported + .map((action) => PopupMenuItemMailboxAction( + action, + appLocalizations, + imagePaths, + )) + .toList(); + + return popupMenuActions; + } + List popupMenuMailboxActionTiles( BuildContext context, ImagePaths imagePaths, @@ -164,7 +191,7 @@ mixin MailboxWidgetMixin { padding: EdgeInsets.zero, child: PopupItemWidget( iconAction: contextMenuItem.action.getContextMenuIcon(imagePaths), - nameAction: contextMenuItem.action.getTitleContextMenu(AppLocalizations.of(context)), + nameAction: contextMenuItem.action.getContextMenuTitle(AppLocalizations.of(context)), colorIcon: contextMenuItem.action.getPopupMenuIconColor(), padding: const EdgeInsetsDirectional.symmetric(horizontal: 12), styleName: ThemeUtils.textStyleBodyBody3( diff --git a/lib/features/mailbox/presentation/model/context_item_mailbox_action.dart b/lib/features/mailbox/presentation/model/context_item_mailbox_action.dart index 4d1c40eac..284d2e4c7 100644 --- a/lib/features/mailbox/presentation/model/context_item_mailbox_action.dart +++ b/lib/features/mailbox/presentation/model/context_item_mailbox_action.dart @@ -19,11 +19,11 @@ class ContextMenuItemMailboxAction String get actionIcon => action.getContextMenuIcon(imagePaths); @override - String get actionName => action.getTitleContextMenu(appLocalizations); + String get actionName => action.getContextMenuTitle(appLocalizations); @override Color get actionIconColor => action.getContextMenuIconColor(); @override - Color get actionNameColor => action.getContextMenuIconColor(); + Color get actionNameColor => action.getContextMenuTitleColor(); } diff --git a/lib/features/mailbox/presentation/model/mailbox_actions.dart b/lib/features/mailbox/presentation/model/mailbox_actions.dart index 6ff16beb5..b3bf90e2d 100644 --- a/lib/features/mailbox/presentation/model/mailbox_actions.dart +++ b/lib/features/mailbox/presentation/model/mailbox_actions.dart @@ -45,7 +45,7 @@ extension MailboxActionsExtension on MailboxActions { } } - String getTitleContextMenu(AppLocalizations appLocalizations) { + String getContextMenuTitle(AppLocalizations appLocalizations) { switch(this) { case MailboxActions.openInNewTab: return appLocalizations.openInNewTab; diff --git a/lib/features/mailbox/presentation/model/popup_menu_item_mailbox_action.dart b/lib/features/mailbox/presentation/model/popup_menu_item_mailbox_action.dart new file mode 100644 index 000000000..5e10b4db6 --- /dev/null +++ b/lib/features/mailbox/presentation/model/popup_menu_item_mailbox_action.dart @@ -0,0 +1,29 @@ +import 'package:core/presentation/resources/image_paths.dart'; +import 'package:flutter/material.dart'; +import 'package:tmail_ui_user/features/base/model/popup_menu_item_action.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; + +class PopupMenuItemMailboxAction + extends PopupMenuItemActionRequiredIcon { + final AppLocalizations appLocalizations; + final ImagePaths imagePaths; + + PopupMenuItemMailboxAction( + super.action, + this.appLocalizations, + this.imagePaths, + ); + + @override + String get actionIcon => action.getContextMenuIcon(imagePaths); + + @override + String get actionName => action.getContextMenuTitle(appLocalizations); + + @override + Color get actionIconColor => action.getPopupMenuIconColor(); + + @override + Color get actionNameColor => action.getPopupMenuTitleColor(); +} diff --git a/lib/features/mailbox/presentation/widgets/bottom_bar_selection_mailbox_widget.dart b/lib/features/mailbox/presentation/widgets/bottom_bar_selection_mailbox_widget.dart index 967634206..9ccee1042 100644 --- a/lib/features/mailbox/presentation/widgets/bottom_bar_selection_mailbox_widget.dart +++ b/lib/features/mailbox/presentation/widgets/bottom_bar_selection_mailbox_widget.dart @@ -45,12 +45,12 @@ class BottomBarSelectionMailboxWidget extends StatelessWidget { key: Key('${action.name}_button'), text: responsiveUtils.isLandscapeMobile(context) ? '' - : action.getTitleContextMenu(AppLocalizations.of(context)), + : action.getContextMenuTitle(AppLocalizations.of(context)), icon: action.getContextMenuIcon(imagePaths), borderRadius: 0, backgroundColor: Colors.transparent, flexibleText: true, - tooltipMessage: action.getTitleContextMenu(AppLocalizations.of(context)), + tooltipMessage: action.getContextMenuTitle(AppLocalizations.of(context)), textStyle: const TextStyle(fontSize: 12, color: AppColor.colorTextButton), onTapActionCallback: () => onMailboxActionsClick.call(action, _listSelectionMailbox), )); diff --git a/lib/features/search/mailbox/presentation/search_mailbox_view.dart b/lib/features/search/mailbox/presentation/search_mailbox_view.dart index 8607b8b87..e77f13bff 100644 --- a/lib/features/search/mailbox/presentation/search_mailbox_view.dart +++ b/lib/features/search/mailbox/presentation/search_mailbox_view.dart @@ -243,7 +243,7 @@ class SearchMailboxView extends GetWidget ), const SizedBox(width: 12), Expanded(child: Text( - contextMenuItem.action.getTitleContextMenu(AppLocalizations.of(context)), + contextMenuItem.action.getContextMenuTitle(AppLocalizations.of(context)), style: TextStyle( fontWeight: FontWeight.w500, fontSize: 16, diff --git a/lib/features/thread/presentation/thread_view.dart b/lib/features/thread/presentation/thread_view.dart index de05b663c..38bedbcff 100644 --- a/lib/features/thread/presentation/thread_view.dart +++ b/lib/features/thread/presentation/thread_view.dart @@ -661,7 +661,7 @@ class ThreadView extends GetWidget }, ); } else { - final popupMenuActions = listEmailActions.map((actionType) { + final popupMenuItems = listEmailActions.map((actionType) { return PopupMenuItem( padding: EdgeInsets.zero, child: PopupMenuItemActionWidget( @@ -682,11 +682,7 @@ class ThreadView extends GetWidget ); }).toList(); - controller.openPopupMenuAction( - context, - position, - popupMenuActions, - ); + controller.openPopupMenuAction(context, position, popupMenuItems); } }