TF-1792 Add option EmptyTrash for mailbox menu
(cherry picked from commit 9c7a2c465e57d19d80f33a9cb916923f177ae129)
This commit is contained in:
@@ -1,8 +1,16 @@
|
|||||||
|
|
||||||
|
import 'package:core/core.dart';
|
||||||
|
import 'package:core/presentation/views/bottom_popup/confirmation_dialog_action_sheet_builder.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||||
|
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/extensions/presentation_mailbox_extension.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/extensions/presentation_mailbox_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.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/routes/route_navigation.dart';
|
||||||
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
mixin MailboxActionHandlerMixin {
|
mixin MailboxActionHandlerMixin {
|
||||||
@@ -36,4 +44,45 @@ mixin MailboxActionHandlerMixin {
|
|||||||
onCallbackAction?.call(context);
|
onCallbackAction?.call(context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void emptyTrashAction(
|
||||||
|
BuildContext context,
|
||||||
|
MailboxId mailboxId,
|
||||||
|
MailboxDashBoardController dashboardController
|
||||||
|
) {
|
||||||
|
final responsiveUtils = Get.find<ResponsiveUtils>();
|
||||||
|
final imagePaths = Get.find<ImagePaths>();
|
||||||
|
|
||||||
|
if (responsiveUtils.isScreenWithShortestSide(context)) {
|
||||||
|
(ConfirmationDialogActionSheetBuilder(context)
|
||||||
|
..messageText(AppLocalizations.of(context).emptyTrashMessageDialog)
|
||||||
|
..onCancelAction(AppLocalizations.of(context).cancel, popBack)
|
||||||
|
..onConfirmAction(AppLocalizations.of(context).delete, () {
|
||||||
|
popBack();
|
||||||
|
dashboardController.emptyTrashFolderAction(trashFolderId: mailboxId);
|
||||||
|
}))
|
||||||
|
.show();
|
||||||
|
} else {
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
|
||||||
|
builder: (context) => PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths)
|
||||||
|
..key(const Key('confirm_dialog_empty_trash'))
|
||||||
|
..title(AppLocalizations.of(context).emptyTrash)
|
||||||
|
..content(AppLocalizations.of(context).emptyTrashMessageDialog)
|
||||||
|
..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill))
|
||||||
|
..colorConfirmButton(AppColor.colorConfirmActionDialog)
|
||||||
|
..styleTextConfirmButton(const TextStyle(
|
||||||
|
fontSize: 17,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
color: AppColor.colorActionDeleteConfirmDialog))
|
||||||
|
..onCloseButtonAction(popBack)
|
||||||
|
..onConfirmButtonAction(AppLocalizations.of(context).delete, () {
|
||||||
|
popBack();
|
||||||
|
dashboardController.emptyTrashFolderAction(trashFolderId: mailboxId);
|
||||||
|
})
|
||||||
|
..onCancelButtonAction(AppLocalizations.of(context).cancel, popBack))
|
||||||
|
.build()));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -939,6 +939,9 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
|
|||||||
case MailboxActions.disableMailbox:
|
case MailboxActions.disableMailbox:
|
||||||
_unsubscribeMailboxAction(mailbox.id);
|
_unsubscribeMailboxAction(mailbox.id);
|
||||||
break;
|
break;
|
||||||
|
case MailboxActions.emptyTrash:
|
||||||
|
emptyTrashAction(context, mailbox.id, mailboxDashBoardController);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,9 @@ mixin MailboxWidgetMixin {
|
|||||||
if (mailbox.isSpam)
|
if (mailbox.isSpam)
|
||||||
_mailboxActionForSpam(spamReportEnabled),
|
_mailboxActionForSpam(spamReportEnabled),
|
||||||
if (mailbox.getCountUnReadEmails().isNotEmpty)
|
if (mailbox.getCountUnReadEmails().isNotEmpty)
|
||||||
MailboxActions.markAsRead
|
MailboxActions.markAsRead,
|
||||||
|
if (mailbox.isTrash)
|
||||||
|
MailboxActions.emptyTrash
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,8 @@ enum MailboxActions {
|
|||||||
disableSpamReport,
|
disableSpamReport,
|
||||||
enableSpamReport,
|
enableSpamReport,
|
||||||
disableMailbox,
|
disableMailbox,
|
||||||
enableMailbox
|
enableMailbox,
|
||||||
|
emptyTrash;
|
||||||
}
|
}
|
||||||
|
|
||||||
extension MailboxActionsExtension on MailboxActions {
|
extension MailboxActionsExtension on MailboxActions {
|
||||||
@@ -58,6 +59,8 @@ extension MailboxActionsExtension on MailboxActions {
|
|||||||
return AppLocalizations.of(context).hideMailBoxes;
|
return AppLocalizations.of(context).hideMailBoxes;
|
||||||
case MailboxActions.enableMailbox:
|
case MailboxActions.enableMailbox:
|
||||||
return AppLocalizations.of(context).showMailbox;
|
return AppLocalizations.of(context).showMailbox;
|
||||||
|
case MailboxActions.emptyTrash:
|
||||||
|
return AppLocalizations.of(context).emptyTrash;
|
||||||
default:
|
default:
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
@@ -83,6 +86,8 @@ extension MailboxActionsExtension on MailboxActions {
|
|||||||
return imagePaths.icHideMailbox;
|
return imagePaths.icHideMailbox;
|
||||||
case MailboxActions.enableMailbox:
|
case MailboxActions.enableMailbox:
|
||||||
return imagePaths.icShowMailbox;
|
return imagePaths.icShowMailbox;
|
||||||
|
case MailboxActions.emptyTrash:
|
||||||
|
return imagePaths.icMailboxTrash;
|
||||||
default:
|
default:
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
@@ -152,6 +157,7 @@ extension MailboxActionsExtension on MailboxActions {
|
|||||||
case MailboxActions.move:
|
case MailboxActions.move:
|
||||||
case MailboxActions.rename:
|
case MailboxActions.rename:
|
||||||
case MailboxActions.delete:
|
case MailboxActions.delete:
|
||||||
|
case MailboxActions.emptyTrash:
|
||||||
return ContextMenuItemState.activated;
|
return ContextMenuItemState.activated;
|
||||||
case MailboxActions.markAsRead:
|
case MailboxActions.markAsRead:
|
||||||
return mailbox.getCountUnReadEmails().isNotEmpty
|
return mailbox.getCountUnReadEmails().isNotEmpty
|
||||||
|
|||||||
+3
-3
@@ -1076,7 +1076,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
|
|
||||||
switch(actionType) {
|
switch(actionType) {
|
||||||
case DeleteActionType.all:
|
case DeleteActionType.all:
|
||||||
_emptyTrashFolderAction(onCancelSelectionEmail: onCancelSelectionEmail);
|
emptyTrashFolderAction(onCancelSelectionEmail: onCancelSelectionEmail);
|
||||||
break;
|
break;
|
||||||
case DeleteActionType.multiple:
|
case DeleteActionType.multiple:
|
||||||
_deleteMultipleEmailsPermanently(listEmails ?? [], onCancelSelectionEmail: onCancelSelectionEmail);
|
_deleteMultipleEmailsPermanently(listEmails ?? [], onCancelSelectionEmail: onCancelSelectionEmail);
|
||||||
@@ -1086,10 +1086,10 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _emptyTrashFolderAction({Function? onCancelSelectionEmail}) {
|
void emptyTrashFolderAction({Function? onCancelSelectionEmail, MailboxId? trashFolderId}) {
|
||||||
onCancelSelectionEmail?.call();
|
onCancelSelectionEmail?.call();
|
||||||
|
|
||||||
final trashMailboxId = mapDefaultMailboxIdByRole[PresentationMailbox.roleTrash];
|
final trashMailboxId = trashFolderId ?? mapDefaultMailboxIdByRole[PresentationMailbox.roleTrash];
|
||||||
if (sessionCurrent != null && accountId.value != null && trashMailboxId != null) {
|
if (sessionCurrent != null && accountId.value != null && trashMailboxId != null) {
|
||||||
consumeState(_emptyTrashFolderInteractor.execute(sessionCurrent!, accountId.value!, trashMailboxId));
|
consumeState(_emptyTrashFolderInteractor.execute(sessionCurrent!, accountId.value!, trashMailboxId));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2851,4 +2851,16 @@ class AppLocalizations {
|
|||||||
'Replied and Forwarded message',
|
'Replied and Forwarded message',
|
||||||
name: 'repliedAndForwardedMessage');
|
name: 'repliedAndForwardedMessage');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String get emptyTrash {
|
||||||
|
return Intl.message(
|
||||||
|
'Empty Trash',
|
||||||
|
name: 'emptyTrash');
|
||||||
|
}
|
||||||
|
|
||||||
|
String get emptyTrashMessageDialog {
|
||||||
|
return Intl.message(
|
||||||
|
'You are about to permanently delete all items in Trash . Do you want to continue?',
|
||||||
|
name: 'emptyTrashMessageDialog');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user