diff --git a/lib/features/mailbox/presentation/action/mailbox_ui_action.dart b/lib/features/mailbox/presentation/action/mailbox_ui_action.dart index 2d522840d..ea09bd664 100644 --- a/lib/features/mailbox/presentation/action/mailbox_ui_action.dart +++ b/lib/features/mailbox/presentation/action/mailbox_ui_action.dart @@ -1,4 +1,5 @@ +import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:tmail_ui_user/features/base/action/ui_action.dart'; import 'package:jmap_dart_client/jmap/core/state.dart' as jmap; @@ -25,4 +26,14 @@ class RefreshChangeMailboxAction extends MailboxUIAction { @override List get props => [newState]; +} + +class OpenMailboxAction extends MailboxUIAction { + + final PresentationMailbox presentationMailbox; + + OpenMailboxAction(this.presentationMailbox); + + @override + List get props => [presentationMailbox]; } \ No newline at end of file diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index 7c5fb8d46..6664c884b 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -129,7 +129,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM @override void onReady() { - _openMailboxEventController.stream.throttleTime(const Duration(milliseconds: 800)).listen((event) { + _openMailboxEventController.stream.debounceTime(const Duration(milliseconds: 500)).listen((event) { _handleOpenMailbox(event.buildContext, event.presentationMailbox); }); _initCollapseMailboxCategories(); @@ -251,8 +251,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM ever(mailboxDashBoardController.dashBoardAction, (action) { if (action is ClearSearchEmailAction) { _switchBackToMailboxDefault(); - } else if (action is OpenMailboxAction) { - openMailbox(action.context, action.presentationMailbox); } }); @@ -267,6 +265,11 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM _refreshMailboxChanges(); } mailboxDashBoardController.clearMailboxUIAction(); + } else if (action is OpenMailboxAction) { + if (currentContext != null) { + openMailbox(currentContext!, action.presentationMailbox); + } + mailboxDashBoardController.clearMailboxUIAction(); } }); } diff --git a/lib/features/mailbox_dashboard/presentation/action/dashboard_action.dart b/lib/features/mailbox_dashboard/presentation/action/dashboard_action.dart index 39d6da89a..d8b7cf42c 100644 --- a/lib/features/mailbox_dashboard/presentation/action/dashboard_action.dart +++ b/lib/features/mailbox_dashboard/presentation/action/dashboard_action.dart @@ -2,7 +2,6 @@ import 'package:flutter/cupertino.dart'; import 'package:model/email/email_action_type.dart'; import 'package:model/email/presentation_email.dart'; -import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:tmail_ui_user/features/base/action/ui_action.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart'; import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart'; @@ -126,16 +125,6 @@ class SearchEmailByQueryAction extends DashBoardAction { @override List get props => [navigationRouter]; } -class OpenMailboxAction extends DashBoardAction { - - final BuildContext context; - final PresentationMailbox presentationMailbox; - - OpenMailboxAction(this.context, this.presentationMailbox); - - @override - List get props => [context, presentationMailbox]; -} class SelectDateRangeToAdvancedSearch extends DashBoardAction { 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 81b6780bc..4d6e5e9dd 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -1564,8 +1564,8 @@ class MailboxDashBoardController extends ReloadableController { emailsInCurrentMailbox.value = newEmailList; } - void openMailboxAction(BuildContext context, PresentationMailbox presentationMailbox) { - dispatchAction(OpenMailboxAction(context, presentationMailbox)); + void openMailboxAction(PresentationMailbox presentationMailbox) { + dispatchMailboxUIAction(OpenMailboxAction(presentationMailbox)); } bool get enableSpamReport => spamReportController.enableSpamReport; diff --git a/lib/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart index a9b45c25f..bb190954b 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart @@ -1,6 +1,5 @@ import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; -import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; @@ -107,10 +106,10 @@ class SpamReportController extends BaseController { bool get enableSpamReport => _spamReportState.value == SpamReportState.enabled; - void openMailbox(BuildContext context) { + void openMailbox() { final mailboxDashBoardController = Get.find(); _storeLastTimeDismissedSpamReportedAction(); - mailboxDashBoardController.openMailboxAction(context, _presentationSpamMailbox.value!); + mailboxDashBoardController.openMailboxAction(_presentationSpamMailbox.value!); } void storeSpamReportStateAction(SpamReportState spamReportState) { diff --git a/lib/features/mailbox_dashboard/presentation/widgets/spam_report_banner_web_widget.dart b/lib/features/mailbox_dashboard/presentation/widgets/spam_report_banner_web_widget.dart index 3e1aeb6e8..de70fb87e 100644 --- a/lib/features/mailbox_dashboard/presentation/widgets/spam_report_banner_web_widget.dart +++ b/lib/features/mailbox_dashboard/presentation/widgets/spam_report_banner_web_widget.dart @@ -72,7 +72,7 @@ class SpamReportBannerWebWidget extends StatelessWidget { fontWeight: FontWeight.w400), backgroundColor: AppColor.colorCreateNewIdentityButton, radius: 10, - onTap: () => spamReportController.openMailbox(context), + onTap: spamReportController.openMailbox, ), ), ], diff --git a/lib/features/search/mailbox/presentation/search_mailbox_controller.dart b/lib/features/search/mailbox/presentation/search_mailbox_controller.dart index b799f8926..5a5072783 100644 --- a/lib/features/search/mailbox/presentation/search_mailbox_controller.dart +++ b/lib/features/search/mailbox/presentation/search_mailbox_controller.dart @@ -431,7 +431,7 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa void openMailboxAction(BuildContext context, PresentationMailbox mailbox) { KeyboardUtils.hideKeyboard(context); - dashboardController.openMailboxAction(context, mailbox); + dashboardController.openMailboxAction(mailbox); if (!responsiveUtils.isWebDesktop(context)) { closeSearchView(context); diff --git a/lib/features/thread/presentation/widgets/spam_report_banner_widget.dart b/lib/features/thread/presentation/widgets/spam_report_banner_widget.dart index 26b4afbd8..52a784b0d 100644 --- a/lib/features/thread/presentation/widgets/spam_report_banner_widget.dart +++ b/lib/features/thread/presentation/widgets/spam_report_banner_widget.dart @@ -64,7 +64,7 @@ class SpamReportBannerWidget extends StatelessWidget { context, AppLocalizations.of(context).showDetails, AppColor.primaryColor, - () => spamReportController.openMailbox(context)), + spamReportController.openMailbox), ), const SizedBox( width: 8,