Update menu actions for each mailbox type

This commit is contained in:
dab246
2023-02-17 11:56:25 +07:00
committed by Dat Vu
parent f2a63c083a
commit ed3d04a8da
4 changed files with 76 additions and 75 deletions
@@ -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(
+2 -22
View File
@@ -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,