TF-372 Fix after deleted a mailbox, tmail does not refresh and update the result
This commit is contained in:
@@ -71,4 +71,9 @@ abstract class BaseMailboxController extends BaseController {
|
|||||||
}
|
}
|
||||||
return mailboxNodePath;
|
return mailboxNodePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MailboxNode? findMailboxNodeByRole(Role role) {
|
||||||
|
final mailboxNode = defaultMailboxTree.value.findNode((node) => node.item.role == role);
|
||||||
|
return mailboxNode;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
import 'package:core/core.dart';
|
import 'package:core/core.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||||
|
|
||||||
class DeleteMultipleMailboxSuccess extends UIState {
|
class DeleteMultipleMailboxSuccess extends UIState {
|
||||||
|
|
||||||
DeleteMultipleMailboxSuccess();
|
final MailboxId mailboxIdDeleted;
|
||||||
|
|
||||||
|
DeleteMultipleMailboxSuccess(this.mailboxIdDeleted);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [];
|
List<Object?> get props => [mailboxIdDeleted];
|
||||||
}
|
}
|
||||||
|
|
||||||
class DeleteMultipleMailboxFailure extends FeatureFailure {
|
class DeleteMultipleMailboxFailure extends FeatureFailure {
|
||||||
|
|||||||
@@ -11,11 +11,11 @@ class DeleteMultipleMailboxInteractor {
|
|||||||
|
|
||||||
DeleteMultipleMailboxInteractor(this.mailboxRepository);
|
DeleteMultipleMailboxInteractor(this.mailboxRepository);
|
||||||
|
|
||||||
Stream<Either<Failure, Success>> execute(Session session, AccountId accountId, List<MailboxId> mailboxIds) async* {
|
Stream<Either<Failure, Success>> execute(Session session, AccountId accountId, List<MailboxId> mailboxIds, MailboxId mailboxIdDeleted) async* {
|
||||||
try {
|
try {
|
||||||
final result = await mailboxRepository.deleteMultipleMailbox(session, accountId, mailboxIds);
|
final result = await mailboxRepository.deleteMultipleMailbox(session, accountId, mailboxIds);
|
||||||
if (result) {
|
if (result) {
|
||||||
yield Right<Failure, Success>(DeleteMultipleMailboxSuccess());
|
yield Right<Failure, Success>(DeleteMultipleMailboxSuccess(mailboxIdDeleted));
|
||||||
} else {
|
} else {
|
||||||
yield Left<Failure, Success>(DeleteMultipleMailboxFailure(null));
|
yield Left<Failure, Success>(DeleteMultipleMailboxFailure(null));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,11 +48,8 @@ class MailboxBindings extends BaseBindings {
|
|||||||
Get.find<DeleteMultipleMailboxInteractor>(),
|
Get.find<DeleteMultipleMailboxInteractor>(),
|
||||||
Get.find<VerifyNameInteractor>(),
|
Get.find<VerifyNameInteractor>(),
|
||||||
Get.find<RenameMailboxInteractor>(),
|
Get.find<RenameMailboxInteractor>(),
|
||||||
Get.find<TreeBuilder>(),
|
|
||||||
Get.find<Uuid>(),
|
Get.find<Uuid>(),
|
||||||
Get.find<AppToast>(),
|
Get.find<TreeBuilder>(),
|
||||||
Get.find<ImagePaths>(),
|
|
||||||
Get.find<ResponsiveUtils>(),
|
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -57,6 +57,10 @@ import 'package:uuid/uuid.dart';
|
|||||||
class MailboxController extends BaseMailboxController {
|
class MailboxController extends BaseMailboxController {
|
||||||
|
|
||||||
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
|
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
|
||||||
|
final _appToast = Get.find<AppToast>();
|
||||||
|
final _imagePaths = Get.find<ImagePaths>();
|
||||||
|
final _responsiveUtils = Get.find<ResponsiveUtils>();
|
||||||
|
|
||||||
final GetAllMailboxInteractor _getAllMailboxInteractor;
|
final GetAllMailboxInteractor _getAllMailboxInteractor;
|
||||||
final RefreshAllMailboxInteractor _refreshAllMailboxInteractor;
|
final RefreshAllMailboxInteractor _refreshAllMailboxInteractor;
|
||||||
final CreateNewMailboxInteractor _createNewMailboxInteractor;
|
final CreateNewMailboxInteractor _createNewMailboxInteractor;
|
||||||
@@ -65,9 +69,6 @@ class MailboxController extends BaseMailboxController {
|
|||||||
final VerifyNameInteractor _verifyNameInteractor;
|
final VerifyNameInteractor _verifyNameInteractor;
|
||||||
final RenameMailboxInteractor _renameMailboxInteractor;
|
final RenameMailboxInteractor _renameMailboxInteractor;
|
||||||
final Uuid _uuid;
|
final Uuid _uuid;
|
||||||
final AppToast _appToast;
|
|
||||||
final ImagePaths _imagePaths;
|
|
||||||
final ResponsiveUtils responsiveUtils;
|
|
||||||
|
|
||||||
final listMailboxSearched = <PresentationMailbox>[].obs;
|
final listMailboxSearched = <PresentationMailbox>[].obs;
|
||||||
final searchState = SearchState.initial().obs;
|
final searchState = SearchState.initial().obs;
|
||||||
@@ -75,11 +76,11 @@ class MailboxController extends BaseMailboxController {
|
|||||||
final currentSelectMode = SelectMode.INACTIVE.obs;
|
final currentSelectMode = SelectMode.INACTIVE.obs;
|
||||||
|
|
||||||
final _openMailboxEventController = StreamController<OpenMailboxViewEvent>();
|
final _openMailboxEventController = StreamController<OpenMailboxViewEvent>();
|
||||||
|
final searchInputController = TextEditingController();
|
||||||
|
final searchFocus = FocusNode();
|
||||||
|
final mailboxListScrollController = ScrollController();
|
||||||
|
|
||||||
List<PresentationMailbox> allMailboxes = <PresentationMailbox>[];
|
List<PresentationMailbox> allMailboxes = <PresentationMailbox>[];
|
||||||
TextEditingController searchInputController = TextEditingController();
|
|
||||||
FocusNode searchFocus = FocusNode();
|
|
||||||
|
|
||||||
jmapState.State? currentMailboxState;
|
jmapState.State? currentMailboxState;
|
||||||
|
|
||||||
MailboxController(
|
MailboxController(
|
||||||
@@ -90,11 +91,8 @@ class MailboxController extends BaseMailboxController {
|
|||||||
this._deleteMultipleMailboxInteractor,
|
this._deleteMultipleMailboxInteractor,
|
||||||
this._verifyNameInteractor,
|
this._verifyNameInteractor,
|
||||||
this._renameMailboxInteractor,
|
this._renameMailboxInteractor,
|
||||||
treeBuilder,
|
|
||||||
this._uuid,
|
this._uuid,
|
||||||
this._appToast,
|
treeBuilder,
|
||||||
this._imagePaths,
|
|
||||||
this.responsiveUtils,
|
|
||||||
) : super(treeBuilder);
|
) : super(treeBuilder);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -266,7 +264,7 @@ class MailboxController extends BaseMailboxController {
|
|||||||
mailboxDashBoardController.disableSearch();
|
mailboxDashBoardController.disableSearch();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!responsiveUtils.isDesktop(context) && !responsiveUtils.isTabletLarge(context)) {
|
if (!_responsiveUtils.isDesktop(context) && !_responsiveUtils.isTabletLarge(context)) {
|
||||||
mailboxDashBoardController.closeDrawer();
|
mailboxDashBoardController.closeDrawer();
|
||||||
} else {
|
} else {
|
||||||
mailboxDashBoardController.dispatchRoute(AppRoutes.THREAD);
|
mailboxDashBoardController.dispatchRoute(AppRoutes.THREAD);
|
||||||
@@ -450,7 +448,7 @@ class MailboxController extends BaseMailboxController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _openConfirmationDialogDeleteMailboxAction(BuildContext context, PresentationMailbox presentationMailbox) {
|
void _openConfirmationDialogDeleteMailboxAction(BuildContext context, PresentationMailbox presentationMailbox) {
|
||||||
if (responsiveUtils.isMobile(context) || responsiveUtils.isMobileDevice(context)) {
|
if (_responsiveUtils.isMobile(context) || _responsiveUtils.isMobileDevice(context)) {
|
||||||
(ConfirmationDialogActionSheetBuilder(context)
|
(ConfirmationDialogActionSheetBuilder(context)
|
||||||
..messageText(AppLocalizations.of(context).message_confirmation_dialog_delete_mailbox(presentationMailbox.name?.name ?? ''))
|
..messageText(AppLocalizations.of(context).message_confirmation_dialog_delete_mailbox(presentationMailbox.name?.name ?? ''))
|
||||||
..onCancelAction(AppLocalizations.of(context).cancel, () => popBack())
|
..onCancelAction(AppLocalizations.of(context).cancel, () => popBack())
|
||||||
@@ -487,7 +485,8 @@ class MailboxController extends BaseMailboxController {
|
|||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
final descendantIdsReversed = descendantIds.reversed.toList();
|
final descendantIdsReversed = descendantIds.reversed.toList();
|
||||||
consumeState(_deleteMultipleMailboxInteractor.execute(session, accountId, descendantIdsReversed));
|
consumeState(_deleteMultipleMailboxInteractor.execute(
|
||||||
|
session, accountId, descendantIdsReversed, presentationMailbox.id));
|
||||||
} else {
|
} else {
|
||||||
_deleteMailboxFailure(DeleteMultipleMailboxFailure(null));
|
_deleteMailboxFailure(DeleteMultipleMailboxFailure(null));
|
||||||
}
|
}
|
||||||
@@ -504,9 +503,18 @@ class MailboxController extends BaseMailboxController {
|
|||||||
message: AppLocalizations.of(currentContext!).delete_mailboxes_successfully,
|
message: AppLocalizations.of(currentContext!).delete_mailboxes_successfully,
|
||||||
icon: _imagePaths.icSelected);
|
icon: _imagePaths.icSelected);
|
||||||
}
|
}
|
||||||
|
if (success.mailboxIdDeleted == mailboxDashBoardController.selectedMailbox.value?.id) {
|
||||||
|
_switchBackToMailboxDefault();
|
||||||
|
}
|
||||||
refreshMailboxChanges();
|
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) {
|
void _deleteMailboxFailure(DeleteMultipleMailboxFailure failure) {
|
||||||
if (currentOverlayContext != null && currentContext != null) {
|
if (currentOverlayContext != null && currentContext != null) {
|
||||||
_appToast.showToastWithIcon(
|
_appToast.showToastWithIcon(
|
||||||
@@ -517,12 +525,12 @@ class MailboxController extends BaseMailboxController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _openDialogRenameMailboxAction(BuildContext context, PresentationMailbox presentationMailbox) {
|
void _openDialogRenameMailboxAction(BuildContext context, PresentationMailbox presentationMailbox) {
|
||||||
if (responsiveUtils.isMobile(context) || responsiveUtils.isMobileDevice(context)) {
|
if (_responsiveUtils.isMobile(context) || _responsiveUtils.isMobileDevice(context)) {
|
||||||
(EditTextModalSheetBuilder()
|
(EditTextModalSheetBuilder()
|
||||||
..key(Key('rename_mailbox_modal_sheet'))
|
..key(Key('rename_mailbox_modal_sheet'))
|
||||||
..title(AppLocalizations.of(context).rename_mailbox)
|
..title(AppLocalizations.of(context).rename_mailbox)
|
||||||
..cancelText(AppLocalizations.of(context).cancel)
|
..cancelText(AppLocalizations.of(context).cancel)
|
||||||
..boxConstraints(responsiveUtils.isMobileDevice(context) && responsiveUtils.isLandscape(context)
|
..boxConstraints(_responsiveUtils.isMobileDevice(context) && _responsiveUtils.isLandscape(context)
|
||||||
? BoxConstraints(maxWidth: 400)
|
? BoxConstraints(maxWidth: 400)
|
||||||
: null)
|
: null)
|
||||||
..onConfirmAction(AppLocalizations.of(context).rename,
|
..onConfirmAction(AppLocalizations.of(context).rename,
|
||||||
|
|||||||
@@ -226,6 +226,7 @@ class MailboxView extends GetWidget<MailboxController> {
|
|||||||
|
|
||||||
Widget _buildListMailbox(BuildContext context) {
|
Widget _buildListMailbox(BuildContext context) {
|
||||||
return ListView(
|
return ListView(
|
||||||
|
controller: controller.mailboxListScrollController,
|
||||||
key: PageStorageKey('mailbox_list'),
|
key: PageStorageKey('mailbox_list'),
|
||||||
primary: false,
|
primary: false,
|
||||||
shrinkWrap: true,
|
shrinkWrap: true,
|
||||||
|
|||||||
Reference in New Issue
Block a user