TF-3385 Update move emails

This commit is contained in:
DatDang
2025-01-02 14:27:26 +07:00
committed by Dat H. Pham
parent f1613a55ce
commit b95ec24b3c
13 changed files with 450 additions and 56 deletions
@@ -14,6 +14,8 @@ class MoveMultipleEmailToMailboxAllSuccess extends UIState {
final MoveAction moveAction;
final EmailActionType emailActionType;
final String? destinationPath;
final Map<MailboxId,List<EmailId>> originalMailboxIdsWithEmailIds;
final Map<EmailId, bool> emailIdsWithReadStatus;
MoveMultipleEmailToMailboxAllSuccess(
this.movedListEmailId,
@@ -23,6 +25,8 @@ class MoveMultipleEmailToMailboxAllSuccess extends UIState {
this.emailActionType,
{
this.destinationPath,
required this.originalMailboxIdsWithEmailIds,
required this.emailIdsWithReadStatus,
}
);
@@ -34,6 +38,8 @@ class MoveMultipleEmailToMailboxAllSuccess extends UIState {
moveAction,
emailActionType,
destinationPath,
originalMailboxIdsWithEmailIds,
emailIdsWithReadStatus,
];
}
@@ -54,6 +60,8 @@ class MoveMultipleEmailToMailboxHasSomeEmailFailure extends UIState {
final MoveAction moveAction;
final EmailActionType emailActionType;
final String? destinationPath;
final Map<MailboxId,List<EmailId>> originalMailboxIdsWithMoveSucceededEmailIds;
final Map<EmailId, bool> moveSucceededEmailIdsWithReadStatus;
MoveMultipleEmailToMailboxHasSomeEmailFailure(
this.movedListEmailId,
@@ -63,6 +71,8 @@ class MoveMultipleEmailToMailboxHasSomeEmailFailure extends UIState {
this.emailActionType,
{
this.destinationPath,
required this.originalMailboxIdsWithMoveSucceededEmailIds,
required this.moveSucceededEmailIdsWithReadStatus,
}
);
@@ -74,6 +84,8 @@ class MoveMultipleEmailToMailboxHasSomeEmailFailure extends UIState {
moveAction,
emailActionType,
destinationPath,
originalMailboxIdsWithMoveSucceededEmailIds,
moveSucceededEmailIdsWithReadStatus,
];
}
@@ -1,10 +1,13 @@
import 'dart:async';
import 'package:core/presentation/extensions/map_extensions.dart';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/thread/domain/state/move_multiple_email_to_mailbox_state.dart';
@@ -17,7 +20,8 @@ class MoveMultipleEmailToMailboxInteractor {
Stream<Either<Failure, Success>> execute(
Session session,
AccountId accountId,
MoveToMailboxRequest moveRequest
MoveToMailboxRequest moveRequest,
Map<EmailId, bool> emailIdsWithReadStatus,
) async* {
try {
yield Right(LoadingMoveMultipleEmailToMailboxAll());
@@ -30,10 +34,22 @@ class MoveMultipleEmailToMailboxInteractor {
moveRequest.moveAction,
moveRequest.emailActionType,
destinationPath: moveRequest.destinationPath,
originalMailboxIdsWithEmailIds: moveRequest.currentMailboxes,
emailIdsWithReadStatus: emailIdsWithReadStatus,
));
} else if (result.emailIdsSuccess.isEmpty) {
yield Left(MoveMultipleEmailToMailboxAllFailure(moveRequest.moveAction, moveRequest.emailActionType));
} else {
final originalMailboxIdsWithEmailIds = Map<MailboxId, List<EmailId>>.from(
moveRequest.currentMailboxes,
);
final originalMailboxIdsWithMoveSucceededEmailIds = originalMailboxIdsWithEmailIds
.map((key, value) => MapEntry(
key,
value.where(result.emailIdsSuccess.contains).toList()
));
final moveSucceededEmailIdsWithReadStatus = emailIdsWithReadStatus
.where((emailId, _) => result.emailIdsSuccess.contains(emailId));
yield Right(MoveMultipleEmailToMailboxHasSomeEmailFailure(
result.emailIdsSuccess,
moveRequest.currentMailboxes.keys.first,
@@ -41,6 +57,8 @@ class MoveMultipleEmailToMailboxInteractor {
moveRequest.moveAction,
moveRequest.emailActionType,
destinationPath: moveRequest.destinationPath,
originalMailboxIdsWithMoveSucceededEmailIds: originalMailboxIdsWithMoveSucceededEmailIds,
moveSucceededEmailIdsWithReadStatus: moveSucceededEmailIdsWithReadStatus,
));
}
} catch (e) {