TF-3715 Thread Detail create resuable actions
TF-3715 Thread Detail refactor actions for expanded email view TF-3715 Thread Detail apply actions for collapsed email view TF-3715 Thread Detail fix unit tests TF-3715 Thread Detail add await for _getEmailContent in composer TF-3715 Thread Detail remove unused emailLoaded in ThreadDetailAppBar TF-3715 Thread Detail hide print action when isMobile TF-3715 Thread Detail allow mark as read in EmailActionReactor TF-3715 Thread Detail fix loadMoreThreadDetailEmails unit test TF-3715 Thread Detail fix action small tap region TF-3715 Thread Detail fix cannot permanent delete email TF-3715 Thread Detail prevent close when move email TF-3715 Thread Detail fix refresh when mark star selected collapsed email TF-3715 Thread Detail update print action display logic TF-3715 Thread Detail fix duplicate mark star in app bar TF-3715 Thread Detail create new transformer for reply forward empty content email TF-3715 Thread Detail fix email not load after open multiple times TF-3715 Thread Detail fix close when move expanded email TF-3715 Thread Detail fix duplicate and missing actions TF-3715 Thread Detail restore editAsNewEmail action to _getEmailContent in setupEmailContent TF-3715 Thread Detail update print action name TF-3715 Thread Detail handle move and delete email with 1 item in thread detail TF-3715 Thread Detail fix tap outside to close context menu TF-3715 Thread Detail fix create rule and compose from recipient info TF-3715 Thread Detail handle move and delete email with 1 item in thread detail TF-3715 Thread Detail Fix cannot create email rule TF-3715 Thread Detail Fix crash composer TF-3715 Thread Detail Fix cannot unsubscribe TF-3715 Thread Detail Fix duplicate actions on single email TF-3715 Thread Detail Fix refresh view when reply/forward TF-3715 Thread Detail Revert old logic to _getEmailContent TF-3715 Thread Detail Update specific cases for UpdatedEmailKeywordsAction TF-3715 Thread Detail Fix concurrent modification during iteration TF-3715 Thread Detail Fix unsubscribe for all thread detail emails TF-3715 Thread Detail Remove unnecessary Future in reactor TF-3715 Thread Detail Remove dependency from SingleEmailController TF-3715 Thread Detail Apply individual list post and unsubscribe header TF-3715 Thread Detail Fix unsubscribe collapsed email TF-3715 Thread Detail Conditionally inject rule filter interactor
This commit is contained in:
+2
-2
@@ -151,10 +151,10 @@ class MailboxDashBoardBindings extends BaseBindings {
|
||||
SendingQueueBindings().dependencies();
|
||||
MailboxBindings().dependencies();
|
||||
ThreadBindings().dependencies();
|
||||
SearchEmailBindings().dependencies();
|
||||
ThreadDetailBindings().dependencies();
|
||||
EmailBindings().dependencies();
|
||||
SearchEmailBindings().dependencies();
|
||||
QuotasBindings().dependencies();
|
||||
ThreadDetailBindings().dependencies();
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
+24
-4
@@ -174,6 +174,7 @@ import 'package:tmail_ui_user/features/thread/domain/usecases/mark_as_multiple_e
|
||||
import 'package:tmail_ui_user/features/thread/domain/usecases/mark_as_star_multiple_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/usecases/move_multiple_email_to_mailbox_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/action/thread_detail_ui_action.dart';
|
||||
import 'package:tmail_ui_user/main/deep_links/deep_link_data.dart';
|
||||
import 'package:tmail_ui_user/main/deep_links/deep_links_manager.dart';
|
||||
import 'package:tmail_ui_user/main/deep_links/open_app_deep_link_data.dart';
|
||||
@@ -252,6 +253,7 @@ class MailboxDashBoardController extends ReloadableController
|
||||
final dashBoardAction = Rxn<UIAction>();
|
||||
final mailboxUIAction = Rxn<MailboxUIAction>();
|
||||
final emailUIAction = Rxn<EmailUIAction>();
|
||||
final threadDetailUIAction = Rxn<ThreadDetailUIAction>();
|
||||
final dashboardRoute = DashboardRoutes.waiting.obs;
|
||||
final currentSelectMode = SelectMode.INACTIVE.obs;
|
||||
final filterMessageOption = FilterMessageOption.all.obs;
|
||||
@@ -447,7 +449,7 @@ class MailboxDashBoardController extends ReloadableController
|
||||
} else if (success is DeleteSendingEmailSuccess) {
|
||||
getAllSendingEmails();
|
||||
} else if (success is UnsubscribeEmailSuccess) {
|
||||
_handleUnsubscribeMailSuccess();
|
||||
_handleUnsubscribeMailSuccess(success.emailId);
|
||||
} else if (success is RestoreDeletedMessageSuccess) {
|
||||
_handleRestoreDeletedMessageSuccess(success.emailRecoveryAction.id!);
|
||||
} else if (success is GetRestoredDeletedMessageSuccess) {
|
||||
@@ -1766,6 +1768,11 @@ class MailboxDashBoardController extends ReloadableController
|
||||
emailUIAction.value = newAction;
|
||||
}
|
||||
|
||||
void dispatchThreadDetailUIAction(ThreadDetailUIAction newAction) {
|
||||
log('MailboxDashBoardController::dispatchThreadDetailUIAction():newAction: ${newAction.runtimeType}');
|
||||
threadDetailUIAction.value = newAction;
|
||||
}
|
||||
|
||||
void dispatchRoute(DashboardRoutes route) {
|
||||
log('MailboxDashBoardController::dispatchRoute(): $route');
|
||||
dashboardRoute.value = route;
|
||||
@@ -2848,16 +2855,29 @@ class MailboxDashBoardController extends ReloadableController
|
||||
}
|
||||
}
|
||||
|
||||
void _handleUnsubscribeMailSuccess() {
|
||||
void _handleUnsubscribeMailSuccess(EmailId emailId) {
|
||||
if (currentContext != null && currentOverlayContext != null) {
|
||||
appToast.showToastSuccessMessage(
|
||||
currentOverlayContext!,
|
||||
AppLocalizations.of(currentContext!).unsubscribedFromThisMailingList);
|
||||
}
|
||||
final newEmail = selectedEmail.value?.updateKeywords({
|
||||
dispatchThreadDetailUIAction(UpdatedEmailKeywordsAction(
|
||||
emailId,
|
||||
KeyWordIdentifierExtension.unsubscribeMail,
|
||||
true,
|
||||
));
|
||||
// Reset threadDetailUIAction
|
||||
dispatchThreadDetailUIAction(ThreadDetailUIAction());
|
||||
|
||||
final listEmail = searchController.isSearchEmailRunning
|
||||
? listResultSearch
|
||||
: emailsInCurrentMailbox;
|
||||
var newEmailIndex = listEmail.indexWhere((email) => email.id == emailId);
|
||||
if (newEmailIndex == -1) return;
|
||||
|
||||
listEmail[newEmailIndex] = listEmail[newEmailIndex].updateKeywords({
|
||||
KeyWordIdentifierExtension.unsubscribeMail: true,
|
||||
});
|
||||
setSelectedEmail(newEmail);
|
||||
}
|
||||
|
||||
void _replaceBrowserHistory({Uri? uri}) {
|
||||
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
import 'package:model/email/presentation_email.dart';
|
||||
import 'package:model/extensions/presentation_email_extension.dart';
|
||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
||||
|
||||
extension GetMailboxContainExtension on MailboxDashBoardController {
|
||||
PresentationMailbox? getMailboxContain(PresentationEmail email) {
|
||||
if (selectedMailbox.value == null) {
|
||||
return email.findMailboxContain(mapMailboxById);
|
||||
} else {
|
||||
return searchController.isSearchEmailRunning
|
||||
? email.findMailboxContain(mapMailboxById)
|
||||
: selectedMailbox.value;
|
||||
}
|
||||
}
|
||||
}
|
||||
+15
-13
@@ -3,9 +3,9 @@ import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart';
|
||||
import 'package:model/email/mark_star_action.dart';
|
||||
import 'package:model/email/presentation_email.dart';
|
||||
import 'package:model/email/read_actions.dart';
|
||||
import 'package:model/extensions/presentation_email_extension.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/action/thread_detail_ui_action.dart';
|
||||
|
||||
extension UpdateCurrentEmailsFlagsExtension on MailboxDashBoardController {
|
||||
void updateEmailFlagByEmailIds(
|
||||
@@ -76,23 +76,25 @@ extension UpdateCurrentEmailsFlagsExtension on MailboxDashBoardController {
|
||||
}
|
||||
|
||||
void updateEmailAnswered(EmailId emailId) {
|
||||
if (selectedEmail.value != null) {
|
||||
final newEmail = selectedEmail.value!.updateKeywords({
|
||||
KeyWordIdentifier.emailAnswered: true,
|
||||
});
|
||||
setSelectedEmail(newEmail);
|
||||
}
|
||||
dispatchThreadDetailUIAction(UpdatedEmailKeywordsAction(
|
||||
emailId,
|
||||
KeyWordIdentifier.emailAnswered,
|
||||
true,
|
||||
));
|
||||
// Reset threadDetailUIAction
|
||||
dispatchThreadDetailUIAction(ThreadDetailUIAction());
|
||||
|
||||
updateEmailFlagByEmailIds([emailId], markAsAnswered: true);
|
||||
}
|
||||
|
||||
void updateEmailForwarded(EmailId emailId) {
|
||||
if (selectedEmail.value != null) {
|
||||
final newEmail = selectedEmail.value!.updateKeywords({
|
||||
KeyWordIdentifier.emailForwarded: true,
|
||||
});
|
||||
setSelectedEmail(newEmail);
|
||||
}
|
||||
dispatchThreadDetailUIAction(UpdatedEmailKeywordsAction(
|
||||
emailId,
|
||||
KeyWordIdentifier.emailForwarded,
|
||||
true,
|
||||
));
|
||||
// Reset threadDetailUIAction
|
||||
dispatchThreadDetailUIAction(ThreadDetailUIAction());
|
||||
|
||||
updateEmailFlagByEmailIds([emailId], markAsForwarded: true);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user