From 90cad03f563f2216055be70427aa6d3dd0208279 Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 25 Mar 2022 11:23:22 +0700 Subject: [PATCH] TF-372 Fix after deleted a mailbox, tmail does not refresh and update the result --- .../base/base_mailbox_controller.dart | 5 +++ .../state/delete_multiple_mailbox_state.dart | 7 +++- .../delete_multiple_mailbox_interactor.dart | 4 +- .../presentation/mailbox_bindings.dart | 5 +-- .../presentation/mailbox_controller.dart | 38 +++++++++++-------- .../mailbox/presentation/mailbox_view.dart | 1 + 6 files changed, 37 insertions(+), 23 deletions(-) diff --git a/lib/features/base/base_mailbox_controller.dart b/lib/features/base/base_mailbox_controller.dart index 4883fd759..a89ad6dba 100644 --- a/lib/features/base/base_mailbox_controller.dart +++ b/lib/features/base/base_mailbox_controller.dart @@ -71,4 +71,9 @@ abstract class BaseMailboxController extends BaseController { } return mailboxNodePath; } + + MailboxNode? findMailboxNodeByRole(Role role) { + final mailboxNode = defaultMailboxTree.value.findNode((node) => node.item.role == role); + return mailboxNode; + } } diff --git a/lib/features/mailbox/domain/state/delete_multiple_mailbox_state.dart b/lib/features/mailbox/domain/state/delete_multiple_mailbox_state.dart index 70a20dd36..129890176 100644 --- a/lib/features/mailbox/domain/state/delete_multiple_mailbox_state.dart +++ b/lib/features/mailbox/domain/state/delete_multiple_mailbox_state.dart @@ -1,11 +1,14 @@ import 'package:core/core.dart'; +import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; class DeleteMultipleMailboxSuccess extends UIState { - DeleteMultipleMailboxSuccess(); + final MailboxId mailboxIdDeleted; + + DeleteMultipleMailboxSuccess(this.mailboxIdDeleted); @override - List get props => []; + List get props => [mailboxIdDeleted]; } class DeleteMultipleMailboxFailure extends FeatureFailure { diff --git a/lib/features/mailbox/domain/usecases/delete_multiple_mailbox_interactor.dart b/lib/features/mailbox/domain/usecases/delete_multiple_mailbox_interactor.dart index c5726241d..0088f799c 100644 --- a/lib/features/mailbox/domain/usecases/delete_multiple_mailbox_interactor.dart +++ b/lib/features/mailbox/domain/usecases/delete_multiple_mailbox_interactor.dart @@ -11,11 +11,11 @@ class DeleteMultipleMailboxInteractor { DeleteMultipleMailboxInteractor(this.mailboxRepository); - Stream> execute(Session session, AccountId accountId, List mailboxIds) async* { + Stream> execute(Session session, AccountId accountId, List mailboxIds, MailboxId mailboxIdDeleted) async* { try { final result = await mailboxRepository.deleteMultipleMailbox(session, accountId, mailboxIds); if (result) { - yield Right(DeleteMultipleMailboxSuccess()); + yield Right(DeleteMultipleMailboxSuccess(mailboxIdDeleted)); } else { yield Left(DeleteMultipleMailboxFailure(null)); } diff --git a/lib/features/mailbox/presentation/mailbox_bindings.dart b/lib/features/mailbox/presentation/mailbox_bindings.dart index 43473a5ea..c98d74324 100644 --- a/lib/features/mailbox/presentation/mailbox_bindings.dart +++ b/lib/features/mailbox/presentation/mailbox_bindings.dart @@ -48,11 +48,8 @@ class MailboxBindings extends BaseBindings { Get.find(), Get.find(), Get.find(), - Get.find(), Get.find(), - Get.find(), - Get.find(), - Get.find(), + Get.find(), )); } diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index 41505e946..667b9d886 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -57,6 +57,10 @@ import 'package:uuid/uuid.dart'; class MailboxController extends BaseMailboxController { final mailboxDashBoardController = Get.find(); + final _appToast = Get.find(); + final _imagePaths = Get.find(); + final _responsiveUtils = Get.find(); + final GetAllMailboxInteractor _getAllMailboxInteractor; final RefreshAllMailboxInteractor _refreshAllMailboxInteractor; final CreateNewMailboxInteractor _createNewMailboxInteractor; @@ -65,9 +69,6 @@ class MailboxController extends BaseMailboxController { final VerifyNameInteractor _verifyNameInteractor; final RenameMailboxInteractor _renameMailboxInteractor; final Uuid _uuid; - final AppToast _appToast; - final ImagePaths _imagePaths; - final ResponsiveUtils responsiveUtils; final listMailboxSearched = [].obs; final searchState = SearchState.initial().obs; @@ -75,11 +76,11 @@ class MailboxController extends BaseMailboxController { final currentSelectMode = SelectMode.INACTIVE.obs; final _openMailboxEventController = StreamController(); + final searchInputController = TextEditingController(); + final searchFocus = FocusNode(); + final mailboxListScrollController = ScrollController(); List allMailboxes = []; - TextEditingController searchInputController = TextEditingController(); - FocusNode searchFocus = FocusNode(); - jmapState.State? currentMailboxState; MailboxController( @@ -90,11 +91,8 @@ class MailboxController extends BaseMailboxController { this._deleteMultipleMailboxInteractor, this._verifyNameInteractor, this._renameMailboxInteractor, - treeBuilder, this._uuid, - this._appToast, - this._imagePaths, - this.responsiveUtils, + treeBuilder, ) : super(treeBuilder); @override @@ -266,7 +264,7 @@ class MailboxController extends BaseMailboxController { mailboxDashBoardController.disableSearch(); } - if (!responsiveUtils.isDesktop(context) && !responsiveUtils.isTabletLarge(context)) { + if (!_responsiveUtils.isDesktop(context) && !_responsiveUtils.isTabletLarge(context)) { mailboxDashBoardController.closeDrawer(); } else { mailboxDashBoardController.dispatchRoute(AppRoutes.THREAD); @@ -450,7 +448,7 @@ class MailboxController extends BaseMailboxController { } void _openConfirmationDialogDeleteMailboxAction(BuildContext context, PresentationMailbox presentationMailbox) { - if (responsiveUtils.isMobile(context) || responsiveUtils.isMobileDevice(context)) { + if (_responsiveUtils.isMobile(context) || _responsiveUtils.isMobileDevice(context)) { (ConfirmationDialogActionSheetBuilder(context) ..messageText(AppLocalizations.of(context).message_confirmation_dialog_delete_mailbox(presentationMailbox.name?.name ?? '')) ..onCancelAction(AppLocalizations.of(context).cancel, () => popBack()) @@ -487,7 +485,8 @@ class MailboxController extends BaseMailboxController { .toList(); final descendantIdsReversed = descendantIds.reversed.toList(); - consumeState(_deleteMultipleMailboxInteractor.execute(session, accountId, descendantIdsReversed)); + consumeState(_deleteMultipleMailboxInteractor.execute( + session, accountId, descendantIdsReversed, presentationMailbox.id)); } else { _deleteMailboxFailure(DeleteMultipleMailboxFailure(null)); } @@ -504,9 +503,18 @@ class MailboxController extends BaseMailboxController { message: AppLocalizations.of(currentContext!).delete_mailboxes_successfully, icon: _imagePaths.icSelected); } + if (success.mailboxIdDeleted == mailboxDashBoardController.selectedMailbox.value?.id) { + _switchBackToMailboxDefault(); + } refreshMailboxChanges(); } + void _switchBackToMailboxDefault() { + final inboxMailbox = findMailboxNodeByRole(PresentationMailbox.roleInbox); + mailboxDashBoardController.setSelectedMailbox(inboxMailbox?.item); + mailboxListScrollController.animateTo(0, duration: Duration(milliseconds: 500), curve: Curves.fastOutSlowIn); + } + void _deleteMailboxFailure(DeleteMultipleMailboxFailure failure) { if (currentOverlayContext != null && currentContext != null) { _appToast.showToastWithIcon( @@ -517,12 +525,12 @@ class MailboxController extends BaseMailboxController { } void _openDialogRenameMailboxAction(BuildContext context, PresentationMailbox presentationMailbox) { - if (responsiveUtils.isMobile(context) || responsiveUtils.isMobileDevice(context)) { + if (_responsiveUtils.isMobile(context) || _responsiveUtils.isMobileDevice(context)) { (EditTextModalSheetBuilder() ..key(Key('rename_mailbox_modal_sheet')) ..title(AppLocalizations.of(context).rename_mailbox) ..cancelText(AppLocalizations.of(context).cancel) - ..boxConstraints(responsiveUtils.isMobileDevice(context) && responsiveUtils.isLandscape(context) + ..boxConstraints(_responsiveUtils.isMobileDevice(context) && _responsiveUtils.isLandscape(context) ? BoxConstraints(maxWidth: 400) : null) ..onConfirmAction(AppLocalizations.of(context).rename, diff --git a/lib/features/mailbox/presentation/mailbox_view.dart b/lib/features/mailbox/presentation/mailbox_view.dart index f300fdecc..ba257a1c7 100644 --- a/lib/features/mailbox/presentation/mailbox_view.dart +++ b/lib/features/mailbox/presentation/mailbox_view.dart @@ -226,6 +226,7 @@ class MailboxView extends GetWidget { Widget _buildListMailbox(BuildContext context) { return ListView( + controller: controller.mailboxListScrollController, key: PageStorageKey('mailbox_list'), primary: false, shrinkWrap: true,