From f1613a55ce10253b9774aeeda918832faeab2c80 Mon Sep 17 00:00:00 2001 From: DatDang Date: Thu, 2 Jan 2025 09:57:56 +0700 Subject: [PATCH] TF-3385 Update empty trash and spam emails --- .../mailbox/presentation/mailbox_controller.dart | 12 ++++++++++++ .../email/presentation/search_email_controller.dart | 12 ++++++++++++ .../thread/domain/state/empty_spam_folder_state.dart | 5 +++-- .../domain/state/empty_trash_folder_state.dart | 6 ++++-- .../usecases/empty_spam_folder_interactor.dart | 2 +- .../usecases/empty_trash_folder_interactor.dart | 2 +- .../thread/presentation/thread_controller.dart | 12 ++++++++++++ 7 files changed, 45 insertions(+), 6 deletions(-) diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index f50120708..4bc677cbc 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -77,6 +77,8 @@ import 'package:tmail_ui_user/features/push_notification/presentation/websocket/ import 'package:tmail_ui_user/features/push_notification/presentation/websocket/web_socket_queue_handler.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/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart'; @@ -339,6 +341,16 @@ class MailboxController extends BaseMailboxController affectedMailboxId: reactionState.mailboxId, totalEmailsChanged: -reactionState.emailIds.length, ); + } else if (reactionState is EmptyTrashFolderSuccess) { + _handleDeleteEmailsFromMailbox( + affectedMailboxId: reactionState.mailboxId, + totalEmailsChanged: -reactionState.emailIds.length, + ); + } else if (reactionState is EmptySpamFolderSuccess) { + _handleDeleteEmailsFromMailbox( + affectedMailboxId: reactionState.mailboxId, + totalEmailsChanged: -reactionState.emailIds.length, + ); } }); } diff --git a/lib/features/search/email/presentation/search_email_controller.dart b/lib/features/search/email/presentation/search_email_controller.dart index 769b8d423..edf34f0a0 100644 --- a/lib/features/search/email/presentation/search_email_controller.dart +++ b/lib/features/search/email/presentation/search_email_controller.dart @@ -66,6 +66,8 @@ import 'package:tmail_ui_user/features/search/email/presentation/model/search_mo import 'package:tmail_ui_user/features/search/email/presentation/search_email_bindings.dart'; import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.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/mark_as_star_multiple_email_state.dart'; import 'package:tmail_ui_user/features/thread/domain/state/search_email_state.dart'; @@ -316,6 +318,16 @@ class SearchEmailController extends BaseController emailIds: reactionState.emailIds, affectedMailboxId: reactionState.mailboxId, ); + } else if (reactionState is EmptyTrashFolderSuccess) { + mailboxDashBoardController.handleDeleteEmailsInMailbox( + emailIds: reactionState.emailIds, + affectedMailboxId: reactionState.mailboxId, + ); + } else if (reactionState is EmptySpamFolderSuccess) { + mailboxDashBoardController.handleDeleteEmailsInMailbox( + emailIds: reactionState.emailIds, + affectedMailboxId: reactionState.mailboxId, + ); } }); } diff --git a/lib/features/thread/domain/state/empty_spam_folder_state.dart b/lib/features/thread/domain/state/empty_spam_folder_state.dart index 6823c8f1b..3a53ff3f1 100644 --- a/lib/features/thread/domain/state/empty_spam_folder_state.dart +++ b/lib/features/thread/domain/state/empty_spam_folder_state.dart @@ -8,11 +8,12 @@ class EmptySpamFolderLoading extends LoadingState {} class EmptySpamFolderSuccess extends UIState { final List emailIds; + final MailboxId? mailboxId; - EmptySpamFolderSuccess(this.emailIds); + EmptySpamFolderSuccess(this.emailIds, this.mailboxId); @override - List get props => [emailIds]; + List get props => [emailIds, mailboxId]; } class EmptySpamFolderFailure extends FeatureFailure { diff --git a/lib/features/thread/domain/state/empty_trash_folder_state.dart b/lib/features/thread/domain/state/empty_trash_folder_state.dart index 577eb6d7c..0d04ce4a2 100644 --- a/lib/features/thread/domain/state/empty_trash_folder_state.dart +++ b/lib/features/thread/domain/state/empty_trash_folder_state.dart @@ -1,17 +1,19 @@ import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; +import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; class EmptyTrashFolderLoading extends LoadingState {} class EmptyTrashFolderSuccess extends UIState { final List emailIds; + final MailboxId? mailboxId; - EmptyTrashFolderSuccess(this.emailIds); + EmptyTrashFolderSuccess(this.emailIds, this.mailboxId); @override - List get props => [emailIds]; + List get props => [emailIds, mailboxId]; } class EmptyTrashFolderFailure extends FeatureFailure { diff --git a/lib/features/thread/domain/usecases/empty_spam_folder_interactor.dart b/lib/features/thread/domain/usecases/empty_spam_folder_interactor.dart index 0093f7644..0eb7d07d8 100644 --- a/lib/features/thread/domain/usecases/empty_spam_folder_interactor.dart +++ b/lib/features/thread/domain/usecases/empty_spam_folder_interactor.dart @@ -32,7 +32,7 @@ class EmptySpamFolderInteractor { totalEmails, onProgressController ); - yield Right(EmptySpamFolderSuccess(emailIdDeleted)); + yield Right(EmptySpamFolderSuccess(emailIdDeleted, spamMailboxId)); } catch (e) { yield Left(EmptySpamFolderFailure(e)); } diff --git a/lib/features/thread/domain/usecases/empty_trash_folder_interactor.dart b/lib/features/thread/domain/usecases/empty_trash_folder_interactor.dart index d2474096f..c3764860b 100644 --- a/lib/features/thread/domain/usecases/empty_trash_folder_interactor.dart +++ b/lib/features/thread/domain/usecases/empty_trash_folder_interactor.dart @@ -32,7 +32,7 @@ class EmptyTrashFolderInteractor { totalEmails, onProgressController ); - yield Right(EmptyTrashFolderSuccess(emailIdDeleted,)); + yield Right(EmptyTrashFolderSuccess(emailIdDeleted, trashMailboxId)); } catch (e) { yield Left(EmptyTrashFolderFailure(e)); } diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index 5b7a94d8d..8008e179d 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -49,6 +49,8 @@ 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'; import 'package:tmail_ui_user/features/thread/domain/state/load_more_emails_state.dart'; @@ -395,6 +397,16 @@ class ThreadController extends BaseController with EmailActionController { emailIds: reactionState.emailIds, affectedMailboxId: reactionState.mailboxId, ); + } else if (reactionState is EmptyTrashFolderSuccess) { + mailboxDashBoardController.handleDeleteEmailsInMailbox( + emailIds: reactionState.emailIds, + affectedMailboxId: reactionState.mailboxId, + ); + } else if (reactionState is EmptySpamFolderSuccess) { + mailboxDashBoardController.handleDeleteEmailsInMailbox( + emailIds: reactionState.emailIds, + affectedMailboxId: reactionState.mailboxId, + ); } }); }