TF-1792 Add option EmptyTrash for mailbox menu

(cherry picked from commit 9c7a2c465e57d19d80f33a9cb916923f177ae129)
This commit is contained in:
dab246
2023-05-04 17:01:55 +07:00
committed by Dat Vu
parent 8185d0d872
commit 5016f891c7
6 changed files with 77 additions and 5 deletions
@@ -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
@@ -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');
}
} }