From fe05df3477eeb1d9977bea1e21d3896a5926e53c Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 15 Mar 2023 15:06:59 +0700 Subject: [PATCH] TF-1594 Move `SendEmailInteractor` to `MailboxDashboardController` to handle async send email (cherry picked from commit 63aec51a6ea6e827ea924e91a13ec78d7f48edf7) --- core/lib/presentation/utils/app_toast.dart | 21 +++++---- .../presentation/composer_bindings.dart | 6 --- .../presentation/composer_controller.dart | 45 ++++++++----------- .../bindings/mailbox_dashboard_bindings.dart | 6 +++ .../mailbox_dashboard_controller.dart | 18 +++++++- 5 files changed, 54 insertions(+), 42 deletions(-) diff --git a/core/lib/presentation/utils/app_toast.dart b/core/lib/presentation/utils/app_toast.dart index 148eaca42..3d331d8e2 100644 --- a/core/lib/presentation/utils/app_toast.dart +++ b/core/lib/presentation/utils/app_toast.dart @@ -145,11 +145,19 @@ class AppToast { ); } - void showToastWithIcon(BuildContext context, { - String? message, String? icon, Color? bgColor, Color? iconColor, - Color? textColor, double? radius, EdgeInsets? padding, - TextStyle? textStyle, double? widthToast, Duration? toastLength, - Duration? delayTime}) async { + void showToastWithIcon( + BuildContext context, { + String? message, + String? icon, + Color? bgColor, + Color? iconColor, + Color? textColor, + double? radius, + EdgeInsets? padding, + TextStyle? textStyle, + double? widthToast, + Duration? toastLength + }) async { double sizeWidth = context.width > 360 ? 360 : context.width - 40; final toast = Material( color: bgColor ?? Colors.white, @@ -182,9 +190,6 @@ class AppToast { ), ); fToast.init(context); - if (delayTime != null) { - await Future.delayed(delayTime); - } fToast.showToast( child: toast, gravity: ToastGravity.BOTTOM, diff --git a/lib/features/composer/presentation/composer_bindings.dart b/lib/features/composer/presentation/composer_bindings.dart index e6640c54a..00cf487b3 100644 --- a/lib/features/composer/presentation/composer_bindings.dart +++ b/lib/features/composer/presentation/composer_bindings.dart @@ -15,7 +15,6 @@ import 'package:tmail_ui_user/features/composer/domain/usecases/download_image_a import 'package:tmail_ui_user/features/composer/domain/usecases/save_email_as_drafts_interactor.dart'; import 'package:tmail_ui_user/features/composer/domain/usecases/update_email_drafts_interactor.dart'; import 'package:tmail_ui_user/features/composer/domain/usecases/upload_attachment_interactor.dart'; -import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_interactor.dart'; import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart'; import 'package:tmail_ui_user/features/composer/presentation/controller/rich_text_web_controller.dart'; import 'package:tmail_ui_user/features/composer/presentation/controller/rich_text_mobile_tablet_controller.dart'; @@ -135,10 +134,6 @@ class ComposerBindings extends BaseBindings { void bindingsInteractor() { Get.lazyPut(() => LocalFilePickerInteractor()); Get.lazyPut(() => UploadAttachmentInteractor(Get.find())); - Get.lazyPut(() => SendEmailInteractor( - Get.find(), - Get.find() - )); Get.lazyPut(() => SaveEmailAsDraftsInteractor( Get.find(), Get.find())); @@ -159,7 +154,6 @@ class ComposerBindings extends BaseBindings { Get.lazyPut(() => UploadController(Get.find())); Get.lazyPut(() => RichTextWebController()); Get.lazyPut(() => ComposerController( - Get.find(), Get.find(), Get.find(), Get.find(), diff --git a/lib/features/composer/presentation/composer_controller.dart b/lib/features/composer/presentation/composer_controller.dart index 49b2fec18..534bd706f 100644 --- a/lib/features/composer/presentation/composer_controller.dart +++ b/lib/features/composer/presentation/composer_controller.dart @@ -39,7 +39,6 @@ import 'package:tmail_ui_user/features/composer/domain/usecases/download_image_a import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete_interactor.dart'; import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete_with_device_contact_interactor.dart'; import 'package:tmail_ui_user/features/composer/domain/usecases/save_email_as_drafts_interactor.dart'; -import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_interactor.dart'; import 'package:tmail_ui_user/features/composer/domain/usecases/update_email_drafts_interactor.dart'; import 'package:tmail_ui_user/features/composer/presentation/controller/rich_text_web_controller.dart'; import 'package:tmail_ui_user/features/composer/presentation/controller/rich_text_mobile_tablet_controller.dart'; @@ -91,7 +90,6 @@ class ComposerController extends BaseController { final emailContentsViewState = Rx>(Right(UIState.idle)); final hasRequestReadReceipt = false.obs; - final SendEmailInteractor _sendEmailInteractor; final LocalFilePickerInteractor _localFilePickerInteractor; final DeviceInfoPlugin _deviceInfoPlugin; final SaveEmailAsDraftsInteractor _saveEmailAsDraftsInteractor; @@ -190,7 +188,6 @@ class ComposerController extends BaseController { } ComposerController( - this._sendEmailInteractor, this._deviceInfoPlugin, this._localFilePickerInteractor, this._saveEmailAsDraftsInteractor, @@ -764,37 +761,31 @@ class ComposerController extends BaseController { final outboxMailboxId = mailboxDashBoardController.outboxMailbox?.id; final userProfile = mailboxDashBoardController.userProfile.value; - if (kIsWeb) { - closeComposerWeb(); - } else { - popBack(); - } - if (arguments != null && accountId != null && userProfile != null) { final email = await _generateEmail(context, userProfile, outboxMailboxId: outboxMailboxId); final submissionCreateId = Id(_uuid.v1()); - - mailboxDashBoardController.consumeState( - _sendEmailInteractor.execute( - accountId, - EmailRequest( - email, - submissionCreateId, - sentMailboxId: sentMailboxId, - identity: identitySelected.value, - emailIdDestroyed: arguments.emailActionType == EmailActionType.edit - ? arguments.presentationEmail?.id - : null), - mailboxRequest: outboxMailboxId == null - ? CreateNewMailboxRequest( - Id(_uuid.v1()), - PresentationMailbox.outboxMailboxName) - : null - ) + final emailRequest = EmailRequest( + email, + submissionCreateId, + sentMailboxId: sentMailboxId, + identity: identitySelected.value, + emailIdDestroyed: arguments.emailActionType == EmailActionType.edit + ? arguments.presentationEmail?.id + : null ); + final mailboxRequest = outboxMailboxId == null + ? CreateNewMailboxRequest(Id(_uuid.v1()), PresentationMailbox.outboxMailboxName) + : null; + mailboxDashBoardController.handleSendEmailAction(accountId, emailRequest, mailboxRequest); uploadController.clearInlineFileUploaded(); } + + if (BuildUtils.isWeb) { + closeComposerWeb(); + } else { + popBack(); + } } void _checkContactPermission() async { diff --git a/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart b/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart index e2418b1e4..c9137a863 100644 --- a/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart +++ b/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart @@ -7,6 +7,7 @@ import 'package:tmail_ui_user/features/caching/recent_search_cache_client.dart'; import 'package:tmail_ui_user/features/caching/state_cache_client.dart'; import 'package:tmail_ui_user/features/composer/data/repository/contact_repository_impl.dart'; import 'package:tmail_ui_user/features/composer/domain/repository/contact_repository.dart'; +import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_interactor.dart'; import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart'; import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/email_datasource_impl.dart'; @@ -157,6 +158,7 @@ class MailboxDashBoardBindings extends BaseBindings { Get.find(), Get.find(), Get.find(), + Get.find() )); Get.put(AdvancedFilterController()); } @@ -291,6 +293,10 @@ class MailboxDashBoardBindings extends BaseBindings { Get.find())); Get.lazyPut(() => GetSpamReportStateInteractor( Get.find())); + Get.lazyPut(() => SendEmailInteractor( + Get.find(), + Get.find() + )); } @override 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 549861306..a5ed2b914 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -24,9 +24,11 @@ import 'package:rxdart/transformers.dart'; import 'package:tmail_ui_user/features/base/action/ui_action.dart'; import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart'; import 'package:tmail_ui_user/features/composer/domain/exceptions/set_email_method_exception.dart'; +import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart'; import 'package:tmail_ui_user/features/composer/domain/state/save_email_as_drafts_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/usecases/send_email_interactor.dart'; import 'package:tmail_ui_user/features/composer/presentation/composer_bindings.dart'; import 'package:tmail_ui_user/features/composer/presentation/extensions/email_action_type_extension.dart'; import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart'; @@ -45,6 +47,7 @@ import 'package:tmail_ui_user/features/email/presentation/model/composer_argumen import 'package:tmail_ui_user/features/login/domain/usecases/delete_authority_oidc_interactor.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/get_authenticated_account_interactor.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/update_authentication_account_interactor.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/mark_as_mailbox_read_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/usecases/mark_as_mailbox_read_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/action/mailbox_ui_action.dart'; @@ -134,6 +137,7 @@ class MailboxDashBoardController extends ReloadableController { final EmptyTrashFolderInteractor _emptyTrashFolderInteractor; final DeleteMultipleEmailsPermanentlyInteractor _deleteMultipleEmailsPermanentlyInteractor; final GetEmailByIdInteractor _getEmailByIdInteractor; + final SendEmailInteractor _sendEmailInteractor; GetAllVacationInteractor? _getAllVacationInteractor; UpdateVacationInteractor? _updateVacationInteractor; @@ -200,6 +204,7 @@ class MailboxDashBoardController extends ReloadableController { this._emptyTrashFolderInteractor, this._deleteMultipleEmailsPermanentlyInteractor, this._getEmailByIdInteractor, + this._sendEmailInteractor ) : super( getAuthenticatedAccountInteractor, updateAuthenticationAccountInteractor @@ -261,7 +266,6 @@ class MailboxDashBoardController extends ReloadableController { currentOverlayContext!, message: AppLocalizations.of(currentContext!).your_email_being_sent, icon: _imagePaths.icSendToast, - delayTime: const Duration(seconds: 1), ); } } else if (success is GetEmailStateToRefreshSuccess) { @@ -1670,6 +1674,18 @@ class MailboxDashBoardController extends ReloadableController { clearState(); } + + void handleSendEmailAction( + AccountId accountId, + EmailRequest emailRequest, + CreateNewMailboxRequest? mailboxRequest + ) { + consumeState(_sendEmailInteractor.execute( + accountId, + emailRequest, + mailboxRequest: mailboxRequest + )); + } @override void onClose() {