Update menu actions for each mailbox type
This commit is contained in:
@@ -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<MailboxActions> listActionForMailbox(
|
||||
List<MailboxActions> _listActionForDefaultMailbox(
|
||||
PresentationMailbox mailbox,
|
||||
MailboxDashBoardController dashBoardController
|
||||
bool spamReportEnabled
|
||||
) {
|
||||
return [
|
||||
if (BuildUtils.isWeb)
|
||||
MailboxActions.openInNewTab,
|
||||
if (mailbox.isSpam)
|
||||
_mailboxActionForSpam(dashBoardController),
|
||||
_mailboxActionForSpam(spamReportEnabled),
|
||||
MailboxActions.markAsRead
|
||||
];
|
||||
}
|
||||
|
||||
List<MailboxActions> _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<MailboxActions> _listActionForTeamMailbox(PresentationMailbox mailbox) {
|
||||
return [
|
||||
if (BuildUtils.isWeb)
|
||||
MailboxActions.openInNewTab,
|
||||
MailboxActions.markAsRead,
|
||||
if (mailbox.isTeamMailboxes)
|
||||
if (mailbox.isSubscribedMailbox)
|
||||
MailboxActions.disableMailbox
|
||||
else
|
||||
MailboxActions.enableMailbox
|
||||
];
|
||||
}
|
||||
|
||||
List<MailboxActions> _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<ContextMenuItemMailboxAction> listContextMenuItemAction(
|
||||
PresentationMailbox mailbox,
|
||||
MailboxDashBoardController dashBoardController,
|
||||
{
|
||||
List<MailboxActions>? 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(
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -195,22 +195,12 @@ class SearchMailboxView extends GetWidget<SearchMailboxController>
|
||||
});
|
||||
}
|
||||
|
||||
List<ContextMenuItemMailboxAction> _generateListContextMenuItemAction(PresentationMailbox mailbox) {
|
||||
final mailboxActionsSupported = mailbox.isSubscribedMailbox
|
||||
? _listActionForMailboxSubscribed(mailbox)
|
||||
: _listActionForMailboxUnsubscribed(mailbox);
|
||||
|
||||
List<FocusedMenuItem> _listPopupMenuItemAction(BuildContext context, PresentationMailbox mailbox) {
|
||||
final contextMenuActions = listContextMenuItemAction(
|
||||
mailbox,
|
||||
controller.dashboardController,
|
||||
mailboxActions: mailboxActionsSupported
|
||||
controller.dashboardController.enableSpamReport,
|
||||
);
|
||||
|
||||
return contextMenuActions;
|
||||
}
|
||||
|
||||
List<FocusedMenuItem> _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<SearchMailboxController>
|
||||
);
|
||||
}
|
||||
|
||||
List<MailboxActions> _listActionForMailboxUnsubscribed(PresentationMailbox mailbox) {
|
||||
return [
|
||||
if (mailbox.isSupportedEnableMailbox)
|
||||
MailboxActions.enableMailbox
|
||||
];
|
||||
}
|
||||
|
||||
List<MailboxActions> _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(
|
||||
|
||||
@@ -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<Object?> get props => [
|
||||
id,
|
||||
|
||||
Reference in New Issue
Block a user