TF-3385 Update empty trash and spam emails

This commit is contained in:
DatDang
2025-01-02 09:57:56 +07:00
committed by Dat H. Pham
parent 9660b40cd1
commit f1613a55ce
7 changed files with 45 additions and 6 deletions
@@ -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/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/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/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_multiple_email_read_state.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart';
@@ -339,6 +341,16 @@ class MailboxController extends BaseMailboxController
affectedMailboxId: reactionState.mailboxId, affectedMailboxId: reactionState.mailboxId,
totalEmailsChanged: -reactionState.emailIds.length, 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,
);
} }
}); });
} }
@@ -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/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/constants/thread_constants.dart';
import 'package:tmail_ui_user/features/thread/domain/model/search_query.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_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/mark_as_star_multiple_email_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/search_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, emailIds: reactionState.emailIds,
affectedMailboxId: reactionState.mailboxId, 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,
);
} }
}); });
} }
@@ -8,11 +8,12 @@ class EmptySpamFolderLoading extends LoadingState {}
class EmptySpamFolderSuccess extends UIState { class EmptySpamFolderSuccess extends UIState {
final List<EmailId> emailIds; final List<EmailId> emailIds;
final MailboxId? mailboxId;
EmptySpamFolderSuccess(this.emailIds); EmptySpamFolderSuccess(this.emailIds, this.mailboxId);
@override @override
List<Object?> get props => [emailIds]; List<Object?> get props => [emailIds, mailboxId];
} }
class EmptySpamFolderFailure extends FeatureFailure { class EmptySpamFolderFailure extends FeatureFailure {
@@ -1,17 +1,19 @@
import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.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/email/email.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
class EmptyTrashFolderLoading extends LoadingState {} class EmptyTrashFolderLoading extends LoadingState {}
class EmptyTrashFolderSuccess extends UIState { class EmptyTrashFolderSuccess extends UIState {
final List<EmailId> emailIds; final List<EmailId> emailIds;
final MailboxId? mailboxId;
EmptyTrashFolderSuccess(this.emailIds); EmptyTrashFolderSuccess(this.emailIds, this.mailboxId);
@override @override
List<Object?> get props => [emailIds]; List<Object?> get props => [emailIds, mailboxId];
} }
class EmptyTrashFolderFailure extends FeatureFailure { class EmptyTrashFolderFailure extends FeatureFailure {
@@ -32,7 +32,7 @@ class EmptySpamFolderInteractor {
totalEmails, totalEmails,
onProgressController onProgressController
); );
yield Right<Failure, Success>(EmptySpamFolderSuccess(emailIdDeleted)); yield Right<Failure, Success>(EmptySpamFolderSuccess(emailIdDeleted, spamMailboxId));
} catch (e) { } catch (e) {
yield Left<Failure, Success>(EmptySpamFolderFailure(e)); yield Left<Failure, Success>(EmptySpamFolderFailure(e));
} }
@@ -32,7 +32,7 @@ class EmptyTrashFolderInteractor {
totalEmails, totalEmails,
onProgressController onProgressController
); );
yield Right<Failure, Success>(EmptyTrashFolderSuccess(emailIdDeleted,)); yield Right<Failure, Success>(EmptyTrashFolderSuccess(emailIdDeleted, trashMailboxId));
} catch (e) { } catch (e) {
yield Left<Failure, Success>(EmptyTrashFolderFailure(e)); yield Left<Failure, Success>(EmptyTrashFolderFailure(e));
} }
@@ -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/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/get_email_request.dart';
import 'package:tmail_ui_user/features/thread/domain/model/search_query.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_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/get_email_by_id_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/load_more_emails_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, emailIds: reactionState.emailIds,
affectedMailboxId: reactionState.mailboxId, 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,
);
} }
}); });
} }