hide Recover deleted messages option if corresponding JMAP capability is not supported
This commit is contained in:
committed by
Dat H. Pham
parent
35b90ba87a
commit
ce8f59dcf3
@@ -13,6 +13,7 @@ import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_controller.d
|
||||
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/features/mailbox/presentation/model/mailbox_categories.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_utils.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/widgets/app_dashboard/app_list_dashboard_item.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
@@ -27,7 +28,8 @@ mixin MailboxWidgetMixin {
|
||||
|
||||
List<MailboxActions> _listActionForDefaultMailbox(
|
||||
PresentationMailbox mailbox,
|
||||
bool spamReportEnabled
|
||||
bool spamReportEnabled,
|
||||
bool deletedMessageVaultSupported
|
||||
) {
|
||||
|
||||
return [
|
||||
@@ -38,7 +40,8 @@ mixin MailboxWidgetMixin {
|
||||
if (mailbox.isTrash)
|
||||
...[
|
||||
MailboxActions.emptyTrash,
|
||||
MailboxActions.recoverDeletedMessages
|
||||
if (deletedMessageVaultSupported)
|
||||
MailboxActions.recoverDeletedMessages,
|
||||
]
|
||||
else if (mailbox.isSpam)
|
||||
...[
|
||||
@@ -84,10 +87,11 @@ mixin MailboxWidgetMixin {
|
||||
|
||||
List<MailboxActions> _listActionForAllMailboxType(
|
||||
PresentationMailbox mailbox,
|
||||
bool spamReportEnabled
|
||||
bool spamReportEnabled,
|
||||
bool deletedMessageVaultSupported
|
||||
) {
|
||||
if (mailbox.isDefault) {
|
||||
return _listActionForDefaultMailbox(mailbox, spamReportEnabled);
|
||||
return _listActionForDefaultMailbox(mailbox, spamReportEnabled, deletedMessageVaultSupported);
|
||||
} else if (mailbox.isPersonal) {
|
||||
return _listActionForPersonalMailbox(mailbox);
|
||||
} else {
|
||||
@@ -101,9 +105,14 @@ mixin MailboxWidgetMixin {
|
||||
PresentationMailbox mailbox,
|
||||
MailboxController controller
|
||||
) {
|
||||
final bool deletedMessageVaultSupported = MailboxUtils.isDeletedMessageVaultSupported(
|
||||
controller.mailboxDashBoardController.sessionCurrent,
|
||||
controller.mailboxDashBoardController.accountId.value);
|
||||
|
||||
final contextMenuActions = listContextMenuItemAction(
|
||||
mailbox,
|
||||
controller.mailboxDashBoardController.enableSpamReport
|
||||
controller.mailboxDashBoardController.enableSpamReport,
|
||||
deletedMessageVaultSupported
|
||||
);
|
||||
|
||||
if (contextMenuActions.isEmpty) {
|
||||
@@ -174,9 +183,10 @@ mixin MailboxWidgetMixin {
|
||||
|
||||
List<ContextMenuItemMailboxAction> listContextMenuItemAction(
|
||||
PresentationMailbox mailbox,
|
||||
bool spamReportEnabled
|
||||
bool spamReportEnabled,
|
||||
bool deletedMessageVaultSupported
|
||||
) {
|
||||
final mailboxActionsSupported = _listActionForAllMailboxType(mailbox, spamReportEnabled);
|
||||
final mailboxActionsSupported = _listActionForAllMailboxType(mailbox, spamReportEnabled, deletedMessageVaultSupported);
|
||||
|
||||
final listContextMenuItemAction = mailboxActionsSupported
|
||||
.map((action) => ContextMenuItemMailboxAction(action, action.getContextMenuItemState(mailbox)))
|
||||
@@ -193,9 +203,14 @@ mixin MailboxWidgetMixin {
|
||||
PresentationMailbox mailbox,
|
||||
MailboxController controller
|
||||
) {
|
||||
final bool deletedMessageVaultSupported = MailboxUtils.isDeletedMessageVaultSupported(
|
||||
controller.mailboxDashBoardController.sessionCurrent,
|
||||
controller.mailboxDashBoardController.accountId.value);
|
||||
|
||||
final contextMenuActions = listContextMenuItemAction(
|
||||
mailbox,
|
||||
controller.mailboxDashBoardController.enableSpamReport
|
||||
controller.mailboxDashBoardController.enableSpamReport,
|
||||
deletedMessageVaultSupported
|
||||
);
|
||||
|
||||
if (contextMenuActions.isEmpty) {
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:email_recovery/email_recovery/capability_deleted_messages_vault.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/extensions/list_mailbox_node_extension.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree.dart';
|
||||
import 'package:tmail_ui_user/main/error/capability_validator.dart';
|
||||
|
||||
class MailboxUtils {
|
||||
|
||||
@@ -50,4 +54,11 @@ class MailboxUtils {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static bool isDeletedMessageVaultSupported(Session? session, AccountId? accountId) {
|
||||
if (session == null || accountId == null) {
|
||||
return false;
|
||||
}
|
||||
return capabilityDeletedMessagesVault.isSupported(session, accountId);
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,7 @@ import 'package:tmail_ui_user/features/mailbox/domain/state/search_mailbox_state
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/mixin/mailbox_widget_mixin.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/features/mailbox/presentation/utils/mailbox_utils.dart';
|
||||
import 'package:tmail_ui_user/features/search/mailbox/presentation/search_mailbox_controller.dart';
|
||||
import 'package:tmail_ui_user/features/search/mailbox/presentation/utils/search_mailbox_utils.dart';
|
||||
import 'package:tmail_ui_user/features/search/mailbox/presentation/widgets/mailbox_searched_item_builder.dart';
|
||||
@@ -196,9 +197,14 @@ class SearchMailboxView extends GetWidget<SearchMailboxController>
|
||||
}
|
||||
|
||||
List<FocusedMenuItem> _listPopupMenuItemAction(BuildContext context, PresentationMailbox mailbox) {
|
||||
final bool deletedMessageVaultSupported = MailboxUtils.isDeletedMessageVaultSupported(
|
||||
controller.dashboardController.sessionCurrent,
|
||||
controller.dashboardController.accountId.value);
|
||||
|
||||
final contextMenuActions = listContextMenuItemAction(
|
||||
mailbox,
|
||||
controller.dashboardController.enableSpamReport,
|
||||
deletedMessageVaultSupported
|
||||
);
|
||||
return contextMenuActions
|
||||
.map((action) => _mailboxFocusedMenuItem(context, action, mailbox))
|
||||
@@ -252,9 +258,14 @@ class SearchMailboxView extends GetWidget<SearchMailboxController>
|
||||
PresentationMailbox mailbox,
|
||||
{RelativeRect? position}
|
||||
) {
|
||||
final bool deletedMessageVaultSupported = MailboxUtils.isDeletedMessageVaultSupported(
|
||||
controller.dashboardController.sessionCurrent,
|
||||
controller.dashboardController.accountId.value);
|
||||
|
||||
final contextMenuActions = listContextMenuItemAction(
|
||||
mailbox,
|
||||
controller.dashboardController.enableSpamReport,
|
||||
deletedMessageVaultSupported
|
||||
);
|
||||
|
||||
if (contextMenuActions.isEmpty) {
|
||||
|
||||
Reference in New Issue
Block a user