From 38edd509c64be07da1b8c7d63c8e88c30dc1423d Mon Sep 17 00:00:00 2001 From: HuyNguyen Date: Tue, 6 Jun 2023 01:38:33 +0700 Subject: [PATCH] TF-1865: Remove icon svg not use (cherry picked from commit e5f8b11fd2c2b4ae793e74051a1e78ede710b2be) --- assets/images/ic_resend_email.svg | 4 -- .../presentation/resources/image_paths.dart | 1 - .../list_sending_email_extension.dart | 14 ---- .../repository/email_repository_impl.dart | 21 +++--- .../domain/repository/email_repository.dart | 4 +- .../state/store_sending_email_state.dart | 3 +- .../state/update_sending_email_state.dart | 23 +++++++ .../store_sending_email_interactor.dart | 11 ++-- .../update_sending_email_interactor.dart | 28 ++++++++ .../mailbox_dashboard_controller.dart | 66 +++++++++++++------ .../sending_queue_controller.dart | 4 +- model/lib/email/email_action_type.dart | 3 +- model/lib/extensions/email_extension.dart | 4 +- 13 files changed, 124 insertions(+), 62 deletions(-) delete mode 100644 assets/images/ic_resend_email.svg delete mode 100644 lib/features/composer/domain/extensions/list_sending_email_extension.dart create mode 100644 lib/features/email/domain/state/update_sending_email_state.dart create mode 100644 lib/features/email/domain/usecases/update_sending_email_interactor.dart diff --git a/assets/images/ic_resend_email.svg b/assets/images/ic_resend_email.svg deleted file mode 100644 index 8eb540ec1..000000000 --- a/assets/images/ic_resend_email.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/core/lib/presentation/resources/image_paths.dart b/core/lib/presentation/resources/image_paths.dart index c32296f86..afc1fd8c8 100644 --- a/core/lib/presentation/resources/image_paths.dart +++ b/core/lib/presentation/resources/image_paths.dart @@ -185,7 +185,6 @@ class ImagePaths { String get icAvatarPersonal => _getImagePath('ic_avatar_personal.svg'); String get icDialogOfflineMode => _getImagePath('ic_dialog_offline_mode.svg'); String get icMenuMailbox => _getImagePath('ic_menu_mailbox.svg'); - String get icResendEmail => _getImagePath('ic_resend_email.svg'); String _getImagePath(String imageName) { return AssetsPaths.images + imageName; diff --git a/lib/features/composer/domain/extensions/list_sending_email_extension.dart b/lib/features/composer/domain/extensions/list_sending_email_extension.dart deleted file mode 100644 index faec960a4..000000000 --- a/lib/features/composer/domain/extensions/list_sending_email_extension.dart +++ /dev/null @@ -1,14 +0,0 @@ -import 'package:jmap_dart_client/jmap/core/id.dart'; -import 'package:jmap_dart_client/jmap/core/utc_date.dart'; -import 'package:jmap_dart_client/jmap/mail/email/email.dart'; -import 'package:model/model.dart'; -import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart'; - -extension SendingEmailExtension on List { - List toPresentationEmailList() { - return map((sendingEmail) => sendingEmail.email.sendingEmailToPresentationEmail( - emailId: EmailId(Id(sendingEmail.sendingId)), - createAt: UTCDate(sendingEmail.createTime) - )).toList(); - } -} \ No newline at end of file diff --git a/lib/features/email/data/repository/email_repository_impl.dart b/lib/features/email/data/repository/email_repository_impl.dart index caff32e44..6a66c6349 100644 --- a/lib/features/email/data/repository/email_repository_impl.dart +++ b/lib/features/email/data/repository/email_repository_impl.dart @@ -226,16 +226,21 @@ class EmailRepositoryImpl extends EmailRepository { Future storeSendingEmail( AccountId accountId, UserName userName, - SendingEmail sendingEmail, - bool isUpdateSendingEmail - ) async { - if (isUpdateSendingEmail) { - return await emailDataSource[DataSourceType.hiveCache]!.updateSendingEmail(accountId, userName, sendingEmail); - } else { - return await emailDataSource[DataSourceType.hiveCache]!.storeSendingEmail(accountId, userName, sendingEmail); - } + SendingEmail sendingEmail + ) { + return emailDataSource[DataSourceType.hiveCache]!.storeSendingEmail(accountId, userName, sendingEmail); } + @override + Future updateSendingEmail( + AccountId accountId, + UserName userName, + SendingEmail sendingEmail + ) async { + return emailDataSource[DataSourceType.hiveCache]!.updateSendingEmail(accountId, userName, sendingEmail); + } + + @override Future deleteSendingEmail(AccountId accountId, UserName userName, String sendingId) { return emailDataSource[DataSourceType.hiveCache]!.deleteSendingEmail(accountId, userName, sendingId); diff --git a/lib/features/email/domain/repository/email_repository.dart b/lib/features/email/domain/repository/email_repository.dart index c4fd8fab9..003687e03 100644 --- a/lib/features/email/domain/repository/email_repository.dart +++ b/lib/features/email/domain/repository/email_repository.dart @@ -102,7 +102,9 @@ abstract class EmailRepository { Future getOpenedEmail(Session session, AccountId accountId, EmailId emailId); - Future storeSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail, bool isUpdateSendingEmail); + Future storeSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail); + + Future updateSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail); Future deleteSendingEmail(AccountId accountId, UserName userName, String sendingId); } \ No newline at end of file diff --git a/lib/features/email/domain/state/store_sending_email_state.dart b/lib/features/email/domain/state/store_sending_email_state.dart index 88647da59..9a3599907 100644 --- a/lib/features/email/domain/state/store_sending_email_state.dart +++ b/lib/features/email/domain/state/store_sending_email_state.dart @@ -8,9 +8,8 @@ class StoreSendingEmailLoading extends UIState {} class StoreSendingEmailSuccess extends UIState { final SendingEmail sendingEmail; - final bool isUpdateSendingEmail; - StoreSendingEmailSuccess(this.sendingEmail, this.isUpdateSendingEmail); + StoreSendingEmailSuccess(this.sendingEmail); @override List get props => [sendingEmail]; diff --git a/lib/features/email/domain/state/update_sending_email_state.dart b/lib/features/email/domain/state/update_sending_email_state.dart new file mode 100644 index 000000000..73840be70 --- /dev/null +++ b/lib/features/email/domain/state/update_sending_email_state.dart @@ -0,0 +1,23 @@ + +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart'; + +class UpdateSendingEmailLoading extends UIState {} + +class UpdateSendingEmailSuccess extends UIState { + + final SendingEmail sendingEmail; + + UpdateSendingEmailSuccess(this.sendingEmail); + + @override + List get props => [sendingEmail]; +} + +class UpdateSendingEmailFailure extends FeatureFailure { + UpdateSendingEmailFailure(dynamic exception) : super(exception: exception); + + @override + List get props => [exception]; +} \ No newline at end of file diff --git a/lib/features/email/domain/usecases/store_sending_email_interactor.dart b/lib/features/email/domain/usecases/store_sending_email_interactor.dart index 4e293d10f..585b677f3 100644 --- a/lib/features/email/domain/usecases/store_sending_email_interactor.dart +++ b/lib/features/email/domain/usecases/store_sending_email_interactor.dart @@ -5,7 +5,7 @@ import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/user_name.dart'; import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart'; import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart'; -import 'package:tmail_ui_user/features/email/domain/state/store_sending_email_state.dart'; +import 'package:tmail_ui_user/features/email/domain/state/update_sending_email_state.dart'; class StoreSendingEmailInteractor { final EmailRepository _emailRepository; @@ -16,14 +16,13 @@ class StoreSendingEmailInteractor { AccountId accountId, UserName userName, SendingEmail sendingEmail, - bool isUpdateSendingEmail ) async* { try { - yield Right(StoreSendingEmailLoading()); - await _emailRepository.storeSendingEmail(accountId, userName, sendingEmail, isUpdateSendingEmail); - yield Right(StoreSendingEmailSuccess(sendingEmail, isUpdateSendingEmail)); + yield Right(UpdateSendingEmailLoading()); + await _emailRepository.storeSendingEmail(accountId, userName, sendingEmail); + yield Right(UpdateSendingEmailSuccess(sendingEmail)); } catch (e) { - yield Left(StoreSendingEmailFailure(e)); + yield Left(UpdateSendingEmailFailure(e)); } } } \ No newline at end of file diff --git a/lib/features/email/domain/usecases/update_sending_email_interactor.dart b/lib/features/email/domain/usecases/update_sending_email_interactor.dart new file mode 100644 index 000000000..138d6a8c4 --- /dev/null +++ b/lib/features/email/domain/usecases/update_sending_email_interactor.dart @@ -0,0 +1,28 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:dartz/dartz.dart'; +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/user_name.dart'; +import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart'; +import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart'; +import 'package:tmail_ui_user/features/email/domain/state/store_sending_email_state.dart'; + +class UpdateSendingEmailInteractor { + final EmailRepository _emailRepository; + + UpdateSendingEmailInteractor(this._emailRepository); + + Stream> execute( + AccountId accountId, + UserName userName, + SendingEmail sendingEmail, + ) async* { + try { + yield Right(StoreSendingEmailLoading()); + await _emailRepository.updateSendingEmail(accountId, userName, sendingEmail); + yield Right(StoreSendingEmailSuccess(sendingEmail)); + } catch (e) { + yield Left(StoreSendingEmailFailure(e)); + } + } +} \ No newline at end of file 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 a8042bcba..cfe3495e4 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -34,6 +34,7 @@ import 'package:tmail_ui_user/features/composer/domain/state/update_email_drafts import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_interactor.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/sending_email_arguments.dart'; import 'package:tmail_ui_user/features/email/domain/state/store_sending_email_state.dart'; +import 'package:tmail_ui_user/features/email/domain/state/update_sending_email_state.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/store_sending_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'; @@ -332,6 +333,8 @@ class MailboxDashBoardController extends ReloadableController { _handleStoreSendingEmailSuccess(success); } else if (success is GetAllSendingEmailSuccess) { _handleGetAllSendingEmailsSuccess(success); + } else if (success is UpdateSendingEmailSuccess) { + _handleUpdateSendingEmailSuccess(success); } } @@ -1767,7 +1770,7 @@ class MailboxDashBoardController extends ReloadableController { if (currentContext != null && isUpdateSendingEmail == false) { _showActionSendingEmail(session, accountId, emailRequest, mailboxRequest); } else { - _handleStoreSendingEmail(session, accountId, emailRequest, mailboxRequest, isUpdateSendingEmail: isUpdateSendingEmail); + _handleUpdateSendingEmail(session, accountId, emailRequest, mailboxRequest); } } } else { @@ -1785,14 +1788,27 @@ class MailboxDashBoardController extends ReloadableController { AccountId accountId, EmailRequest emailRequest, CreateNewMailboxRequest? mailboxRequest, - {bool? isUpdateSendingEmail = false} ) { final currentEmailId = emailRequest.email.id?.id.value; final sendingEmail = emailRequest.toSendingEmail( emailRequest.email.id != null ? currentEmailId! : _uuid.v1(), mailboxRequest: mailboxRequest ); - _storeSendingEmail(accountId, session.username, sendingEmail, isUpdateSendingEmail: isUpdateSendingEmail); + _storeSendingEmail(accountId, session.username, sendingEmail); + } + + void _handleUpdateSendingEmail( + Session session, + AccountId accountId, + EmailRequest emailRequest, + CreateNewMailboxRequest? mailboxRequest, + ) { + final currentEmailId = emailRequest.email.id?.id.value; + final sendingEmail = emailRequest.toSendingEmail( + emailRequest.email.id != null ? currentEmailId! : _uuid.v1(), + mailboxRequest: mailboxRequest + ); + _updateSendingEmail(accountId, session.username, sendingEmail); } void _showActionSendingEmail( @@ -1844,34 +1860,44 @@ class MailboxDashBoardController extends ReloadableController { AccountId accountId, UserName userName, SendingEmail sendingEmail, - {bool? isUpdateSendingEmail} ) { log('MailboxDashBoardController::_storeSendingEmail():sendingEmail: $sendingEmail'); consumeState(_storeSendingEmailInteractor.execute( accountId, userName, - sendingEmail, - isUpdateSendingEmail ?? false)); + sendingEmail)); + } + + void _updateSendingEmail( + AccountId accountId, + UserName userName, + SendingEmail sendingEmail + ) { + log('MailboxDashBoardController::_storeSendingEmail():sendingEmail: $sendingEmail'); + consumeState(_storeSendingEmailInteractor.execute( + accountId, + userName, + sendingEmail)); } void _handleStoreSendingEmailSuccess(StoreSendingEmailSuccess success) async { - if (success.isUpdateSendingEmail) { - _cancelSendingEmailToSendingQueue(success.sendingEmail); - _addSendingEmailToSendingQueue(success.sendingEmail); - getAllSendingEmails(); - } else { - _addSendingEmailToSendingQueue(success.sendingEmail); - getAllSendingEmails(); - if (currentOverlayContext != null && currentContext != null) { - _appToast.showToastSuccessMessage( - currentOverlayContext!, - AppLocalizations.of(currentContext!).messageHasBeenSavedToTheSendingQueue, - leadingSVGIconColor: Colors.white, - leadingSVGIcon: _imagePaths.icEmail); - } + _addSendingEmailToSendingQueue(success.sendingEmail); + getAllSendingEmails(); + if (currentOverlayContext != null && currentContext != null) { + _appToast.showToastSuccessMessage( + currentOverlayContext!, + AppLocalizations.of(currentContext!).messageHasBeenSavedToTheSendingQueue, + leadingSVGIconColor: Colors.white, + leadingSVGIcon: _imagePaths.icEmail); } } + void _handleUpdateSendingEmailSuccess(UpdateSendingEmailSuccess success) async { + _cancelSendingEmailToSendingQueue(success.sendingEmail); + _addSendingEmailToSendingQueue(success.sendingEmail); + getAllSendingEmails(); + } + void _cancelSendingEmailToSendingQueue(SendingEmail sendingEmail) async { try { await WorkSchedulerController().cancelByUniqueId(sendingEmail.sendingId); diff --git a/lib/features/sending_queue/presentation/sending_queue_controller.dart b/lib/features/sending_queue/presentation/sending_queue_controller.dart index 8b32917b3..38b5795ee 100644 --- a/lib/features/sending_queue/presentation/sending_queue_controller.dart +++ b/lib/features/sending_queue/presentation/sending_queue_controller.dart @@ -112,7 +112,9 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi _deleteSendingEmailAction(context, listSendingEmails); break; case SendingEmailActionType.edit: - _editSendingEmailAction(listSendingEmails.first); + if (dashboardController?.networkConnectionController.isNetworkConnectionAvailable() == false) { + _editSendingEmailAction(listSendingEmails.first); + } break; } } diff --git a/model/lib/email/email_action_type.dart b/model/lib/email/email_action_type.dart index 860db4769..161ee58fb 100644 --- a/model/lib/email/email_action_type.dart +++ b/model/lib/email/email_action_type.dart @@ -17,6 +17,5 @@ enum EmailActionType { selection, moveToSpam, unSpam, - openInNewTab, - resend + openInNewTab } \ No newline at end of file diff --git a/model/lib/extensions/email_extension.dart b/model/lib/extensions/email_extension.dart index eb08ae5ef..254a32e9a 100644 --- a/model/lib/extensions/email_extension.dart +++ b/model/lib/extensions/email_extension.dart @@ -2,7 +2,6 @@ import 'dart:convert'; import 'package:jmap_dart_client/jmap/core/properties/properties.dart'; -import 'package:jmap_dart_client/jmap/core/utc_date.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_body_part.dart'; import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart'; @@ -141,7 +140,6 @@ extension EmailExtension on Email { { SelectMode selectMode = SelectMode.INACTIVE, EmailId? emailId, - UTCDate? createAt, } ) { return PresentationEmail( @@ -152,7 +150,7 @@ extension EmailExtension on Email { hasAttachment: hasAttachment, preview: preview, subject: subject, - sentAt: createAt ?? sentAt, + sentAt: sentAt, from: from, to: to, cc: cc,