From 1b061d4af93a2338d33e2496e819d75b54ed7744 Mon Sep 17 00:00:00 2001 From: dab246 Date: Mon, 20 Sep 2021 13:01:17 +0700 Subject: [PATCH] TF-79 Mark as star/unstar email in thread view --- .../thread/presentation/thread_bindings.dart | 4 ++++ .../thread/presentation/thread_controller.dart | 18 ++++++++++++++++++ .../widgets/email_tile_builder.dart | 11 +++++++++++ 3 files changed, 33 insertions(+) diff --git a/lib/features/thread/presentation/thread_bindings.dart b/lib/features/thread/presentation/thread_bindings.dart index a8cb87cf0..1b4935183 100644 --- a/lib/features/thread/presentation/thread_bindings.dart +++ b/lib/features/thread/presentation/thread_bindings.dart @@ -7,6 +7,7 @@ import 'package:tmail_ui_user/features/email/data/datasource_impl/email_datasour import 'package:tmail_ui_user/features/email/data/network/email_api.dart'; import 'package:tmail_ui_user/features/email/data/repository/email_repository_impl.dart'; import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart'; +import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_email_important_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_email_read_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/move_to_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/thread/data/datasource/thread_datasource.dart'; @@ -36,6 +37,8 @@ class ThreadBindings extends Bindings { Get.lazyPut(() => MarkAsMultipleEmailReadInteractor(Get.find())); Get.lazyPut(() => MoveToMailboxInteractor(Get.find())); Get.lazyPut(() => MoveMultipleEmailToMailboxInteractor(Get.find())); + Get.lazyPut(() => MarkAsMultipleEmailReadInteractor(Get.find())); + Get.lazyPut(() => MarkAsEmailImportantInteractor(Get.find())); Get.put(ThreadController( Get.find(), Get.find(), @@ -43,6 +46,7 @@ class ThreadBindings extends Bindings { Get.find(), Get.find(), Get.find(), + Get.find(), )); } } \ No newline at end of file diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index eb0d2471c..fed821fdd 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -20,6 +20,7 @@ import 'package:tmail_ui_user/features/email/domain/model/move_request.dart'; import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_important_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/move_to_mailbox_state.dart'; +import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_email_important_interactor.dart'; import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart'; import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart'; @@ -43,6 +44,7 @@ class ThreadController extends BaseController { final ResponsiveUtils responsiveUtils; final ScrollController listEmailController; final MoveMultipleEmailToMailboxInteractor _moveMultipleEmailToMailboxInteractor; + final MarkAsEmailImportantInteractor _markAsEmailImportantInteractor; final _properties = Properties({ 'id', 'subject', 'from', 'to', 'cc', 'bcc', 'keywords', 'receivedAt', @@ -64,6 +66,7 @@ class ThreadController extends BaseController { this._markAsMultipleEmailReadInteractor, this._appToast, this._moveMultipleEmailToMailboxInteractor, + this._markAsEmailImportantInteractor, ); @override @@ -142,6 +145,8 @@ class ThreadController extends BaseController { } else if (success is MoveMultipleEmailToMailboxAllSuccess || success is MoveMultipleEmailToMailboxHasSomeEmailFailure) { _moveSelectedMultipleEmailToMailboxSuccess(success); + } else if (success is MarkAsEmailImportantSuccess) { + _markAsEmailImportantSuccess(success); } } ); @@ -437,6 +442,19 @@ class ThreadController extends BaseController { } } + void markAsEmailImportant(PresentationEmail presentationEmail) { + final accountId = mailboxDashBoardController.accountId.value; + final mailboxCurrent = mailboxDashBoardController.selectedMailbox.value; + if (accountId != null && mailboxCurrent != null) { + final importantAction = presentationEmail.isFlaggedEmail() ? ImportantAction.unMarkStar : ImportantAction.markStar; + consumeState(_markAsEmailImportantInteractor.execute(accountId, presentationEmail.id, importantAction)); + } + } + + void _markAsEmailImportantSuccess(Success success) { + _refreshListEmail(); + } + bool canComposeEmail() => mailboxDashBoardController.sessionCurrent != null && mailboxDashBoardController.userProfile.value != null && mailboxDashBoardController.mapMailboxId.containsKey(PresentationMailbox.roleOutbox); diff --git a/lib/features/thread/presentation/widgets/email_tile_builder.dart b/lib/features/thread/presentation/widgets/email_tile_builder.dart index 5d982639b..6bebac4fc 100644 --- a/lib/features/thread/presentation/widgets/email_tile_builder.dart +++ b/lib/features/thread/presentation/widgets/email_tile_builder.dart @@ -8,6 +8,7 @@ import 'package:model/model.dart'; typedef OnOpenEmailActionClick = void Function(PresentationEmail selectedEmail); typedef OnSelectEmailActionClick = void Function(PresentationEmail selectedEmail); +typedef OnMarkAsImportantActionClick = void Function(PresentationEmail selectedEmail); class EmailTileBuilder { @@ -20,6 +21,7 @@ class EmailTileBuilder { OnOpenEmailActionClick? _onOpenEmailActionClick; OnSelectEmailActionClick? _onSelectEmailActionClick; + OnMarkAsImportantActionClick? _onMarkAsImportantActionClick; EmailTileBuilder( this._context, @@ -38,6 +40,10 @@ class EmailTileBuilder { _onSelectEmailActionClick = onSelectEmailActionClick; } + void addOnMarkAsImportantActionClick(OnMarkAsImportantActionClick onMarkAsImportantActionClick) { + _onMarkAsImportantActionClick = onMarkAsImportantActionClick; + } + Widget build() { return Theme( data: ThemeData( @@ -125,6 +131,11 @@ class EmailTileBuilder { SizedBox(width: 2), ButtonBuilder(_presentationEmail.isFlaggedEmail() ? _imagePaths.icFlagged : _imagePaths.icFlag) .padding(2) + .onPressActionClick(() { + if (_onMarkAsImportantActionClick != null) { + _onMarkAsImportantActionClick!(_presentationEmail); + } + }) .build(), ], )