From ed3d04a8da964d1f75555a33139b2ab77f553377 Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 17 Feb 2023 11:56:25 +0700 Subject: [PATCH] Update menu actions for each mailbox type --- .../mixin/mailbox_widget_mixin.dart | 77 +++++++++++++++---- .../presentation/model/mailbox_actions.dart | 14 +--- .../presentation/search_mailbox_view.dart | 36 +++------ model/lib/mailbox/presentation_mailbox.dart | 24 +----- 4 files changed, 76 insertions(+), 75 deletions(-) diff --git a/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart b/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart index c9394501e..68c099e14 100644 --- a/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart +++ b/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart @@ -17,42 +17,84 @@ import 'package:tmail_ui_user/features/mailbox/presentation/model/context_item_m import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_bottom_sheet_action_tile_builder.dart'; -import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; mixin MailboxWidgetMixin { - MailboxActions _mailboxActionForSpam(MailboxDashBoardController dashBoardController) { - return dashBoardController.enableSpamReport + MailboxActions _mailboxActionForSpam(bool spamReportEnabled) { + return spamReportEnabled ? MailboxActions.disableSpamReport : MailboxActions.enableSpamReport; } - List listActionForMailbox( + List _listActionForDefaultMailbox( PresentationMailbox mailbox, - MailboxDashBoardController dashBoardController + bool spamReportEnabled ) { return [ if (BuildUtils.isWeb) MailboxActions.openInNewTab, if (mailbox.isSpam) - _mailboxActionForSpam(dashBoardController), + _mailboxActionForSpam(spamReportEnabled), + MailboxActions.markAsRead + ]; + } + + List _listActionForPersonalMailbox(PresentationMailbox mailbox) { + return [ + if (BuildUtils.isWeb) + MailboxActions.openInNewTab, MailboxActions.markAsRead, MailboxActions.move, MailboxActions.rename, MailboxActions.delete, - if (mailbox.isSupportedDisableMailbox) + if (mailbox.isSubscribedMailbox) MailboxActions.disableMailbox + else + MailboxActions.enableMailbox ]; } + List _listActionForTeamMailbox(PresentationMailbox mailbox) { + return [ + if (BuildUtils.isWeb) + MailboxActions.openInNewTab, + MailboxActions.markAsRead, + if (mailbox.isTeamMailboxes) + if (mailbox.isSubscribedMailbox) + MailboxActions.disableMailbox + else + MailboxActions.enableMailbox + ]; + } + + List _listActionForAllMailboxType( + PresentationMailbox mailbox, + bool spamReportEnabled + ) { + if (mailbox.isDefault) { + return _listActionForDefaultMailbox(mailbox, spamReportEnabled); + } else if (mailbox.isPersonal) { + return _listActionForPersonalMailbox(mailbox); + } else { + return _listActionForTeamMailbox(mailbox); + } + } + void openMailboxMenuActionOnMobile( BuildContext context, ImagePaths imagePaths, PresentationMailbox mailbox, MailboxController controller ) { - final contextMenuActions = listContextMenuItemAction(mailbox, controller.mailboxDashBoardController); + final contextMenuActions = listContextMenuItemAction( + mailbox, + controller.mailboxDashBoardController.enableSpamReport + ); + + if (contextMenuActions.isEmpty) { + return; + } controller.openContextMenuAction( context, @@ -118,15 +160,9 @@ mixin MailboxWidgetMixin { List listContextMenuItemAction( PresentationMailbox mailbox, - MailboxDashBoardController dashBoardController, - { - List? mailboxActions - } + bool spamReportEnabled ) { - final mailboxActionsSupported = mailboxActions ?? listActionForMailbox( - mailbox, - dashBoardController - ); + final mailboxActionsSupported = _listActionForAllMailboxType(mailbox, spamReportEnabled); final listContextMenuItemAction = mailboxActionsSupported .map((action) => ContextMenuItemMailboxAction(action, action.getContextMenuItemState(mailbox))) @@ -143,7 +179,14 @@ mixin MailboxWidgetMixin { PresentationMailbox mailbox, MailboxController controller ) { - final contextMenuActions = listContextMenuItemAction(mailbox, controller.mailboxDashBoardController); + final contextMenuActions = listContextMenuItemAction( + mailbox, + controller.mailboxDashBoardController.enableSpamReport + ); + + if (contextMenuActions.isEmpty) { + return; + } if (responsiveUtils.isScreenWithShortestSide(context)) { controller.openContextMenuAction( diff --git a/lib/features/mailbox/presentation/model/mailbox_actions.dart b/lib/features/mailbox/presentation/model/mailbox_actions.dart index 0ca833461..f607f3d88 100644 --- a/lib/features/mailbox/presentation/model/mailbox_actions.dart +++ b/lib/features/mailbox/presentation/model/mailbox_actions.dart @@ -147,22 +147,14 @@ extension MailboxActionsExtension on MailboxActions { case MailboxActions.openInNewTab: case MailboxActions.disableSpamReport: case MailboxActions.enableSpamReport: - return mailbox.isPersonal - ? ContextMenuItemState.activated - : ContextMenuItemState.deactivated; case MailboxActions.enableMailbox: case MailboxActions.disableMailbox: - return mailbox.hasRole() - ? ContextMenuItemState.deactivated - : ContextMenuItemState.activated; - case MailboxActions.markAsRead: - return mailbox.getCountUnReadEmails().isNotEmpty - ? ContextMenuItemState.activated - : ContextMenuItemState.deactivated; case MailboxActions.move: case MailboxActions.rename: case MailboxActions.delete: - return !mailbox.hasRole() && mailbox.isPersonal + return ContextMenuItemState.activated; + case MailboxActions.markAsRead: + return mailbox.getCountUnReadEmails().isNotEmpty ? ContextMenuItemState.activated : ContextMenuItemState.deactivated; default: diff --git a/lib/features/search/mailbox/presentation/search_mailbox_view.dart b/lib/features/search/mailbox/presentation/search_mailbox_view.dart index 2a612dedd..432632e00 100644 --- a/lib/features/search/mailbox/presentation/search_mailbox_view.dart +++ b/lib/features/search/mailbox/presentation/search_mailbox_view.dart @@ -195,22 +195,12 @@ class SearchMailboxView extends GetWidget }); } - List _generateListContextMenuItemAction(PresentationMailbox mailbox) { - final mailboxActionsSupported = mailbox.isSubscribedMailbox - ? _listActionForMailboxSubscribed(mailbox) - : _listActionForMailboxUnsubscribed(mailbox); - + List _listPopupMenuItemAction(BuildContext context, PresentationMailbox mailbox) { final contextMenuActions = listContextMenuItemAction( mailbox, - controller.dashboardController, - mailboxActions: mailboxActionsSupported + controller.dashboardController.enableSpamReport, ); - - return contextMenuActions; - } - - List _listPopupMenuItemAction(BuildContext context, PresentationMailbox mailbox) { - return _generateListContextMenuItemAction(mailbox) + return contextMenuActions .map((action) => _mailboxFocusedMenuItem(context, action, mailbox)) .toList(); } @@ -257,23 +247,19 @@ class SearchMailboxView extends GetWidget ); } - List _listActionForMailboxUnsubscribed(PresentationMailbox mailbox) { - return [ - if (mailbox.isSupportedEnableMailbox) - MailboxActions.enableMailbox - ]; - } - - List _listActionForMailboxSubscribed(PresentationMailbox mailbox) { - return listActionForMailbox(mailbox, controller.dashboardController); - } - void _openMailboxMenuAction( BuildContext context, PresentationMailbox mailbox, {RelativeRect? position} ) { - final contextMenuActions = _generateListContextMenuItemAction(mailbox); + final contextMenuActions = listContextMenuItemAction( + mailbox, + controller.dashboardController.enableSpamReport, + ); + + if (contextMenuActions.isEmpty) { + return; + } if (controller.responsiveUtils.isScreenWithShortestSide(context) || position == null) { controller.openContextMenuAction( diff --git a/model/lib/mailbox/presentation_mailbox.dart b/model/lib/mailbox/presentation_mailbox.dart index 1d029250c..6faa0f150 100644 --- a/model/lib/mailbox/presentation_mailbox.dart +++ b/model/lib/mailbox/presentation_mailbox.dart @@ -63,6 +63,8 @@ class PresentationMailbox with EquatableMixin { bool hasRole() => role != null && role!.value.isNotEmpty; + bool get isDefault => hasRole(); + bool get isPersonal => namespace == null || namespace == Namespace('Personal'); bool get isTeamMailboxes => !isPersonal && !hasParentId(); @@ -103,28 +105,6 @@ class PresentationMailbox with EquatableMixin { (namespace?.value.indexOf('[') ?? 0) + 1, namespace?.value.indexOf(']')); - bool get isSupportedDisableMailbox { - if (!isSubscribedMailbox) { - return false; - } - if (isPersonal) { - return true; - } else { - return isTeamMailboxes; - } - } - - bool get isSupportedEnableMailbox { - if (isSubscribedMailbox) { - return false; - } - if (isPersonal) { - return true; - } else { - return isTeamMailboxes; - } - } - @override List get props => [ id,