From 376b28cad1206f9880e70f50eefd511d3fb6566b Mon Sep 17 00:00:00 2001 From: dab246 Date: Thu, 15 Sep 2022 22:20:58 +0700 Subject: [PATCH] TF-933 Update new position `EmptyTrashNow` button in mailbox trash on Web Desktop --- .../presentation/action/dashboard_action.dart | 10 ++++ .../mailbox_dashboard_controller.dart | 6 ++ .../mailbox_dashboard_view_web.dart | 56 +++++++++++++++++++ .../presentation/thread_controller.dart | 3 + .../thread/presentation/thread_view.dart | 3 +- 5 files changed, 77 insertions(+), 1 deletion(-) diff --git a/lib/features/mailbox_dashboard/presentation/action/dashboard_action.dart b/lib/features/mailbox_dashboard/presentation/action/dashboard_action.dart index cb95bd48b..11e1b8540 100644 --- a/lib/features/mailbox_dashboard/presentation/action/dashboard_action.dart +++ b/lib/features/mailbox_dashboard/presentation/action/dashboard_action.dart @@ -84,6 +84,16 @@ class StartSearchEmailAction extends DashBoardAction { StartSearchEmailAction(); + @override + List get props => []; +} + +class EmptyTrashAction extends DashBoardAction { + + final BuildContext context; + + EmptyTrashAction(this.context); + @override List get props => []; } \ 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 eee22958b..969f604e0 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -680,6 +680,12 @@ class MailboxDashBoardController extends ReloadableController { dispatchAction(StartSearchEmailAction()); } + bool get isMailboxTrash => selectedMailbox.value?.isTrash == true; + + void emptyTrashAction(BuildContext context) { + dispatchAction(EmptyTrashAction(context)); + } + @override void onClose() { _emailReceiveManager.closeEmailReceiveManagerStream(); diff --git a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart index 81d21bd8c..1fcd01835 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart @@ -98,6 +98,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { children: [ SizedBox(child: MailboxView(), width: responsiveUtils.defaultSizeMenu), Expanded(child: Column(children: [ + _buildEmptyTrashButton(context), _buildVacationNotificationMessage(context), _buildListButtonQuickSearchFilter(context), _buildMarkAsMailboxReadLoading(context), @@ -650,4 +651,59 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { ) ); } + + bool supportEmptyTrash(BuildContext context) { + return controller.isMailboxTrash + && !controller.searchController.isSearchActive() + && responsiveUtils.isWebDesktop(context); + } + + Widget _buildEmptyTrashButton(BuildContext context) { + return Obx(() { + if (supportEmptyTrash(context)) { + return Container( + decoration: BoxDecoration( + borderRadius: const BorderRadius.all(Radius.circular(14)), + border: Border.all(color: AppColor.colorLineLeftEmailView), + color: Colors.white), + margin: const EdgeInsets.only(right: 16, top: 16), + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + child: Row(children: [ + Padding( + padding: const EdgeInsets.only(right: 16), + child: SvgPicture.asset( + imagePaths.icDeleteTrash, + fit: BoxFit.fill)), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(left: 8), + child: Text( + AppLocalizations.of(context).message_delete_all_email_in_trash_button, + style: const TextStyle( + color: AppColor.colorContentEmail, + fontSize: 13, + fontWeight: FontWeight.w500))), + TextButton( + onPressed: () => controller.emptyTrashAction(context), + child: Text( + AppLocalizations.of(context).empty_trash_now, + style: const TextStyle( + fontSize: 17, + fontWeight: FontWeight.w500, + color: AppColor.colorTextButton) + ) + ) + ] + ) + ) + ]), + ); + } else { + return const SizedBox.shrink(); + } + }); + } } \ 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 ce3264284..3ce839b40 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -281,6 +281,9 @@ class ThreadController extends BaseController { } else if (action is StartSearchEmailAction) { _searchEmail(); mailboxDashBoardController.clearDashBoardAction(); + } else if (action is EmptyTrashAction) { + deleteSelectionEmailsPermanently(action.context, DeleteActionType.all); + mailboxDashBoardController.clearDashBoardAction(); } } }); diff --git a/lib/features/thread/presentation/thread_view.dart b/lib/features/thread/presentation/thread_view.dart index 184a573e4..87c2cf408 100644 --- a/lib/features/thread/presentation/thread_view.dart +++ b/lib/features/thread/presentation/thread_view.dart @@ -607,7 +607,8 @@ class ThreadView extends GetWidget with AppLoaderMixin, bool supportEmptyTrash(BuildContext context) { return controller.isMailboxTrash && controller.emailList.isNotEmpty - && !controller.isSearchActive(); + && !controller.isSearchActive() + && !_responsiveUtils.isWebDesktop(context); } Widget _buildEmptyTrashButton(BuildContext context) {