From 1398a30ed6dc66c062394aca7983943f7c50c431 Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 5 Nov 2025 14:19:38 +0700 Subject: [PATCH] TF-1715 Mark as star when drag n drop or move email to Favorite folder --- .../mailbox_dashboard_controller.dart | 73 ++++++++++++++----- .../presentation/thread_controller.dart | 6 +- 2 files changed, 56 insertions(+), 23 deletions(-) diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart index 282678b6f..5fe6be7ab 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -1347,32 +1347,67 @@ class MailboxDashBoardController extends ReloadableController .where((email) => email.id != null) .map((e) => MapEntry(e.id!, e.hasRead)) ); - if (searchController.isSearchEmailRunning || - selectedMailbox.value?.isFavorite == true) { - final Map> mapListEmailSelectedByMailBoxId = {}; - for (var element in listEmails) { - final mailbox = element.findMailboxContain(mapMailboxById); - if (mailbox != null && element.id != null) { - if (mapListEmailSelectedByMailBoxId.containsKey(mailbox.id)) { - mapListEmailSelectedByMailBoxId[mailbox.id]?.add(element.id!); - } else { - mapListEmailSelectedByMailBoxId.addAll({mailbox.id: [element.id!]}); + + if (destinationMailbox.isFavorite) { + _handleDragSelectedMultipleEmailToFavoriteFolder(listEmails); + } else { + if (searchController.isSearchEmailRunning || + selectedMailbox.value?.isFavorite == true) { + final Map> mapListEmailSelectedByMailBoxId = {}; + for (var element in listEmails) { + final mailbox = element.findMailboxContain(mapMailboxById); + if (mailbox != null && element.id != null) { + if (mapListEmailSelectedByMailBoxId.containsKey(mailbox.id)) { + mapListEmailSelectedByMailBoxId[mailbox.id]?.add(element.id!); + } else { + mapListEmailSelectedByMailBoxId.addAll({mailbox.id: [element.id!]}); + } } } + _handleDragSelectedMultipleEmailToMailboxAction( + mapListEmailSelectedByMailBoxId, + destinationMailbox, + emailIdsWithReadStatus, + ); + } else if (selectedMailbox.value != null) { + _handleDragSelectedMultipleEmailToMailboxAction( + {selectedMailbox.value!.id: listEmails.listEmailIds}, + destinationMailbox, + emailIdsWithReadStatus, + ); } - _handleDragSelectedMultipleEmailToMailboxAction( - mapListEmailSelectedByMailBoxId, - destinationMailbox, - emailIdsWithReadStatus, + } + } + + void _handleDragSelectedMultipleEmailToFavoriteFolder( + List listPresentationEmail, + ) async { + if (accountId.value != null && sessionCurrent != null) { + final listEmailIds = listPresentationEmail + .where((email) => !email.hasStarred) + .toList() + .listEmailIds; + + consumeState( + _markAsStarMultipleEmailInteractor.execute( + sessionCurrent!, + accountId.value!, + listEmailIds, + MarkStarAction.markStar, + ), ); - } else if (selectedMailbox.value != null) { - _handleDragSelectedMultipleEmailToMailboxAction( - {selectedMailbox.value!.id: listEmails.listEmailIds}, - destinationMailbox, - emailIdsWithReadStatus, + } else { + consumeState( + Stream.value(Left( + MarkAsStarMultipleEmailFailure( + MarkStarAction.markStar, + NotFoundSessionException(), + ), + )), ); } + dispatchAction(CancelSelectionAllEmailAction()); } void _handleDragSelectedMultipleEmailToMailboxAction( diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index fd5072d50..456328aa5 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -166,6 +166,7 @@ class ThreadController extends BaseController with EmailActionController { @override void handleSuccessViewState(Success success) { + super.handleSuccessViewState(success); if (success is GetAllEmailSuccess) { _getAllEmailSuccess(success); } else if (success is LoadMoreEmailsSuccess) { @@ -192,13 +193,12 @@ class ThreadController extends BaseController with EmailActionController { _openEmailWithoutMailboxFromLocationBar(success.email); } } - } else { - super.handleSuccessViewState(success); } } @override void handleFailureViewState(Failure failure) { + super.handleFailureViewState(failure); if (failure is SearchEmailFailure) { mailboxDashBoardController.updateRefreshAllEmailState(Left(RefreshAllEmailFailure())); canSearchMore = false; @@ -216,8 +216,6 @@ class ThreadController extends BaseController with EmailActionController { } else if (failure is GetAllEmailFailure || failure is CleanAndGetAllEmailFailure) { mailboxDashBoardController.updateRefreshAllEmailState(Left(RefreshAllEmailFailure())); canLoadMore = true; - } else { - super.handleFailureViewState(failure); } }