TF-1710 Implement delete all spam emails action

(cherry picked from commit 9eda27e10066174191059e06af26718f8645d955)
This commit is contained in:
dab246
2023-08-03 16:02:07 +07:00
committed by Dat Vu
parent b83eb87675
commit 375cec9dd1
6 changed files with 105 additions and 2 deletions
@@ -186,7 +186,7 @@ class ConfirmDialogBuilder {
)),
if (_iconWidget != null)
Container(
margin: _marginIcon ?? const EdgeInsets.only(top: 24),
margin: _marginIcon ?? EdgeInsets.zero,
alignment: Alignment.center,
child: _iconWidget,
),
@@ -98,4 +98,64 @@ mixin MailboxActionHandlerMixin {
.build()));
}
}
void emptySpamAction(
BuildContext context,
PresentationMailbox mailbox,
MailboxDashBoardController dashboardController
) {
if (dashboardController.isDrawerOpen) {
dashboardController.closeMailboxMenuDrawer();
}
final responsiveUtils = Get.find<ResponsiveUtils>();
final imagePaths = Get.find<ImagePaths>();
final appToast = Get.find<AppToast>();
if (responsiveUtils.isScreenWithShortestSide(context)) {
(ConfirmationDialogActionSheetBuilder(context)
..messageText(AppLocalizations.of(context).emptySpamMessageDialog)
..onCancelAction(AppLocalizations.of(context).cancel, popBack)
..onConfirmAction(AppLocalizations.of(context).delete_all, () {
popBack();
if (mailbox.countEmails > 0) {
dashboardController.emptySpamFolderAction(spamFolderId: mailbox.id);
} else {
appToast.showToastWarningMessage(
context,
AppLocalizations.of(context).noEmailInYourCurrentMailbox
);
}
}))
.show();
} else {
showDialog(
context: context,
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
builder: (context) => PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths)
..key(const Key('confirm_dialog_empty_spam'))
..title(AppLocalizations.of(context).emptySpamFolder)
..content(AppLocalizations.of(context).emptySpamMessageDialog)
..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_all, () {
popBack();
if (mailbox.countEmails > 0) {
dashboardController.emptySpamFolderAction(spamFolderId: mailbox.id);
} else {
appToast.showToastWarningMessage(
context,
AppLocalizations.of(context).noEmailInYourCurrentMailbox
);
}
})
..onCancelButtonAction(AppLocalizations.of(context).cancel, popBack)
).build()));
}
}
}
@@ -68,6 +68,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
import 'package:tmail_ui_user/features/search/mailbox/presentation/search_mailbox_bindings.dart';
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
import 'package:tmail_ui_user/features/thread/domain/state/empty_spam_folder_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/empty_trash_folder_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/mark_as_multiple_email_read_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/move_multiple_email_to_mailbox_state.dart';
@@ -246,6 +247,8 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
_refreshMailboxChanges(currentMailboxState: success.currentMailboxState);
} else if (success is UpdateEmailDraftsSuccess) {
_refreshMailboxChanges(currentMailboxState: success.currentMailboxState);
} else if (success is EmptySpamFolderSuccess) {
_refreshMailboxChanges(currentMailboxState: success.currentMailboxState);
}
});
});
@@ -931,6 +934,9 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
case MailboxActions.emptyTrash:
emptyTrashAction(context, mailbox, mailboxDashBoardController);
break;
case MailboxActions.emptySpam:
emptySpamAction(context, mailbox, mailboxDashBoardController);
break;
default:
break;
}
@@ -117,6 +117,7 @@ import 'package:tmail_ui_user/features/thread/data/network/thread_api.dart';
import 'package:tmail_ui_user/features/thread/data/network/thread_isolate_worker.dart';
import 'package:tmail_ui_user/features/thread/data/repository/thread_repository_impl.dart';
import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/empty_spam_folder_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/empty_trash_folder_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/get_email_by_id_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/mark_as_multiple_email_read_interactor.dart';
@@ -181,6 +182,7 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.find<UpdateSendingEmailInteractor>(),
Get.find<GetAllSendingEmailInteractor>(),
Get.find<StoreSessionInteractor>(),
Get.find<EmptySpamFolderInteractor>(),
));
Get.put(AdvancedFilterController());
}
@@ -313,6 +315,11 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.find<ThreadRepository>(),
Get.find<MailboxRepository>(),
Get.find<EmailRepository>()));
Get.lazyPut(() => EmptySpamFolderInteractor(
Get.find<ThreadRepository>(),
Get.find<MailboxRepository>(),
Get.find<EmailRepository>()
));
Get.lazyPut(() => GetAppDashboardConfigurationInteractor(
Get.find<AppConfigLoader>()));
Get.lazyPut(() => GetEmailByIdInteractor(
@@ -108,11 +108,13 @@ import 'package:tmail_ui_user/features/sending_queue/presentation/model/sending_
import 'package:tmail_ui_user/features/session/domain/usecases/store_session_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
import 'package:tmail_ui_user/features/thread/domain/state/empty_spam_folder_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/empty_trash_folder_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/get_email_by_id_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/mark_as_multiple_email_read_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/mark_as_star_multiple_email_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/move_multiple_email_to_mailbox_state.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/empty_spam_folder_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/empty_trash_folder_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/get_email_by_id_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/mark_as_multiple_email_read_interactor.dart';
@@ -161,6 +163,7 @@ class MailboxDashBoardController extends ReloadableController {
final UpdateSendingEmailInteractor _updateSendingEmailInteractor;
final GetAllSendingEmailInteractor _getAllSendingEmailInteractor;
final StoreSessionInteractor _storeSessionInteractor;
final EmptySpamFolderInteractor _emptySpamFolderInteractor;
GetAllVacationInteractor? _getAllVacationInteractor;
UpdateVacationInteractor? _updateVacationInteractor;
@@ -234,6 +237,7 @@ class MailboxDashBoardController extends ReloadableController {
this._updateSendingEmailInteractor,
this._getAllSendingEmailInteractor,
this._storeSessionInteractor,
this._emptySpamFolderInteractor,
) : super(
getAuthenticatedAccountInteractor,
updateAuthenticationAccountInteractor
@@ -342,6 +346,8 @@ class MailboxDashBoardController extends ReloadableController {
_handleGetAllSendingEmailsSuccess(success);
} else if (success is UpdateSendingEmailSuccess) {
_handleUpdateSendingEmailSuccess(success);
} else if (success is EmptySpamFolderSuccess) {
_emptySpamFolderSuccess(success);
}
}
@@ -1949,6 +1955,29 @@ class MailboxDashBoardController extends ReloadableController {
void _storeSessionAction(Session session) {
consumeState(_storeSessionInteractor.execute(session));
}
void emptySpamFolderAction({Function? onCancelSelectionEmail, MailboxId? spamFolderId}) {
onCancelSelectionEmail?.call();
final spamMailboxId = spamFolderId ?? mapDefaultMailboxIdByRole[PresentationMailbox.roleSpam];
if (sessionCurrent != null && accountId.value != null && spamMailboxId != null) {
consumeState(
_emptySpamFolderInteractor.execute(
sessionCurrent!,
accountId.value!,
spamMailboxId
)
);
}
}
void _emptySpamFolderSuccess(EmptySpamFolderSuccess success) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).toast_message_empty_trash_folder_success);
}
}
@override
void onClose() {
@@ -44,6 +44,7 @@ import 'package:tmail_ui_user/features/thread/domain/model/email_filter.dart';
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
import 'package:tmail_ui_user/features/thread/domain/model/get_email_request.dart';
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
import 'package:tmail_ui_user/features/thread/domain/state/empty_spam_folder_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/empty_trash_folder_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/get_all_email_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/get_email_by_id_state.dart';
@@ -334,7 +335,7 @@ class ThreadController extends BaseController with EmailActionController {
_refreshEmailChanges(currentEmailState: success.currentEmailState);
} else if (success is MarkAsMultipleEmailReadHasSomeEmailFailure) {
_refreshEmailChanges(currentEmailState: success.currentEmailState);
} else if (success is EmptyTrashFolderSuccess) {
} else if (success is EmptyTrashFolderSuccess || success is EmptySpamFolderSuccess) {
refreshAllEmail();
}
});