TF-1328 Implement archiveMessage in thread and singleEmail
(cherry picked from commit 83b45fdb3f3138e59b7882a8fdb77e522e753f3e)
This commit is contained in:
@@ -1003,6 +1003,9 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
case EmailActionType.unsubscribe:
|
case EmailActionType.unsubscribe:
|
||||||
_unsubscribeEmail(context, presentationEmail);
|
_unsubscribeEmail(context, presentationEmail);
|
||||||
break;
|
break;
|
||||||
|
case EmailActionType.archiveMessage:
|
||||||
|
archiveMessage(context, presentationEmail);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1480,4 +1483,8 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void archiveMessage(BuildContext context, PresentationEmail email) {
|
||||||
|
mailboxDashBoardController.archiveMessage(context, email);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -23,7 +23,6 @@ import 'package:tmail_ui_user/features/composer/domain/state/save_email_as_draft
|
|||||||
import 'package:tmail_ui_user/features/composer/domain/state/send_email_state.dart';
|
import 'package:tmail_ui_user/features/composer/domain/state/send_email_state.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/state/update_email_drafts_state.dart';
|
import 'package:tmail_ui_user/features/composer/domain/state/update_email_drafts_state.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/move_action.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/email/domain/state/delete_email_permanently_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/delete_email_permanently_state.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/state/delete_multiple_emails_permanently_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/delete_multiple_emails_permanently_state.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_state.dart';
|
||||||
@@ -1347,25 +1346,4 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
|
|||||||
mailboxDashBoardController.emptySpamFolderAction(spamFolderId: presentationMailbox.id);
|
mailboxDashBoardController.emptySpamFolderAction(spamFolderId: presentationMailbox.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void archiveMessage(PresentationEmail email) {
|
|
||||||
final mailboxContain = email.findMailboxContain(mailboxDashBoardController.mapMailboxById);
|
|
||||||
if (mailboxContain != null) {
|
|
||||||
final archiveMailboxId = mailboxDashBoardController.getMailboxIdByRole(PresentationMailbox.roleArchive);
|
|
||||||
if (archiveMailboxId != null) {
|
|
||||||
final moveToArchiveMailboxRequest = MoveToMailboxRequest(
|
|
||||||
{mailboxContain.id: [email.id!]},
|
|
||||||
archiveMailboxId,
|
|
||||||
MoveAction.moving,
|
|
||||||
EmailActionType.moveToMailbox,
|
|
||||||
destinationPath:findNodePath(archiveMailboxId)
|
|
||||||
);
|
|
||||||
mailboxDashBoardController.moveToMailbox(
|
|
||||||
mailboxDashBoardController.sessionCurrent!,
|
|
||||||
mailboxDashBoardController.accountId.value!,
|
|
||||||
moveToArchiveMailboxRequest
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
+22
@@ -2393,6 +2393,28 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void archiveMessage(BuildContext context, PresentationEmail email) {
|
||||||
|
final mailboxContain = email.findMailboxContain(mapMailboxById);
|
||||||
|
if (mailboxContain != null) {
|
||||||
|
final archiveMailboxId = getMailboxIdByRole(PresentationMailbox.roleArchive);
|
||||||
|
final archiveMailboxPath = mapMailboxById[archiveMailboxId]?.getDisplayName(context);
|
||||||
|
if (archiveMailboxId != null) {
|
||||||
|
final moveToArchiveMailboxRequest = MoveToMailboxRequest(
|
||||||
|
{mailboxContain.id: [email.id!]},
|
||||||
|
archiveMailboxId,
|
||||||
|
MoveAction.moving,
|
||||||
|
EmailActionType.moveToMailbox,
|
||||||
|
destinationPath: archiveMailboxPath
|
||||||
|
);
|
||||||
|
moveToMailbox(
|
||||||
|
sessionCurrent!,
|
||||||
|
accountId.value!,
|
||||||
|
moveToArchiveMailboxRequest
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onClose() {
|
void onClose() {
|
||||||
_emailReceiveManager.closeEmailReceiveManagerStream();
|
_emailReceiveManager.closeEmailReceiveManagerStream();
|
||||||
|
|||||||
@@ -287,4 +287,8 @@ mixin EmailActionController {
|
|||||||
void openEmailInNewTabAction(BuildContext context, PresentationEmail email) {
|
void openEmailInNewTabAction(BuildContext context, PresentationEmail email) {
|
||||||
AppUtils.launchLink(email.routeWebAsString);
|
AppUtils.launchLink(email.routeWebAsString);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void archiveMessage(BuildContext context, PresentationEmail email) {
|
||||||
|
mailboxDashBoardController.archiveMessage(context, email);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1183,11 +1183,13 @@ class ThreadController extends BaseController with EmailActionController {
|
|||||||
if (direction == DismissDirection.startToEnd) {
|
if (direction == DismissDirection.startToEnd) {
|
||||||
ReadActions readActions = !email.hasRead ? ReadActions.markAsRead : ReadActions.markAsUnread;
|
ReadActions readActions = !email.hasRead ? ReadActions.markAsRead : ReadActions.markAsUnread;
|
||||||
markAsEmailRead(email, readActions, MarkReadAction.swipeOnThread);
|
markAsEmailRead(email, readActions, MarkReadAction.swipeOnThread);
|
||||||
|
} else if (direction == DismissDirection.endToStart) {
|
||||||
|
archiveMessage(context, email);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
DismissDirection getSwipeDirection(bool isWebDesktop, SelectMode selectMode) {
|
DismissDirection getSwipeDirection(bool isWebDesktop, SelectMode selectMode, PresentationEmail email) {
|
||||||
if (isWebDesktop) {
|
if (isWebDesktop) {
|
||||||
return DismissDirection.none;
|
return DismissDirection.none;
|
||||||
}
|
}
|
||||||
@@ -1196,9 +1198,13 @@ class ThreadController extends BaseController with EmailActionController {
|
|||||||
return DismissDirection.none;
|
return DismissDirection.none;
|
||||||
}
|
}
|
||||||
|
|
||||||
return DismissDirection.startToEnd;
|
return isInArchiveMailbox(email)
|
||||||
|
? DismissDirection.startToEnd
|
||||||
|
: DismissDirection.horizontal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool isInArchiveMailbox(PresentationEmail email) => email.mailboxContain?.isArchive == true;
|
||||||
|
|
||||||
void scrollToTop() {
|
void scrollToTop() {
|
||||||
if (listEmailController.hasClients) {
|
if (listEmailController.hasClients) {
|
||||||
listEmailController.animateTo(0, duration: const Duration(milliseconds: 500), curve: Curves.fastOutSlowIn);
|
listEmailController.animateTo(0, duration: const Duration(milliseconds: 500), curve: Curves.fastOutSlowIn);
|
||||||
|
|||||||
@@ -495,33 +495,33 @@ class ThreadView extends GetWidget<ThreadController>
|
|||||||
),
|
),
|
||||||
secondaryBackground: controller.isInArchiveMailbox(presentationEmail) == false
|
secondaryBackground: controller.isInArchiveMailbox(presentationEmail) == false
|
||||||
? Container(
|
? Container(
|
||||||
color: AppColor.colorItemRecipientSelected,
|
color: AppColor.colorItemRecipientSelected,
|
||||||
padding: const EdgeInsetsDirectional.only(end: 16),
|
padding: const EdgeInsetsDirectional.only(end: 16),
|
||||||
child: Align(
|
child: Align(
|
||||||
alignment: AlignmentDirectional.centerEnd,
|
alignment: AlignmentDirectional.centerEnd,
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
const Spacer(),
|
const Spacer(),
|
||||||
CircleAvatar(
|
CircleAvatar(
|
||||||
backgroundColor: AppColor.colorSpamReportBannerBackground,
|
backgroundColor: AppColor.colorSpamReportBannerBackground,
|
||||||
radius: 24,
|
radius: 24,
|
||||||
child: SvgPicture.asset(
|
child: SvgPicture.asset(
|
||||||
controller.imagePaths.icMailboxArchived,
|
controller.imagePaths.icMailboxArchived,
|
||||||
fit: BoxFit.fill,
|
fit: BoxFit.fill,
|
||||||
)
|
)
|
||||||
),
|
|
||||||
const SizedBox(width: 11),
|
|
||||||
Text(
|
|
||||||
AppLocalizations.of(context).archiveMessage,
|
|
||||||
style: const TextStyle(
|
|
||||||
fontSize: 15,
|
|
||||||
color: AppColor.primaryColor,
|
|
||||||
),
|
),
|
||||||
),
|
const SizedBox(width: 11),
|
||||||
],
|
Text(
|
||||||
|
AppLocalizations.of(context).archiveMessage,
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 15,
|
||||||
|
color: AppColor.primaryColor,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
)
|
||||||
)
|
|
||||||
: null,
|
: null,
|
||||||
confirmDismiss: (direction) => controller.swipeEmailAction(context, presentationEmail, direction),
|
confirmDismiss: (direction) => controller.swipeEmailAction(context, presentationEmail, direction),
|
||||||
child: EmailTileBuilder(
|
child: EmailTileBuilder(
|
||||||
@@ -730,13 +730,13 @@ class ThreadView extends GetWidget<ThreadController>
|
|||||||
AppLocalizations.of(context).archiveMessage,
|
AppLocalizations.of(context).archiveMessage,
|
||||||
email,
|
email,
|
||||||
iconLeftPadding: controller.responsiveUtils.isMobile(context)
|
iconLeftPadding: controller.responsiveUtils.isMobile(context)
|
||||||
? const EdgeInsets.only(left: 12, right: 16)
|
? const EdgeInsetsDirectional.only(start: 12, end: 16)
|
||||||
: const EdgeInsets.only(right: 12),
|
: const EdgeInsetsDirectional.only(start: 12),
|
||||||
iconRightPadding: controller.responsiveUtils.isMobile(context)
|
iconRightPadding: controller.responsiveUtils.isMobile(context)
|
||||||
? const EdgeInsets.only(right: 12)
|
? const EdgeInsetsDirectional.only(start: 12)
|
||||||
: EdgeInsets.zero
|
: EdgeInsets.zero
|
||||||
)
|
)
|
||||||
..onActionClick((email) => controller.archiveMessage(email))
|
..onActionClick((email) => controller.archiveMessage(context, email))
|
||||||
).build();
|
).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -821,7 +821,7 @@ class ThreadView extends GetWidget<ThreadController>
|
|||||||
),
|
),
|
||||||
onCallbackAction: () {
|
onCallbackAction: () {
|
||||||
popBack();
|
popBack();
|
||||||
controller.archiveMessage(email);
|
controller.archiveMessage(context, email);
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user