TF-3939 Handle archive selection email on mobile view
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -44,6 +44,7 @@ extension EmailActionTypeExtension on EmailActionType {
|
||||
|
||||
String getToastMessageMoveToMailboxSuccess(BuildContext context, {String? destinationPath}) {
|
||||
switch(this) {
|
||||
case EmailActionType.archiveMessage:
|
||||
case EmailActionType.moveToMailbox:
|
||||
return AppLocalizations.of(context).movedToFolder(destinationPath ?? '');
|
||||
case EmailActionType.moveToTrash:
|
||||
|
||||
@@ -3,4 +3,6 @@ class NotFoundSessionException implements Exception {}
|
||||
|
||||
class NotFoundAccountIdException implements Exception {}
|
||||
|
||||
class NotFoundContextException implements Exception {}
|
||||
class NotFoundContextException implements Exception {}
|
||||
|
||||
class ParametersIsNullException implements Exception {}
|
||||
+69
-126
@@ -113,6 +113,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/cleanup_recent_search_extension.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/delete_emails_in_mailbox_extension.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_action_type_for_email_selection.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_clear_mailbox_extension.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_create_new_rule_filter.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_preferences_setting_extension.dart';
|
||||
@@ -1263,16 +1264,16 @@ class MailboxDashBoardController extends ReloadableController
|
||||
}
|
||||
}
|
||||
|
||||
void moveSelectedMultipleEmailToMailbox(
|
||||
List<PresentationEmail> listEmails,
|
||||
PresentationMailbox currentMailbox
|
||||
) async {
|
||||
Future<void> moveEmailsToMailbox(
|
||||
List<PresentationEmail> listEmails, {
|
||||
VoidCallback? onCallbackAction,
|
||||
}) async {
|
||||
if (accountId.value != null) {
|
||||
final arguments = DestinationPickerArguments(
|
||||
accountId.value!,
|
||||
MailboxActions.moveEmail,
|
||||
sessionCurrent,
|
||||
mailboxIdSelected: currentMailbox.mailboxId);
|
||||
);
|
||||
|
||||
final destinationMailbox = PlatformInfo.isWeb
|
||||
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.destinationPicker, arguments: arguments)
|
||||
@@ -1283,61 +1284,44 @@ class MailboxDashBoardController extends ReloadableController
|
||||
sessionCurrent != null &&
|
||||
accountId.value != null
|
||||
) {
|
||||
_dispatchMoveToMultipleAction(
|
||||
accountId.value!,
|
||||
sessionCurrent!,
|
||||
listEmails.listEmailIds,
|
||||
currentMailbox,
|
||||
destinationMailbox,
|
||||
Map.fromEntries(
|
||||
listEmails
|
||||
.where((email) => email.id != null)
|
||||
.map((email) => MapEntry(email.id!, email.hasRead)),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
onCallbackAction?.call();
|
||||
|
||||
void _dispatchMoveToMultipleAction(
|
||||
AccountId accountId,
|
||||
Session session,
|
||||
List<EmailId> listEmailIds,
|
||||
PresentationMailbox currentMailbox,
|
||||
PresentationMailbox destinationMailbox,
|
||||
Map<EmailId, bool> emailIdsWithReadStatus,
|
||||
) {
|
||||
if (destinationMailbox.isTrash) {
|
||||
_moveSelectedEmailMultipleToMailboxAction(
|
||||
session,
|
||||
accountId,
|
||||
MoveToMailboxRequest(
|
||||
{currentMailbox.id: listEmailIds},
|
||||
destinationMailbox.id,
|
||||
MoveAction.moving,
|
||||
EmailActionType.moveToTrash),
|
||||
emailIdsWithReadStatus);
|
||||
} else if (destinationMailbox.isSpam) {
|
||||
_moveSelectedEmailMultipleToMailboxAction(
|
||||
session,
|
||||
accountId,
|
||||
MoveToMailboxRequest(
|
||||
{currentMailbox.id: listEmailIds},
|
||||
destinationMailbox.id,
|
||||
MoveAction.moving,
|
||||
EmailActionType.moveToSpam),
|
||||
emailIdsWithReadStatus);
|
||||
if (destinationMailbox.isTrash) {
|
||||
moveEmailsToFolder(
|
||||
listEmails,
|
||||
EmailActionType.moveToTrash,
|
||||
selectedMailboxId: destinationMailbox.id,
|
||||
);
|
||||
} else if (destinationMailbox.isSpam) {
|
||||
moveEmailsToFolder(
|
||||
listEmails,
|
||||
EmailActionType.moveToSpam,
|
||||
selectedMailboxId: destinationMailbox.id,
|
||||
);
|
||||
} else if (destinationMailbox.isArchive) {
|
||||
moveEmailsToFolder(
|
||||
listEmails,
|
||||
EmailActionType.archiveMessage,
|
||||
selectedMailboxId: destinationMailbox.id,
|
||||
);
|
||||
} else {
|
||||
moveEmailsToFolder(
|
||||
listEmails,
|
||||
EmailActionType.moveToMailbox,
|
||||
selectedMailboxId: destinationMailbox.id,
|
||||
destinationFolderPath: destinationMailbox.mailboxPath,
|
||||
);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
_moveSelectedEmailMultipleToMailboxAction(
|
||||
session,
|
||||
accountId,
|
||||
MoveToMailboxRequest(
|
||||
{currentMailbox.id: listEmailIds},
|
||||
destinationMailbox.id,
|
||||
MoveAction.moving,
|
||||
onCallbackAction?.call();
|
||||
consumeState(
|
||||
Stream.value(Left(MoveMultipleEmailToMailboxFailure(
|
||||
EmailActionType.moveToMailbox,
|
||||
destinationPath: destinationMailbox.mailboxPath),
|
||||
emailIdsWithReadStatus);
|
||||
MoveAction.moving,
|
||||
ParametersIsNullException(),
|
||||
))),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1424,7 +1408,7 @@ class MailboxDashBoardController extends ReloadableController
|
||||
dispatchAction(CancelSelectionAllEmailAction());
|
||||
}
|
||||
|
||||
void _moveSelectedEmailMultipleToMailboxAction(
|
||||
void moveSelectedEmailMultipleToMailboxAction(
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
MoveToMailboxRequest moveRequest,
|
||||
@@ -1446,34 +1430,52 @@ class MailboxDashBoardController extends ReloadableController
|
||||
MoveAction? moveAction;
|
||||
EmailActionType? emailActionType;
|
||||
Map<EmailId, bool>? emailIdsWithReadStatus;
|
||||
bool isUndoActionEnabled = false;
|
||||
|
||||
if (success is MoveMultipleEmailToMailboxAllSuccess) {
|
||||
destinationPath = success.destinationPath;
|
||||
movedEmailIds = success.movedListEmailId;
|
||||
currentMailboxId = success.currentMailboxId;
|
||||
currentMailboxId = success.originalMailboxIdsWithEmailIds.keys.firstOrNull;
|
||||
destinationMailboxId = success.destinationMailboxId;
|
||||
moveAction = success.moveAction;
|
||||
emailActionType = success.emailActionType;
|
||||
emailIdsWithReadStatus = success.emailIdsWithReadStatus;
|
||||
isUndoActionEnabled = success.originalMailboxIdsWithEmailIds.length == 1;
|
||||
} else if (success is MoveMultipleEmailToMailboxHasSomeEmailFailure) {
|
||||
destinationPath = success.destinationPath;
|
||||
movedEmailIds = success.movedListEmailId;
|
||||
currentMailboxId = success.currentMailboxId;
|
||||
currentMailboxId = success.originalMailboxIdsWithMoveSucceededEmailIds.keys.firstOrNull;
|
||||
destinationMailboxId = success.destinationMailboxId;
|
||||
moveAction = success.moveAction;
|
||||
emailActionType = success.emailActionType;
|
||||
emailIdsWithReadStatus = success.moveSucceededEmailIdsWithReadStatus;
|
||||
isUndoActionEnabled = success.originalMailboxIdsWithMoveSucceededEmailIds.length == 1;
|
||||
}
|
||||
|
||||
if (currentContext != null &&
|
||||
currentOverlayContext != null &&
|
||||
emailActionType != null &&
|
||||
moveAction == MoveAction.moving) {
|
||||
if (currentMailboxId == null ||
|
||||
currentOverlayContext == null ||
|
||||
emailActionType == null ||
|
||||
moveAction != MoveAction.moving) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isUndoActionEnabled) {
|
||||
appToast.showToastSuccessMessage(
|
||||
currentOverlayContext!,
|
||||
emailActionType.getToastMessageMoveToMailboxSuccess(
|
||||
currentContext!,
|
||||
destinationPath: destinationPath,
|
||||
),
|
||||
leadingSVGIconColor: Colors.white,
|
||||
leadingSVGIcon: imagePaths.icFolderMailbox,
|
||||
);
|
||||
} else {
|
||||
appToast.showToastMessage(
|
||||
currentOverlayContext!,
|
||||
emailActionType.getToastMessageMoveToMailboxSuccess(
|
||||
currentContext!,
|
||||
destinationPath: destinationPath),
|
||||
destinationPath: destinationPath,
|
||||
),
|
||||
actionName: AppLocalizations.of(currentContext!).undo,
|
||||
onActionClick: () {
|
||||
final newCurrentMailboxId = destinationMailboxId;
|
||||
@@ -1484,7 +1486,7 @@ class MailboxDashBoardController extends ReloadableController
|
||||
newDestinationMailboxId,
|
||||
MoveAction.undo,
|
||||
emailActionType!,
|
||||
destinationPath: destinationPath
|
||||
destinationPath: destinationPath,
|
||||
), emailIdsWithReadStatus ?? {});
|
||||
}
|
||||
},
|
||||
@@ -1510,65 +1512,6 @@ class MailboxDashBoardController extends ReloadableController
|
||||
}
|
||||
}
|
||||
|
||||
void moveSelectedMultipleEmailToTrash(List<PresentationEmail> listEmails, PresentationMailbox mailboxCurrent) {
|
||||
final trashMailboxId = getMailboxIdByRole(PresentationMailbox.roleTrash);
|
||||
if (accountId.value != null && trashMailboxId != null && sessionCurrent != null) {
|
||||
_moveSelectedEmailMultipleToMailboxAction(
|
||||
sessionCurrent!,
|
||||
accountId.value!,
|
||||
MoveToMailboxRequest(
|
||||
{mailboxCurrent.id: listEmails.listEmailIds},
|
||||
trashMailboxId,
|
||||
MoveAction.moving,
|
||||
EmailActionType.moveToTrash),
|
||||
Map.fromEntries(
|
||||
listEmails
|
||||
.where((email) => email.id != null)
|
||||
.map((email) => MapEntry(email.id!, email.hasRead)),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void moveSelectedMultipleEmailToSpam(List<PresentationEmail> listEmail, PresentationMailbox mailboxCurrent) {
|
||||
if (accountId.value == null || sessionCurrent == null) {
|
||||
consumeState(Stream.value(
|
||||
Left(MoveMultipleEmailToMailboxFailure(
|
||||
EmailActionType.moveToSpam,
|
||||
MoveAction.moving,
|
||||
NotFoundSessionException()
|
||||
))
|
||||
));
|
||||
return;
|
||||
}
|
||||
|
||||
if (spamMailboxId == null) {
|
||||
consumeState(Stream.value(
|
||||
Left(MoveMultipleEmailToMailboxFailure(
|
||||
EmailActionType.moveToSpam,
|
||||
MoveAction.moving,
|
||||
NotFoundSpamMailboxException()
|
||||
))
|
||||
));
|
||||
return;
|
||||
}
|
||||
|
||||
_moveSelectedEmailMultipleToMailboxAction(
|
||||
sessionCurrent!,
|
||||
accountId.value!,
|
||||
MoveToMailboxRequest(
|
||||
{mailboxCurrent.id: listEmail.listEmailIds},
|
||||
spamMailboxId!,
|
||||
MoveAction.moving,
|
||||
EmailActionType.moveToSpam),
|
||||
Map.fromEntries(
|
||||
listEmail
|
||||
.where((email) => email.id != null)
|
||||
.map((email) => MapEntry(email.id!, email.hasRead)),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void unSpamSelectedMultipleEmail(List<PresentationEmail> listEmail) {
|
||||
if (accountId.value == null || sessionCurrent == null) {
|
||||
consumeState(Stream.value(
|
||||
@@ -1604,7 +1547,7 @@ class MailboxDashBoardController extends ReloadableController
|
||||
return;
|
||||
}
|
||||
|
||||
_moveSelectedEmailMultipleToMailboxAction(
|
||||
moveSelectedEmailMultipleToMailboxAction(
|
||||
sessionCurrent!,
|
||||
accountId.value!,
|
||||
MoveToMailboxRequest(
|
||||
|
||||
+107
@@ -0,0 +1,107 @@
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:model/email/email_action_type.dart';
|
||||
import 'package:model/email/presentation_email.dart';
|
||||
import 'package:model/extensions/list_presentation_email_extension.dart';
|
||||
import 'package:model/extensions/presentation_email_extension.dart';
|
||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/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/thread/domain/state/move_multiple_email_to_mailbox_state.dart';
|
||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||
|
||||
extension HandleActionTypeForEmailSelection on MailboxDashBoardController {
|
||||
void moveEmailsToFolder(
|
||||
List<PresentationEmail> emails,
|
||||
EmailActionType actionType,
|
||||
{MailboxId? selectedMailboxId, String? destinationFolderPath}
|
||||
) {
|
||||
MailboxId? destinationMailboxId;
|
||||
|
||||
if (actionType == EmailActionType.moveToMailbox) {
|
||||
destinationMailboxId = selectedMailboxId;
|
||||
} else if (actionType == EmailActionType.moveToSpam) {
|
||||
destinationMailboxId = spamMailboxId;
|
||||
} else if (actionType == EmailActionType.moveToTrash) {
|
||||
destinationMailboxId = getMailboxIdByRole(PresentationMailbox.roleTrash);
|
||||
} else if (actionType == EmailActionType.archiveMessage) {
|
||||
destinationMailboxId = getMailboxIdByRole(PresentationMailbox.roleArchive);
|
||||
}
|
||||
|
||||
if (accountId.value == null ||
|
||||
destinationMailboxId == null ||
|
||||
sessionCurrent == null) {
|
||||
consumeState(
|
||||
Stream.value(Left(MoveMultipleEmailToMailboxFailure(
|
||||
actionType,
|
||||
MoveAction.moving,
|
||||
ParametersIsNullException(),
|
||||
))),
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
final mapEmailIdsByMailboxId = <MailboxId, List<EmailId>>{};
|
||||
|
||||
if (searchController.isSearchEmailRunning) {
|
||||
for (final email in emails) {
|
||||
final mailboxId = email.firstMailboxIdAvailable;
|
||||
final emailId = email.id;
|
||||
|
||||
if (mailboxId == null ||
|
||||
mailboxId == destinationMailboxId ||
|
||||
emailId == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
mapEmailIdsByMailboxId.putIfAbsent(mailboxId, () => []).add(emailId);
|
||||
}
|
||||
} else {
|
||||
final selectedId = selectedMailbox.value?.id;
|
||||
if (selectedId != null) {
|
||||
mapEmailIdsByMailboxId[selectedId] = emails.listEmailIds;
|
||||
}
|
||||
}
|
||||
|
||||
log('$runtimeType::moveEmailsToFolder: MapEmailIdsByMailboxId = $mapEmailIdsByMailboxId');
|
||||
if (mapEmailIdsByMailboxId.isEmpty) {
|
||||
consumeState(
|
||||
Stream.value(Left(MoveMultipleEmailToMailboxFailure(
|
||||
actionType,
|
||||
MoveAction.moving,
|
||||
ParametersIsNullException(),
|
||||
))),
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
final emailIdsWithReadStatus = Map.fromEntries(
|
||||
emails
|
||||
.where((email) => email.id != null)
|
||||
.map((email) => MapEntry(email.id!, email.hasRead)),
|
||||
);
|
||||
|
||||
final destinationPath = destinationFolderPath ??
|
||||
(currentContext != null
|
||||
? destinationFolderPath ?? mapMailboxById[destinationMailboxId]?.getDisplayName(currentContext!)
|
||||
: null);
|
||||
|
||||
moveSelectedEmailMultipleToMailboxAction(
|
||||
sessionCurrent!,
|
||||
accountId.value!,
|
||||
MoveToMailboxRequest(
|
||||
mapEmailIdsByMailboxId,
|
||||
destinationMailboxId,
|
||||
MoveAction.moving,
|
||||
actionType,
|
||||
destinationPath: destinationPath,
|
||||
),
|
||||
emailIdsWithReadStatus,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -954,22 +954,14 @@ class SearchEmailController extends BaseController
|
||||
break;
|
||||
case EmailActionType.unMarkAsStarred:
|
||||
cancelSelectionMode();
|
||||
|
||||
markAsStarSelectedMultipleEmail(listEmails, MarkStarAction.unMarkStar);
|
||||
break;
|
||||
case EmailActionType.moveToMailbox:
|
||||
cancelSelectionMode();
|
||||
final mailboxContainCurrent = listEmails.getCurrentMailboxContain(mailboxDashBoardController.mapMailboxById);
|
||||
if (mailboxContainCurrent != null) {
|
||||
moveSelectedMultipleEmailToMailbox(listEmails, mailboxContainCurrent);
|
||||
}
|
||||
moveEmailsToMailbox(listEmails, onCallbackAction: cancelSelectionMode);
|
||||
break;
|
||||
case EmailActionType.moveToTrash:
|
||||
cancelSelectionMode();
|
||||
final mailboxContainCurrent = listEmails.getCurrentMailboxContain(mailboxDashBoardController.mapMailboxById);
|
||||
if (mailboxContainCurrent != null) {
|
||||
moveSelectedMultipleEmailToTrash(listEmails, mailboxContainCurrent);
|
||||
}
|
||||
moveEmailsToTrash(listEmails);
|
||||
break;
|
||||
case EmailActionType.deletePermanently:
|
||||
final mailboxContainCurrent = listEmails.getCurrentMailboxContain(mailboxDashBoardController.mapMailboxById);
|
||||
@@ -984,10 +976,7 @@ class SearchEmailController extends BaseController
|
||||
break;
|
||||
case EmailActionType.moveToSpam:
|
||||
cancelSelectionMode();
|
||||
final mailboxContainCurrent = listEmails.getCurrentMailboxContain(mailboxDashBoardController.mapMailboxById);
|
||||
if (mailboxContainCurrent != null) {
|
||||
moveSelectedMultipleEmailToSpam(listEmails, mailboxContainCurrent);
|
||||
}
|
||||
moveEmailsToSpam(listEmails);
|
||||
break;
|
||||
case EmailActionType.unSpam:
|
||||
cancelSelectionMode();
|
||||
|
||||
@@ -9,7 +9,6 @@ class LoadingMoveMultipleEmailToMailboxAll extends UIState {}
|
||||
|
||||
class MoveMultipleEmailToMailboxAllSuccess extends UIState {
|
||||
final List<EmailId> movedListEmailId;
|
||||
final MailboxId currentMailboxId;
|
||||
final MailboxId destinationMailboxId;
|
||||
final MoveAction moveAction;
|
||||
final EmailActionType emailActionType;
|
||||
@@ -19,7 +18,6 @@ class MoveMultipleEmailToMailboxAllSuccess extends UIState {
|
||||
|
||||
MoveMultipleEmailToMailboxAllSuccess(
|
||||
this.movedListEmailId,
|
||||
this.currentMailboxId,
|
||||
this.destinationMailboxId,
|
||||
this.moveAction,
|
||||
this.emailActionType,
|
||||
@@ -33,7 +31,6 @@ class MoveMultipleEmailToMailboxAllSuccess extends UIState {
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
movedListEmailId,
|
||||
currentMailboxId,
|
||||
destinationMailboxId,
|
||||
moveAction,
|
||||
emailActionType,
|
||||
@@ -55,7 +52,6 @@ class MoveMultipleEmailToMailboxAllFailure extends FeatureFailure {
|
||||
|
||||
class MoveMultipleEmailToMailboxHasSomeEmailFailure extends UIState {
|
||||
final List<EmailId> movedListEmailId;
|
||||
final MailboxId currentMailboxId;
|
||||
final MailboxId destinationMailboxId;
|
||||
final MoveAction moveAction;
|
||||
final EmailActionType emailActionType;
|
||||
@@ -65,7 +61,6 @@ class MoveMultipleEmailToMailboxHasSomeEmailFailure extends UIState {
|
||||
|
||||
MoveMultipleEmailToMailboxHasSomeEmailFailure(
|
||||
this.movedListEmailId,
|
||||
this.currentMailboxId,
|
||||
this.destinationMailboxId,
|
||||
this.moveAction,
|
||||
this.emailActionType,
|
||||
@@ -79,7 +74,6 @@ class MoveMultipleEmailToMailboxHasSomeEmailFailure extends UIState {
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
movedListEmailId,
|
||||
currentMailboxId,
|
||||
destinationMailboxId,
|
||||
moveAction,
|
||||
emailActionType,
|
||||
|
||||
@@ -29,7 +29,6 @@ class MoveMultipleEmailToMailboxInteractor {
|
||||
if (moveRequest.totalEmails == result.emailIdsSuccess.length) {
|
||||
yield Right(MoveMultipleEmailToMailboxAllSuccess(
|
||||
result.emailIdsSuccess,
|
||||
moveRequest.currentMailboxes.keys.first,
|
||||
moveRequest.destinationMailboxId,
|
||||
moveRequest.moveAction,
|
||||
moveRequest.emailActionType,
|
||||
@@ -52,7 +51,6 @@ class MoveMultipleEmailToMailboxInteractor {
|
||||
.where((emailId, _) => result.emailIdsSuccess.contains(emailId));
|
||||
yield Right(MoveMultipleEmailToMailboxHasSomeEmailFailure(
|
||||
result.emailIdsSuccess,
|
||||
moveRequest.currentMailboxes.keys.first,
|
||||
moveRequest.destinationMailboxId,
|
||||
moveRequest.moveAction,
|
||||
moveRequest.emailActionType,
|
||||
|
||||
@@ -25,6 +25,7 @@ import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_reques
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_action_type_for_email_selection.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/open_and_close_composer_extension.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
@@ -290,21 +291,35 @@ mixin EmailActionController {
|
||||
mailboxDashBoardController.markAsStarSelectedMultipleEmail(listEmails, markStarAction);
|
||||
}
|
||||
|
||||
void moveSelectedMultipleEmailToMailbox(
|
||||
List<PresentationEmail> listEmails,
|
||||
PresentationMailbox mailboxCurrent
|
||||
) {
|
||||
mailboxDashBoardController.moveSelectedMultipleEmailToMailbox(
|
||||
void moveEmailsToMailbox(
|
||||
List<PresentationEmail> listEmails, {
|
||||
VoidCallback? onCallbackAction,
|
||||
}) {
|
||||
mailboxDashBoardController.moveEmailsToMailbox(
|
||||
listEmails,
|
||||
mailboxCurrent);
|
||||
onCallbackAction: onCallbackAction,
|
||||
);
|
||||
}
|
||||
|
||||
void moveSelectedMultipleEmailToTrash(List<PresentationEmail> listEmails, PresentationMailbox mailboxCurrent) {
|
||||
mailboxDashBoardController.moveSelectedMultipleEmailToTrash(listEmails, mailboxCurrent);
|
||||
void moveEmailsToTrash(List<PresentationEmail> listEmails) {
|
||||
mailboxDashBoardController.moveEmailsToFolder(
|
||||
listEmails,
|
||||
EmailActionType.moveToTrash,
|
||||
);
|
||||
}
|
||||
|
||||
void moveSelectedMultipleEmailToSpam(List<PresentationEmail> listEmails, PresentationMailbox mailboxCurrent) {
|
||||
mailboxDashBoardController.moveSelectedMultipleEmailToSpam(listEmails, mailboxCurrent);
|
||||
void moveEmailsToArchive(List<PresentationEmail> listEmails) {
|
||||
mailboxDashBoardController.moveEmailsToFolder(
|
||||
listEmails,
|
||||
EmailActionType.archiveMessage,
|
||||
);
|
||||
}
|
||||
|
||||
void moveEmailsToSpam(List<PresentationEmail> listEmails) {
|
||||
mailboxDashBoardController.moveEmailsToFolder(
|
||||
listEmails,
|
||||
EmailActionType.moveToSpam,
|
||||
);
|
||||
}
|
||||
|
||||
void unSpamSelectedMultipleEmail(List<PresentationEmail> listEmails) {
|
||||
|
||||
@@ -1109,22 +1109,11 @@ class ThreadController extends BaseController with EmailActionController {
|
||||
markAsStarSelectedMultipleEmail(selectionEmail, MarkStarAction.unMarkStar);
|
||||
break;
|
||||
case EmailActionType.moveToMailbox:
|
||||
cancelSelectEmail();
|
||||
final mailboxContainCurrent = searchController.isSearchEmailRunning
|
||||
? selectionEmail.getCurrentMailboxContain(mailboxDashBoardController.mapMailboxById)
|
||||
: selectedMailbox;
|
||||
if (mailboxContainCurrent != null) {
|
||||
moveSelectedMultipleEmailToMailbox(selectionEmail, mailboxContainCurrent);
|
||||
}
|
||||
moveEmailsToMailbox(selectionEmail, onCallbackAction: cancelSelectEmail);
|
||||
break;
|
||||
case EmailActionType.moveToTrash:
|
||||
cancelSelectEmail();
|
||||
final mailboxContainCurrent = searchController.isSearchEmailRunning
|
||||
? selectionEmail.getCurrentMailboxContain(mailboxDashBoardController.mapMailboxById)
|
||||
: selectedMailbox;
|
||||
if (mailboxContainCurrent != null) {
|
||||
moveSelectedMultipleEmailToTrash(selectionEmail, mailboxContainCurrent);
|
||||
}
|
||||
moveEmailsToTrash(selectionEmail);
|
||||
break;
|
||||
case EmailActionType.deletePermanently:
|
||||
final mailboxContainCurrent = searchController.isSearchEmailRunning
|
||||
@@ -1141,17 +1130,16 @@ class ThreadController extends BaseController with EmailActionController {
|
||||
break;
|
||||
case EmailActionType.moveToSpam:
|
||||
cancelSelectEmail();
|
||||
final mailboxContainCurrent = searchController.isSearchEmailRunning
|
||||
? selectionEmail.getCurrentMailboxContain(mailboxDashBoardController.mapMailboxById)
|
||||
: selectedMailbox;
|
||||
if (mailboxContainCurrent != null) {
|
||||
moveSelectedMultipleEmailToSpam(selectionEmail, mailboxContainCurrent);
|
||||
}
|
||||
moveEmailsToSpam(selectionEmail);
|
||||
break;
|
||||
case EmailActionType.unSpam:
|
||||
cancelSelectEmail();
|
||||
unSpamSelectedMultipleEmail(selectionEmail);
|
||||
break;
|
||||
case EmailActionType.archiveMessage:
|
||||
cancelSelectEmail();
|
||||
moveEmailsToArchive(selectionEmail);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -4677,5 +4677,11 @@
|
||||
"type": "text",
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
},
|
||||
"archiveMessagesFailed": "Archive messages failed",
|
||||
"@archiveMessagesFailed": {
|
||||
"type": "text",
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
}
|
||||
}
|
||||
@@ -4934,4 +4934,11 @@ class AppLocalizations {
|
||||
name: 'showSignature',
|
||||
);
|
||||
}
|
||||
|
||||
String get archiveMessagesFailed {
|
||||
return Intl.message(
|
||||
'Archive messages failed',
|
||||
name: 'archiveMessagesFailed',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -155,6 +155,8 @@ class ToastManager {
|
||||
message = message ?? AppLocalizations.of(context).emptyTrashFolderFailed;
|
||||
} else if (_isMarkAsSpamFailure(failure)) {
|
||||
message = message ?? AppLocalizations.of(context).markAsSpamFailed;
|
||||
} else if (_isArchiveMessagesFailure(failure)) {
|
||||
message = message ?? AppLocalizations.of(context).archiveMessagesFailed;
|
||||
} else if (failure is SignInTwakeWorkplaceFailure) {
|
||||
message = message ?? AppLocalizations.of(context).sigInSaasFailed;
|
||||
} else if (failure is SignUpTwakeWorkplaceFailure) {
|
||||
@@ -204,6 +206,12 @@ class ToastManager {
|
||||
failure.moveAction == MoveAction.moving;
|
||||
}
|
||||
|
||||
bool _isArchiveMessagesFailure(FeatureFailure failure) {
|
||||
return failure is MoveMultipleEmailToMailboxFailure &&
|
||||
failure.emailActionType == EmailActionType.archiveMessage &&
|
||||
failure.moveAction == MoveAction.moving;
|
||||
}
|
||||
|
||||
void showMessageSuccess(Success success) {
|
||||
final context = currentContext;
|
||||
final overlayContext = currentOverlayContext;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:core/data/constants/constant.dart';
|
||||
import 'package:core/domain/extensions/datetime_extension.dart';
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
@@ -198,4 +199,7 @@ extension PresentationEmailExtension on PresentationEmail {
|
||||
|
||||
String? get sanitizedSearchSnippetSubject => _sanitizeSearchSnippet(searchSnippetSubject);
|
||||
String? get sanitizedSearchSnippetPreview => _sanitizeSearchSnippet(searchSnippetPreview);
|
||||
|
||||
MailboxId? get firstMailboxIdAvailable =>
|
||||
mailboxIds?.entries.firstWhereOrNull((element) => element.value)?.key;
|
||||
}
|
||||
Reference in New Issue
Block a user