TF-1698 Fix system not redirect correct url when user double click many times to view email in mailbox

(cherry picked from commit 1f205b2d89d6db3b84193e8bd3941a3e310f2a6a)
This commit is contained in:
dab246
2023-04-10 11:44:18 +07:00
committed by Dat Vu
parent 5ab379bfb7
commit c190d6bc06
8 changed files with 24 additions and 22 deletions
@@ -1,4 +1,5 @@
import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:tmail_ui_user/features/base/action/ui_action.dart'; import 'package:tmail_ui_user/features/base/action/ui_action.dart';
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap; import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
@@ -26,3 +27,13 @@ class RefreshChangeMailboxAction extends MailboxUIAction {
@override @override
List<Object?> get props => [newState]; List<Object?> get props => [newState];
} }
class OpenMailboxAction extends MailboxUIAction {
final PresentationMailbox presentationMailbox;
OpenMailboxAction(this.presentationMailbox);
@override
List<Object?> get props => [presentationMailbox];
}
@@ -129,7 +129,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
@override @override
void onReady() { 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); _handleOpenMailbox(event.buildContext, event.presentationMailbox);
}); });
_initCollapseMailboxCategories(); _initCollapseMailboxCategories();
@@ -251,8 +251,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
ever(mailboxDashBoardController.dashBoardAction, (action) { ever(mailboxDashBoardController.dashBoardAction, (action) {
if (action is ClearSearchEmailAction) { if (action is ClearSearchEmailAction) {
_switchBackToMailboxDefault(); _switchBackToMailboxDefault();
} else if (action is OpenMailboxAction) {
openMailbox(action.context, action.presentationMailbox);
} }
}); });
@@ -267,6 +265,11 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
_refreshMailboxChanges(); _refreshMailboxChanges();
} }
mailboxDashBoardController.clearMailboxUIAction(); mailboxDashBoardController.clearMailboxUIAction();
} else if (action is OpenMailboxAction) {
if (currentContext != null) {
openMailbox(currentContext!, action.presentationMailbox);
}
mailboxDashBoardController.clearMailboxUIAction();
} }
}); });
} }
@@ -2,7 +2,6 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:model/email/email_action_type.dart'; import 'package:model/email/email_action_type.dart';
import 'package:model/email/presentation_email.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/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/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart';
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart'; import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
@@ -126,16 +125,6 @@ class SearchEmailByQueryAction extends DashBoardAction {
@override @override
List<Object?> get props => [navigationRouter]; List<Object?> get props => [navigationRouter];
} }
class OpenMailboxAction extends DashBoardAction {
final BuildContext context;
final PresentationMailbox presentationMailbox;
OpenMailboxAction(this.context, this.presentationMailbox);
@override
List<Object?> get props => [context, presentationMailbox];
}
class SelectDateRangeToAdvancedSearch extends DashBoardAction { class SelectDateRangeToAdvancedSearch extends DashBoardAction {
@@ -1564,8 +1564,8 @@ class MailboxDashBoardController extends ReloadableController {
emailsInCurrentMailbox.value = newEmailList; emailsInCurrentMailbox.value = newEmailList;
} }
void openMailboxAction(BuildContext context, PresentationMailbox presentationMailbox) { void openMailboxAction(PresentationMailbox presentationMailbox) {
dispatchAction(OpenMailboxAction(context, presentationMailbox)); dispatchMailboxUIAction(OpenMailboxAction(presentationMailbox));
} }
bool get enableSpamReport => spamReportController.enableSpamReport; bool get enableSpamReport => spamReportController.enableSpamReport;
@@ -1,6 +1,5 @@
import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart'; import 'package:core/presentation/state/success.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/session/session.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; bool get enableSpamReport => _spamReportState.value == SpamReportState.enabled;
void openMailbox(BuildContext context) { void openMailbox() {
final mailboxDashBoardController = Get.find<MailboxDashBoardController>(); final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
_storeLastTimeDismissedSpamReportedAction(); _storeLastTimeDismissedSpamReportedAction();
mailboxDashBoardController.openMailboxAction(context, _presentationSpamMailbox.value!); mailboxDashBoardController.openMailboxAction(_presentationSpamMailbox.value!);
} }
void storeSpamReportStateAction(SpamReportState spamReportState) { void storeSpamReportStateAction(SpamReportState spamReportState) {
@@ -72,7 +72,7 @@ class SpamReportBannerWebWidget extends StatelessWidget {
fontWeight: FontWeight.w400), fontWeight: FontWeight.w400),
backgroundColor: AppColor.colorCreateNewIdentityButton, backgroundColor: AppColor.colorCreateNewIdentityButton,
radius: 10, radius: 10,
onTap: () => spamReportController.openMailbox(context), onTap: spamReportController.openMailbox,
), ),
), ),
], ],
@@ -431,7 +431,7 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa
void openMailboxAction(BuildContext context, PresentationMailbox mailbox) { void openMailboxAction(BuildContext context, PresentationMailbox mailbox) {
KeyboardUtils.hideKeyboard(context); KeyboardUtils.hideKeyboard(context);
dashboardController.openMailboxAction(context, mailbox); dashboardController.openMailboxAction(mailbox);
if (!responsiveUtils.isWebDesktop(context)) { if (!responsiveUtils.isWebDesktop(context)) {
closeSearchView(context); closeSearchView(context);
@@ -64,7 +64,7 @@ class SpamReportBannerWidget extends StatelessWidget {
context, context,
AppLocalizations.of(context).showDetails, AppLocalizations.of(context).showDetails,
AppColor.primaryColor, AppColor.primaryColor,
() => spamReportController.openMailbox(context)), spamReportController.openMailbox),
), ),
const SizedBox( const SizedBox(
width: 8, width: 8,