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_actions.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories.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/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';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
mixin MailboxWidgetMixin {
|
mixin MailboxWidgetMixin {
|
||||||
|
|
||||||
MailboxActions _mailboxActionForSpam(MailboxDashBoardController dashBoardController) {
|
MailboxActions _mailboxActionForSpam(bool spamReportEnabled) {
|
||||||
return dashBoardController.enableSpamReport
|
return spamReportEnabled
|
||||||
? MailboxActions.disableSpamReport
|
? MailboxActions.disableSpamReport
|
||||||
: MailboxActions.enableSpamReport;
|
: MailboxActions.enableSpamReport;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<MailboxActions> listActionForMailbox(
|
List<MailboxActions> _listActionForDefaultMailbox(
|
||||||
PresentationMailbox mailbox,
|
PresentationMailbox mailbox,
|
||||||
MailboxDashBoardController dashBoardController
|
bool spamReportEnabled
|
||||||
) {
|
) {
|
||||||
return [
|
return [
|
||||||
if (BuildUtils.isWeb)
|
if (BuildUtils.isWeb)
|
||||||
MailboxActions.openInNewTab,
|
MailboxActions.openInNewTab,
|
||||||
if (mailbox.isSpam)
|
if (mailbox.isSpam)
|
||||||
_mailboxActionForSpam(dashBoardController),
|
_mailboxActionForSpam(spamReportEnabled),
|
||||||
|
MailboxActions.markAsRead
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
List<MailboxActions> _listActionForPersonalMailbox(PresentationMailbox mailbox) {
|
||||||
|
return [
|
||||||
|
if (BuildUtils.isWeb)
|
||||||
|
MailboxActions.openInNewTab,
|
||||||
MailboxActions.markAsRead,
|
MailboxActions.markAsRead,
|
||||||
MailboxActions.move,
|
MailboxActions.move,
|
||||||
MailboxActions.rename,
|
MailboxActions.rename,
|
||||||
MailboxActions.delete,
|
MailboxActions.delete,
|
||||||
if (mailbox.isSupportedDisableMailbox)
|
if (mailbox.isSubscribedMailbox)
|
||||||
MailboxActions.disableMailbox
|
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(
|
void openMailboxMenuActionOnMobile(
|
||||||
BuildContext context,
|
BuildContext context,
|
||||||
ImagePaths imagePaths,
|
ImagePaths imagePaths,
|
||||||
PresentationMailbox mailbox,
|
PresentationMailbox mailbox,
|
||||||
MailboxController controller
|
MailboxController controller
|
||||||
) {
|
) {
|
||||||
final contextMenuActions = listContextMenuItemAction(mailbox, controller.mailboxDashBoardController);
|
final contextMenuActions = listContextMenuItemAction(
|
||||||
|
mailbox,
|
||||||
|
controller.mailboxDashBoardController.enableSpamReport
|
||||||
|
);
|
||||||
|
|
||||||
|
if (contextMenuActions.isEmpty) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
controller.openContextMenuAction(
|
controller.openContextMenuAction(
|
||||||
context,
|
context,
|
||||||
@@ -118,15 +160,9 @@ mixin MailboxWidgetMixin {
|
|||||||
|
|
||||||
List<ContextMenuItemMailboxAction> listContextMenuItemAction(
|
List<ContextMenuItemMailboxAction> listContextMenuItemAction(
|
||||||
PresentationMailbox mailbox,
|
PresentationMailbox mailbox,
|
||||||
MailboxDashBoardController dashBoardController,
|
bool spamReportEnabled
|
||||||
{
|
|
||||||
List<MailboxActions>? mailboxActions
|
|
||||||
}
|
|
||||||
) {
|
) {
|
||||||
final mailboxActionsSupported = mailboxActions ?? listActionForMailbox(
|
final mailboxActionsSupported = _listActionForAllMailboxType(mailbox, spamReportEnabled);
|
||||||
mailbox,
|
|
||||||
dashBoardController
|
|
||||||
);
|
|
||||||
|
|
||||||
final listContextMenuItemAction = mailboxActionsSupported
|
final listContextMenuItemAction = mailboxActionsSupported
|
||||||
.map((action) => ContextMenuItemMailboxAction(action, action.getContextMenuItemState(mailbox)))
|
.map((action) => ContextMenuItemMailboxAction(action, action.getContextMenuItemState(mailbox)))
|
||||||
@@ -143,7 +179,14 @@ mixin MailboxWidgetMixin {
|
|||||||
PresentationMailbox mailbox,
|
PresentationMailbox mailbox,
|
||||||
MailboxController controller
|
MailboxController controller
|
||||||
) {
|
) {
|
||||||
final contextMenuActions = listContextMenuItemAction(mailbox, controller.mailboxDashBoardController);
|
final contextMenuActions = listContextMenuItemAction(
|
||||||
|
mailbox,
|
||||||
|
controller.mailboxDashBoardController.enableSpamReport
|
||||||
|
);
|
||||||
|
|
||||||
|
if (contextMenuActions.isEmpty) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (responsiveUtils.isScreenWithShortestSide(context)) {
|
if (responsiveUtils.isScreenWithShortestSide(context)) {
|
||||||
controller.openContextMenuAction(
|
controller.openContextMenuAction(
|
||||||
|
|||||||
@@ -147,22 +147,14 @@ extension MailboxActionsExtension on MailboxActions {
|
|||||||
case MailboxActions.openInNewTab:
|
case MailboxActions.openInNewTab:
|
||||||
case MailboxActions.disableSpamReport:
|
case MailboxActions.disableSpamReport:
|
||||||
case MailboxActions.enableSpamReport:
|
case MailboxActions.enableSpamReport:
|
||||||
return mailbox.isPersonal
|
|
||||||
? ContextMenuItemState.activated
|
|
||||||
: ContextMenuItemState.deactivated;
|
|
||||||
case MailboxActions.enableMailbox:
|
case MailboxActions.enableMailbox:
|
||||||
case MailboxActions.disableMailbox:
|
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.move:
|
||||||
case MailboxActions.rename:
|
case MailboxActions.rename:
|
||||||
case MailboxActions.delete:
|
case MailboxActions.delete:
|
||||||
return !mailbox.hasRole() && mailbox.isPersonal
|
return ContextMenuItemState.activated;
|
||||||
|
case MailboxActions.markAsRead:
|
||||||
|
return mailbox.getCountUnReadEmails().isNotEmpty
|
||||||
? ContextMenuItemState.activated
|
? ContextMenuItemState.activated
|
||||||
: ContextMenuItemState.deactivated;
|
: ContextMenuItemState.deactivated;
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -195,22 +195,12 @@ class SearchMailboxView extends GetWidget<SearchMailboxController>
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
List<ContextMenuItemMailboxAction> _generateListContextMenuItemAction(PresentationMailbox mailbox) {
|
List<FocusedMenuItem> _listPopupMenuItemAction(BuildContext context, PresentationMailbox mailbox) {
|
||||||
final mailboxActionsSupported = mailbox.isSubscribedMailbox
|
|
||||||
? _listActionForMailboxSubscribed(mailbox)
|
|
||||||
: _listActionForMailboxUnsubscribed(mailbox);
|
|
||||||
|
|
||||||
final contextMenuActions = listContextMenuItemAction(
|
final contextMenuActions = listContextMenuItemAction(
|
||||||
mailbox,
|
mailbox,
|
||||||
controller.dashboardController,
|
controller.dashboardController.enableSpamReport,
|
||||||
mailboxActions: mailboxActionsSupported
|
|
||||||
);
|
);
|
||||||
|
return contextMenuActions
|
||||||
return contextMenuActions;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<FocusedMenuItem> _listPopupMenuItemAction(BuildContext context, PresentationMailbox mailbox) {
|
|
||||||
return _generateListContextMenuItemAction(mailbox)
|
|
||||||
.map((action) => _mailboxFocusedMenuItem(context, action, mailbox))
|
.map((action) => _mailboxFocusedMenuItem(context, action, mailbox))
|
||||||
.toList();
|
.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(
|
void _openMailboxMenuAction(
|
||||||
BuildContext context,
|
BuildContext context,
|
||||||
PresentationMailbox mailbox,
|
PresentationMailbox mailbox,
|
||||||
{RelativeRect? position}
|
{RelativeRect? position}
|
||||||
) {
|
) {
|
||||||
final contextMenuActions = _generateListContextMenuItemAction(mailbox);
|
final contextMenuActions = listContextMenuItemAction(
|
||||||
|
mailbox,
|
||||||
|
controller.dashboardController.enableSpamReport,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (contextMenuActions.isEmpty) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (controller.responsiveUtils.isScreenWithShortestSide(context) || position == null) {
|
if (controller.responsiveUtils.isScreenWithShortestSide(context) || position == null) {
|
||||||
controller.openContextMenuAction(
|
controller.openContextMenuAction(
|
||||||
|
|||||||
@@ -63,6 +63,8 @@ class PresentationMailbox with EquatableMixin {
|
|||||||
|
|
||||||
bool hasRole() => role != null && role!.value.isNotEmpty;
|
bool hasRole() => role != null && role!.value.isNotEmpty;
|
||||||
|
|
||||||
|
bool get isDefault => hasRole();
|
||||||
|
|
||||||
bool get isPersonal => namespace == null || namespace == Namespace('Personal');
|
bool get isPersonal => namespace == null || namespace == Namespace('Personal');
|
||||||
|
|
||||||
bool get isTeamMailboxes => !isPersonal && !hasParentId();
|
bool get isTeamMailboxes => !isPersonal && !hasParentId();
|
||||||
@@ -103,28 +105,6 @@ class PresentationMailbox with EquatableMixin {
|
|||||||
(namespace?.value.indexOf('[') ?? 0) + 1,
|
(namespace?.value.indexOf('[') ?? 0) + 1,
|
||||||
namespace?.value.indexOf(']'));
|
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
|
@override
|
||||||
List<Object?> get props => [
|
List<Object?> get props => [
|
||||||
id,
|
id,
|
||||||
|
|||||||
Reference in New Issue
Block a user