TF-1074 Handle go to path /destination_picker
This commit is contained in:
@@ -7,12 +7,14 @@ import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart
|
|||||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||||
import 'package:tmail_ui_user/features/base/mixin/message_dialog_action_mixin.dart';
|
import 'package:tmail_ui_user/features/base/mixin/message_dialog_action_mixin.dart';
|
||||||
import 'package:tmail_ui_user/features/base/mixin/popup_context_menu_action_mixin.dart';
|
import 'package:tmail_ui_user/features/base/mixin/popup_context_menu_action_mixin.dart';
|
||||||
|
import 'package:tmail_ui_user/features/base/mixin/view_as_dialog_action_mixin.dart';
|
||||||
import 'package:tmail_ui_user/features/email/presentation/mdn_interactor_bindings.dart';
|
import 'package:tmail_ui_user/features/email/presentation/mdn_interactor_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/bindings/contact_autocomplete_bindings.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/bindings/contact_autocomplete_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/bindings/tmail_autocomplete_bindings.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/bindings/tmail_autocomplete_bindings.dart';
|
||||||
import 'package:tmail_ui_user/main/error/capability_validator.dart';
|
import 'package:tmail_ui_user/main/error/capability_validator.dart';
|
||||||
|
|
||||||
abstract class BaseController extends GetxController with MessageDialogActionMixin, PopupContextMenuActionMixin {
|
abstract class BaseController extends GetxController
|
||||||
|
with MessageDialogActionMixin, PopupContextMenuActionMixin, ViewAsDialogActionMixin {
|
||||||
final viewState = Rx<Either<Failure, Success>>(Right(UIState.idle));
|
final viewState = Rx<Either<Failure, Success>>(Right(UIState.idle));
|
||||||
FpsCallback? fpsCallback;
|
FpsCallback? fpsCallback;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||||
|
import 'package:tmail_ui_user/features/destination_picker/presentation/destination_picker_bindings.dart';
|
||||||
|
import 'package:tmail_ui_user/features/destination_picker/presentation/destination_picker_view.dart';
|
||||||
|
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
|
||||||
|
mixin ViewAsDialogActionMixin {
|
||||||
|
|
||||||
|
void showDialogDestinationPicker({
|
||||||
|
required BuildContext context,
|
||||||
|
required DestinationPickerArguments arguments,
|
||||||
|
required Function(PresentationMailbox) onSelectedMailbox
|
||||||
|
}) {
|
||||||
|
DestinationPickerBindings().dependencies();
|
||||||
|
|
||||||
|
showGeneralDialog(
|
||||||
|
context: context,
|
||||||
|
barrierDismissible: true,
|
||||||
|
barrierLabel: '',
|
||||||
|
barrierColor: Colors.black54,
|
||||||
|
pageBuilder: (context, animation, secondaryAnimation) {
|
||||||
|
return DestinationPickerView.fromArguments(
|
||||||
|
arguments,
|
||||||
|
onDismissCallback: () {
|
||||||
|
DestinationPickerBindings().dispose();
|
||||||
|
popBack();
|
||||||
|
},
|
||||||
|
onSelectedMailboxCallback: (destinationMailbox) {
|
||||||
|
DestinationPickerBindings().dispose();
|
||||||
|
popBack();
|
||||||
|
|
||||||
|
if (destinationMailbox is PresentationMailbox) {
|
||||||
|
onSelectedMailbox.call(destinationMailbox);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -83,4 +83,8 @@ class DestinationPickerBindings extends BaseBindings {
|
|||||||
Get.find<StateDataSource>(),
|
Get.find<StateDataSource>(),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dispose() {
|
||||||
|
Get.delete<DestinationPickerController>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -20,6 +20,8 @@ import 'package:tmail_ui_user/features/thread/presentation/model/search_state.da
|
|||||||
import 'package:tmail_ui_user/features/thread/presentation/model/search_status.dart';
|
import 'package:tmail_ui_user/features/thread/presentation/model/search_status.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
|
||||||
|
typedef OnSelectedMailboxCallback = Function(PresentationMailbox? destinationMailbox);
|
||||||
|
|
||||||
class DestinationPickerController extends BaseMailboxController {
|
class DestinationPickerController extends BaseMailboxController {
|
||||||
|
|
||||||
final GetAllMailboxInteractor _getAllMailboxInteractor;
|
final GetAllMailboxInteractor _getAllMailboxInteractor;
|
||||||
@@ -31,8 +33,12 @@ class DestinationPickerController extends BaseMailboxController {
|
|||||||
final searchQuery = SearchQuery.initial().obs;
|
final searchQuery = SearchQuery.initial().obs;
|
||||||
final mailboxCategoriesExpandMode = MailboxCategoriesExpandMode.initial().obs;
|
final mailboxCategoriesExpandMode = MailboxCategoriesExpandMode.initial().obs;
|
||||||
|
|
||||||
|
DestinationPickerArguments? arguments;
|
||||||
AccountId? accountId;
|
AccountId? accountId;
|
||||||
MailboxId? mailboxIdSelected;
|
MailboxId? mailboxIdSelected;
|
||||||
|
OnSelectedMailboxCallback? onSelectedMailboxCallback;
|
||||||
|
VoidCallback? onDismissDestinationPicker;
|
||||||
|
|
||||||
final searchInputController = TextEditingController();
|
final searchInputController = TextEditingController();
|
||||||
final searchFocus = FocusNode();
|
final searchFocus = FocusNode();
|
||||||
|
|
||||||
@@ -45,11 +51,10 @@ class DestinationPickerController extends BaseMailboxController {
|
|||||||
@override
|
@override
|
||||||
void onReady() {
|
void onReady() {
|
||||||
super.onReady();
|
super.onReady();
|
||||||
final arguments = Get.arguments;
|
if (arguments != null) {
|
||||||
if (arguments != null && arguments is DestinationPickerArguments) {
|
mailboxAction.value = arguments!.mailboxAction;
|
||||||
mailboxAction.value = arguments.mailboxAction;
|
mailboxIdSelected = arguments!.mailboxIdSelected;
|
||||||
mailboxIdSelected = arguments.mailboxIdSelected;
|
accountId = arguments!.accountId;
|
||||||
accountId = arguments.accountId;
|
|
||||||
getAllMailboxAction();
|
getAllMailboxAction();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -160,10 +165,18 @@ class DestinationPickerController extends BaseMailboxController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void selectMailboxAction(PresentationMailbox? destinationMailbox) {
|
void selectMailboxAction(PresentationMailbox? destinationMailbox) {
|
||||||
popBack(result: destinationMailbox);
|
if (BuildUtils.isWeb) {
|
||||||
|
onSelectedMailboxCallback?.call(destinationMailbox);
|
||||||
|
} else {
|
||||||
|
popBack(result: destinationMailbox);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void closeDestinationPicker() {
|
void closeDestinationPicker() {
|
||||||
popBack();
|
if (BuildUtils.isWeb) {
|
||||||
|
onDismissDestinationPicker?.call();
|
||||||
|
} else {
|
||||||
|
popBack();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,9 +1,19 @@
|
|||||||
import 'package:core/core.dart';
|
import 'package:core/presentation/extensions/color_extension.dart';
|
||||||
|
import 'package:core/presentation/resources/image_paths.dart';
|
||||||
|
import 'package:core/presentation/state/success.dart';
|
||||||
|
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||||
|
import 'package:core/presentation/utils/style_utils.dart';
|
||||||
|
import 'package:core/presentation/views/button/icon_button_web.dart';
|
||||||
|
import 'package:core/presentation/views/list/tree_view.dart';
|
||||||
|
import 'package:core/presentation/views/search/search_bar_view.dart';
|
||||||
|
import 'package:core/utils/build_utils.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||||
import 'package:model/model.dart';
|
import 'package:model/extensions/presentation_mailbox_extension.dart';
|
||||||
|
import 'package:model/mailbox/expand_mode.dart';
|
||||||
|
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||||
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
||||||
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
|
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
|
||||||
import 'package:tmail_ui_user/features/destination_picker/presentation/destination_picker_controller.dart';
|
import 'package:tmail_ui_user/features/destination_picker/presentation/destination_picker_controller.dart';
|
||||||
@@ -25,17 +35,29 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
|
|||||||
final _imagePaths = Get.find<ImagePaths>();
|
final _imagePaths = Get.find<ImagePaths>();
|
||||||
final _responsiveUtils = Get.find<ResponsiveUtils>();
|
final _responsiveUtils = Get.find<ResponsiveUtils>();
|
||||||
|
|
||||||
DestinationPickerView({Key? key}) : super(key: key);
|
@override
|
||||||
|
final controller = Get.find<DestinationPickerController>();
|
||||||
|
|
||||||
|
DestinationPickerView({Key? key}) : super(key: key) {
|
||||||
|
controller.arguments = Get.arguments;
|
||||||
|
}
|
||||||
|
|
||||||
|
DestinationPickerView.fromArguments(
|
||||||
|
DestinationPickerArguments arguments, {
|
||||||
|
Key? key,
|
||||||
|
OnSelectedMailboxCallback? onSelectedMailboxCallback,
|
||||||
|
VoidCallback? onDismissCallback
|
||||||
|
}) : super(key: key) {
|
||||||
|
controller.arguments = arguments;
|
||||||
|
controller.onSelectedMailboxCallback = onSelectedMailboxCallback;
|
||||||
|
controller.onDismissDestinationPicker = onDismissCallback;
|
||||||
|
controller.onInit();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
MailboxActions? actions;
|
MailboxActions? actions = controller.arguments?.mailboxAction;
|
||||||
MailboxId? mailboxIdSelected;
|
MailboxId? mailboxIdSelected = controller.arguments?.mailboxIdSelected;
|
||||||
final arguments = Get.arguments;
|
|
||||||
if (arguments != null && arguments is DestinationPickerArguments) {
|
|
||||||
actions = arguments.mailboxAction;
|
|
||||||
mailboxIdSelected = arguments.mailboxIdSelected;
|
|
||||||
}
|
|
||||||
|
|
||||||
return PointerInterceptor(
|
return PointerInterceptor(
|
||||||
child: GestureDetector(
|
child: GestureDetector(
|
||||||
|
|||||||
@@ -501,10 +501,23 @@ class EmailController extends BaseController with AppLoaderMixin {
|
|||||||
final accountId = mailboxDashBoardController.accountId.value;
|
final accountId = mailboxDashBoardController.accountId.value;
|
||||||
|
|
||||||
if (currentMailbox != null && accountId != null) {
|
if (currentMailbox != null && accountId != null) {
|
||||||
final destinationMailbox = await push(
|
final arguments = DestinationPickerArguments(accountId, MailboxActions.moveEmail);
|
||||||
AppRoutes.destinationPicker,
|
if (BuildUtils.isWeb) {
|
||||||
arguments: DestinationPickerArguments(accountId, MailboxActions.moveEmail)
|
showDialogDestinationPicker(
|
||||||
);
|
context: context,
|
||||||
|
arguments: arguments,
|
||||||
|
onSelectedMailbox: (destinationMailbox) {
|
||||||
|
_dispatchMoveToAction(
|
||||||
|
context,
|
||||||
|
accountId,
|
||||||
|
email,
|
||||||
|
currentMailbox,
|
||||||
|
destinationMailbox);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
final destinationMailbox = await push(
|
||||||
|
AppRoutes.destinationPicker,
|
||||||
|
arguments: arguments);
|
||||||
|
|
||||||
if (destinationMailbox != null && destinationMailbox is PresentationMailbox && mailboxDashBoardController.sessionCurrent != null) {
|
if (destinationMailbox != null && destinationMailbox is PresentationMailbox && mailboxDashBoardController.sessionCurrent != null) {
|
||||||
if (destinationMailbox.isTrash) {
|
if (destinationMailbox.isTrash) {
|
||||||
@@ -531,6 +544,47 @@ class EmailController extends BaseController with AppLoaderMixin {
|
|||||||
destinationPath: destinationMailbox.mailboxPath));
|
destinationPath: destinationMailbox.mailboxPath));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (destinationMailbox is PresentationMailbox) {
|
||||||
|
_dispatchMoveToAction(
|
||||||
|
context,
|
||||||
|
accountId,
|
||||||
|
email,
|
||||||
|
currentMailbox,
|
||||||
|
destinationMailbox);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _dispatchMoveToAction(
|
||||||
|
BuildContext context,
|
||||||
|
AccountId accountId,
|
||||||
|
PresentationEmail emailSelected,
|
||||||
|
PresentationMailbox currentMailbox,
|
||||||
|
PresentationMailbox destinationMailbox
|
||||||
|
) {
|
||||||
|
if (destinationMailbox.isTrash) {
|
||||||
|
_moveToTrashAction(context, accountId, MoveToMailboxRequest(
|
||||||
|
[emailSelected.id],
|
||||||
|
currentMailbox.id,
|
||||||
|
destinationMailbox.id,
|
||||||
|
MoveAction.moving,
|
||||||
|
EmailActionType.moveToTrash));
|
||||||
|
} else if (destinationMailbox.isSpam) {
|
||||||
|
_moveToSpamAction(context, accountId, MoveToMailboxRequest(
|
||||||
|
[emailSelected.id],
|
||||||
|
currentMailbox.id,
|
||||||
|
destinationMailbox.id,
|
||||||
|
MoveAction.moving,
|
||||||
|
EmailActionType.moveToSpam));
|
||||||
|
} else {
|
||||||
|
_moveToMailbox(accountId, MoveToMailboxRequest(
|
||||||
|
[emailSelected.id],
|
||||||
|
currentMailbox.id,
|
||||||
|
destinationMailbox.id,
|
||||||
|
MoveAction.moving,
|
||||||
|
EmailActionType.moveToMailbox,
|
||||||
|
destinationPath: destinationMailbox.mailboxPath));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -553,7 +553,7 @@ class MailboxController extends BaseMailboxController {
|
|||||||
_markAsReadMailboxAction(context, selectedMailboxList.first);
|
_markAsReadMailboxAction(context, selectedMailboxList.first);
|
||||||
break;
|
break;
|
||||||
case MailboxActions.move:
|
case MailboxActions.move:
|
||||||
_moveMailboxAction(selectedMailboxList.first);
|
_moveMailboxAction(context, selectedMailboxList.first);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@@ -812,26 +812,41 @@ class MailboxController extends BaseMailboxController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _moveMailboxAction(PresentationMailbox mailboxSelected) async {
|
void _moveMailboxAction(BuildContext context, PresentationMailbox mailboxSelected) async {
|
||||||
final accountId = mailboxDashBoardController.accountId.value;
|
final accountId = mailboxDashBoardController.accountId.value;
|
||||||
if (accountId != null) {
|
if (accountId != null) {
|
||||||
final destinationMailbox = await push(
|
final arguments = DestinationPickerArguments(
|
||||||
AppRoutes.destinationPicker,
|
accountId,
|
||||||
arguments: DestinationPickerArguments(
|
MailboxActions.move,
|
||||||
|
mailboxIdSelected: mailboxSelected.id);
|
||||||
|
|
||||||
|
if (BuildUtils.isWeb) {
|
||||||
|
showDialogDestinationPicker(
|
||||||
|
context: context,
|
||||||
|
arguments: arguments,
|
||||||
|
onSelectedMailbox: (destinationMailbox) {
|
||||||
|
_handleMovingMailbox(
|
||||||
|
accountId,
|
||||||
|
MoveAction.moving,
|
||||||
|
mailboxSelected,
|
||||||
|
destinationMailbox: destinationMailbox == PresentationMailbox.unifiedMailbox ? null : destinationMailbox);
|
||||||
|
|
||||||
|
_cancelSelectMailbox();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
final destinationMailbox = await push(
|
||||||
|
AppRoutes.destinationPicker,
|
||||||
|
arguments: arguments);
|
||||||
|
|
||||||
|
if (destinationMailbox is PresentationMailbox) {
|
||||||
|
_handleMovingMailbox(
|
||||||
accountId,
|
accountId,
|
||||||
MailboxActions.move,
|
MoveAction.moving,
|
||||||
mailboxIdSelected: mailboxSelected.id));
|
mailboxSelected,
|
||||||
|
destinationMailbox: destinationMailbox == PresentationMailbox.unifiedMailbox ? null : destinationMailbox);
|
||||||
|
|
||||||
if (destinationMailbox is PresentationMailbox) {
|
_cancelSelectMailbox();
|
||||||
final mailboxDestination = destinationMailbox == PresentationMailbox.unifiedMailbox
|
}
|
||||||
? null : destinationMailbox;
|
|
||||||
_handleMovingMailbox(
|
|
||||||
accountId,
|
|
||||||
MoveAction.moving,
|
|
||||||
mailboxSelected,
|
|
||||||
destinationMailbox: mailboxDestination);
|
|
||||||
|
|
||||||
_cancelSelectMailbox();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -958,7 +973,7 @@ class MailboxController extends BaseMailboxController {
|
|||||||
_openDialogRenameMailboxAction(context, mailbox);
|
_openDialogRenameMailboxAction(context, mailbox);
|
||||||
break;
|
break;
|
||||||
case MailboxActions.move:
|
case MailboxActions.move:
|
||||||
_moveMailboxAction(mailbox);
|
_moveMailboxAction(context, mailbox);
|
||||||
break;
|
break;
|
||||||
case MailboxActions.markAsRead:
|
case MailboxActions.markAsRead:
|
||||||
_markAsReadMailboxAction(context, mailbox);
|
_markAsReadMailboxAction(context, mailbox);
|
||||||
|
|||||||
@@ -142,21 +142,36 @@ class MailboxCreatorController extends BaseController {
|
|||||||
FocusScope.of(context).unfocus();
|
FocusScope.of(context).unfocus();
|
||||||
|
|
||||||
if (accountId != null) {
|
if (accountId != null) {
|
||||||
final destinationMailbox = await push(
|
final arguments = DestinationPickerArguments(
|
||||||
AppRoutes.destinationPicker,
|
accountId!,
|
||||||
arguments: DestinationPickerArguments(
|
MailboxActions.create,
|
||||||
accountId!,
|
mailboxIdSelected: selectedMailbox.value?.id);
|
||||||
MailboxActions.create,
|
|
||||||
mailboxIdSelected: selectedMailbox.value?.id)
|
|
||||||
);
|
|
||||||
|
|
||||||
if (destinationMailbox is PresentationMailbox) {
|
if (BuildUtils.isWeb) {
|
||||||
final mailboxDestination = destinationMailbox == PresentationMailbox.unifiedMailbox
|
showDialogDestinationPicker(
|
||||||
? null
|
context: context,
|
||||||
: destinationMailbox;
|
arguments: arguments,
|
||||||
|
onSelectedMailbox: (destinationMailbox) {
|
||||||
|
final mailboxDestination = destinationMailbox == PresentationMailbox.unifiedMailbox
|
||||||
|
? null
|
||||||
|
: destinationMailbox;
|
||||||
|
|
||||||
selectedMailbox.value = mailboxDestination;
|
selectedMailbox.value = mailboxDestination;
|
||||||
_createListMailboxNameAsStringInMailboxLocation();
|
_createListMailboxNameAsStringInMailboxLocation();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
final destinationMailbox = await push(
|
||||||
|
AppRoutes.destinationPicker,
|
||||||
|
arguments: arguments);
|
||||||
|
|
||||||
|
if (destinationMailbox is PresentationMailbox) {
|
||||||
|
final mailboxDestination = destinationMailbox == PresentationMailbox.unifiedMailbox
|
||||||
|
? null
|
||||||
|
: destinationMailbox;
|
||||||
|
|
||||||
|
selectedMailbox.value = mailboxDestination;
|
||||||
|
_createListMailboxNameAsStringInMailboxLocation();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+27
-11
@@ -134,18 +134,34 @@ class AdvancedFilterController extends BaseController {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void selectedMailBox() async {
|
void selectedMailBox(BuildContext context) async {
|
||||||
final destinationMailbox = await push(
|
final accountId = _mailboxDashBoardController.accountId.value;
|
||||||
AppRoutes.destinationPicker,
|
if (accountId != null) {
|
||||||
arguments: DestinationPickerArguments(
|
final arguments = DestinationPickerArguments(
|
||||||
_mailboxDashBoardController.accountId.value!,
|
accountId,
|
||||||
MailboxActions.select,
|
MailboxActions.select,
|
||||||
mailboxIdSelected: searchController.searchEmailFilter.value.mailbox?.id));
|
mailboxIdSelected: searchController.searchEmailFilter.value.mailbox?.id);
|
||||||
|
|
||||||
if (destinationMailbox is PresentationMailbox) {
|
if (BuildUtils.isWeb) {
|
||||||
searchController.updateFilterEmail(mailbox: destinationMailbox);
|
showDialogDestinationPicker(
|
||||||
mailBoxFilterInputController.text =
|
context: context,
|
||||||
StringConvert.writeNullToEmpty(destinationMailbox.name?.name);
|
arguments: arguments,
|
||||||
|
onSelectedMailbox: (destinationMailbox) {
|
||||||
|
searchController.updateFilterEmail(mailbox: destinationMailbox);
|
||||||
|
mailBoxFilterInputController.text =
|
||||||
|
StringConvert.writeNullToEmpty(destinationMailbox.name?.name);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
final destinationMailbox = await push(
|
||||||
|
AppRoutes.destinationPicker,
|
||||||
|
arguments: arguments);
|
||||||
|
|
||||||
|
if (destinationMailbox is PresentationMailbox) {
|
||||||
|
searchController.updateFilterEmail(mailbox: destinationMailbox);
|
||||||
|
mailBoxFilterInputController.text =
|
||||||
|
StringConvert.writeNullToEmpty(destinationMailbox.name?.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+56
-4
@@ -611,13 +611,27 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void moveSelectedMultipleEmailToMailbox(
|
void moveSelectedMultipleEmailToMailbox(
|
||||||
|
BuildContext context,
|
||||||
List<PresentationEmail> listEmails,
|
List<PresentationEmail> listEmails,
|
||||||
PresentationMailbox mailboxCurrent
|
PresentationMailbox currentMailbox
|
||||||
) async {
|
) async {
|
||||||
if (accountId.value != null) {
|
if (accountId.value != null) {
|
||||||
final destinationMailbox = await push(
|
final arguments = DestinationPickerArguments(accountId.value!, MailboxActions.moveEmail);
|
||||||
AppRoutes.destinationPicker,
|
|
||||||
arguments: DestinationPickerArguments(accountId.value!, MailboxActions.moveEmail));
|
if (BuildUtils.isWeb) {
|
||||||
|
showDialogDestinationPicker(
|
||||||
|
context: context,
|
||||||
|
arguments: arguments,
|
||||||
|
onSelectedMailbox: (destinationMailbox) {
|
||||||
|
_dispatchMoveToMultipleAction(
|
||||||
|
accountId.value!,
|
||||||
|
listEmails.listEmailIds,
|
||||||
|
currentMailbox, destinationMailbox);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
final destinationMailbox = await push(
|
||||||
|
AppRoutes.destinationPicker,
|
||||||
|
arguments: arguments);
|
||||||
|
|
||||||
if (destinationMailbox != null && destinationMailbox is PresentationMailbox) {
|
if (destinationMailbox != null && destinationMailbox is PresentationMailbox) {
|
||||||
if (destinationMailbox.isTrash) {
|
if (destinationMailbox.isTrash) {
|
||||||
@@ -644,6 +658,44 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
destinationPath: destinationMailbox.mailboxPath));
|
destinationPath: destinationMailbox.mailboxPath));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (destinationMailbox != null && destinationMailbox is PresentationMailbox) {
|
||||||
|
_dispatchMoveToMultipleAction(
|
||||||
|
accountId.value!,
|
||||||
|
listEmails.listEmailIds,
|
||||||
|
currentMailbox, destinationMailbox);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _dispatchMoveToMultipleAction(
|
||||||
|
AccountId accountId,
|
||||||
|
List<EmailId> listEmailIds,
|
||||||
|
PresentationMailbox currentMailbox,
|
||||||
|
PresentationMailbox destinationMailbox
|
||||||
|
) {
|
||||||
|
if (destinationMailbox.isTrash) {
|
||||||
|
_moveSelectedEmailMultipleToMailboxAction(accountId, MoveToMailboxRequest(
|
||||||
|
listEmailIds,
|
||||||
|
currentMailbox.id,
|
||||||
|
destinationMailbox.id,
|
||||||
|
MoveAction.moving,
|
||||||
|
EmailActionType.moveToTrash));
|
||||||
|
} else if (destinationMailbox.isSpam) {
|
||||||
|
_moveSelectedEmailMultipleToMailboxAction(accountId, MoveToMailboxRequest(
|
||||||
|
listEmailIds,
|
||||||
|
currentMailbox.id,
|
||||||
|
destinationMailbox.id,
|
||||||
|
MoveAction.moving,
|
||||||
|
EmailActionType.moveToSpam));
|
||||||
|
} else {
|
||||||
|
_moveSelectedEmailMultipleToMailboxAction(accountId, MoveToMailboxRequest(
|
||||||
|
listEmailIds,
|
||||||
|
currentMailbox.id,
|
||||||
|
destinationMailbox.id,
|
||||||
|
MoveAction.moving,
|
||||||
|
EmailActionType.moveToMailbox,
|
||||||
|
destinationPath: destinationMailbox.mailboxPath));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -70,7 +70,7 @@ class AdvancedSearchInputForm extends GetWidget<AdvancedFilterController>
|
|||||||
currentFocusNode: controller.focusManager.mailboxFieldFocusNode,
|
currentFocusNode: controller.focusManager.mailboxFieldFocusNode,
|
||||||
nextFocusNode: controller.focusManager.attachmentCheckboxFocusNode,
|
nextFocusNode: controller.focusManager.attachmentCheckboxFocusNode,
|
||||||
mouseCursor: SystemMouseCursors.click,
|
mouseCursor: SystemMouseCursors.click,
|
||||||
onTap: () => controller.selectedMailBox()),
|
onTap: () => controller.selectedMailBox(context)),
|
||||||
Row(children: [
|
Row(children: [
|
||||||
Expanded(child: _buildFilterField(
|
Expanded(child: _buildFilterField(
|
||||||
textEditingController: controller.dateFilterInputController,
|
textEditingController: controller.dateFilterInputController,
|
||||||
|
|||||||
+26
-10
@@ -192,17 +192,33 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void selectMailbox(BuildContext context) async {
|
void selectMailbox(BuildContext context) async {
|
||||||
final destinationMailbox = await push(
|
if (_accountId != null) {
|
||||||
AppRoutes.destinationPicker,
|
final arguments = DestinationPickerArguments(
|
||||||
arguments: DestinationPickerArguments(
|
_accountId!,
|
||||||
_accountId!,
|
MailboxActions.selectForRuleAction);
|
||||||
MailboxActions.selectForRuleAction));
|
|
||||||
|
|
||||||
if (destinationMailbox is PresentationMailbox) {
|
if (BuildUtils.isWeb) {
|
||||||
mailboxSelected.value = destinationMailbox;
|
showDialogDestinationPicker(
|
||||||
errorRuleActionValue.value = _getErrorStringByInputValue(
|
context: context,
|
||||||
context,
|
arguments: arguments,
|
||||||
mailboxSelected.value?.name?.name);
|
onSelectedMailbox: (destinationMailbox) {
|
||||||
|
mailboxSelected.value = destinationMailbox;
|
||||||
|
errorRuleActionValue.value = _getErrorStringByInputValue(
|
||||||
|
context,
|
||||||
|
mailboxSelected.value?.name?.name);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
final destinationMailbox = await push(
|
||||||
|
AppRoutes.destinationPicker,
|
||||||
|
arguments: arguments);
|
||||||
|
|
||||||
|
if (destinationMailbox is PresentationMailbox) {
|
||||||
|
mailboxSelected.value = destinationMailbox;
|
||||||
|
errorRuleActionValue.value = _getErrorStringByInputValue(
|
||||||
|
context,
|
||||||
|
mailboxSelected.value?.name?.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
|
|
||||||
|
import 'package:core/core.dart';
|
||||||
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:core/utils/app_logger.dart';
|
import 'package:core/utils/app_logger.dart';
|
||||||
@@ -415,21 +416,33 @@ class SearchEmailController extends BaseController
|
|||||||
}
|
}
|
||||||
|
|
||||||
void selectMailboxForSearchFilter(BuildContext context, PresentationMailbox? mailbox) async {
|
void selectMailboxForSearchFilter(BuildContext context, PresentationMailbox? mailbox) async {
|
||||||
final destinationMailbox = await push(
|
final arguments = DestinationPickerArguments(
|
||||||
AppRoutes.destinationPicker,
|
mailboxDashBoardController.accountId.value!,
|
||||||
arguments: DestinationPickerArguments(
|
MailboxActions.select,
|
||||||
mailboxDashBoardController.accountId.value!,
|
mailboxIdSelected: mailbox?.id);
|
||||||
MailboxActions.select,
|
|
||||||
mailboxIdSelected: mailbox?.id));
|
|
||||||
|
|
||||||
if (destinationMailbox is PresentationMailbox) {
|
if (BuildUtils.isWeb) {
|
||||||
final mailboxSelected = destinationMailbox == PresentationMailbox.unifiedMailbox
|
showDialogDestinationPicker(
|
||||||
? null
|
context: context,
|
||||||
: destinationMailbox;
|
arguments: arguments,
|
||||||
if (mailbox?.id != mailboxSelected?.id) {
|
onSelectedMailbox: (destinationMailbox) {
|
||||||
simpleSearchFilter.value = simpleSearchFilter.value
|
final mailboxSelected = destinationMailbox == PresentationMailbox.unifiedMailbox ? null : destinationMailbox;
|
||||||
.toSimpleSearchFilterByMailbox(newMailbox: mailboxSelected);
|
if (mailbox?.id != mailboxSelected?.id) {
|
||||||
_searchEmailAction(context);
|
simpleSearchFilter.value = simpleSearchFilter.value.toSimpleSearchFilterByMailbox(newMailbox: mailboxSelected);
|
||||||
|
_searchEmailAction(context);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
final destinationMailbox = await push(
|
||||||
|
AppRoutes.destinationPicker,
|
||||||
|
arguments: arguments);
|
||||||
|
|
||||||
|
if (destinationMailbox is PresentationMailbox) {
|
||||||
|
final mailboxSelected = destinationMailbox == PresentationMailbox.unifiedMailbox ? null : destinationMailbox;
|
||||||
|
if (mailbox?.id != mailboxSelected?.id) {
|
||||||
|
simpleSearchFilter.value = simpleSearchFilter.value.toSimpleSearchFilterByMailbox(newMailbox: mailboxSelected);
|
||||||
|
_searchEmailAction(context);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -642,7 +655,7 @@ class SearchEmailController extends BaseController
|
|||||||
cancelSelectionMode(context);
|
cancelSelectionMode(context);
|
||||||
final mailboxContainCurrent = listEmails.getCurrentMailboxContain(mailboxDashBoardController.mapMailboxById);
|
final mailboxContainCurrent = listEmails.getCurrentMailboxContain(mailboxDashBoardController.mapMailboxById);
|
||||||
if (mailboxContainCurrent != null) {
|
if (mailboxContainCurrent != null) {
|
||||||
moveSelectedMultipleEmailToMailbox(listEmails, mailboxContainCurrent);
|
moveSelectedMultipleEmailToMailbox(context, listEmails, mailboxContainCurrent);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EmailActionType.moveToTrash:
|
case EmailActionType.moveToTrash:
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
|
|
||||||
|
|
||||||
import 'package:core/presentation/extensions/color_extension.dart';
|
import 'package:core/presentation/extensions/color_extension.dart';
|
||||||
import 'package:core/presentation/resources/image_paths.dart';
|
import 'package:core/presentation/resources/image_paths.dart';
|
||||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||||
import 'package:core/presentation/views/bottom_popup/confirmation_dialog_action_sheet_builder.dart';
|
import 'package:core/presentation/views/bottom_popup/confirmation_dialog_action_sheet_builder.dart';
|
||||||
import 'package:core/presentation/views/dialog/confirmation_dialog_builder.dart';
|
import 'package:core/presentation/views/dialog/confirmation_dialog_builder.dart';
|
||||||
|
import 'package:core/utils/build_utils.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
@@ -14,6 +16,7 @@ import 'package:model/email/presentation_email.dart';
|
|||||||
import 'package:model/email/read_actions.dart';
|
import 'package:model/email/read_actions.dart';
|
||||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||||
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/base/mixin/view_as_dialog_action_mixin.dart';
|
||||||
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
|
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||||
@@ -26,7 +29,7 @@ import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
|||||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
|
||||||
mixin EmailActionController {
|
mixin EmailActionController on ViewAsDialogActionMixin {
|
||||||
|
|
||||||
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
|
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
|
||||||
final responsiveUtils = Get.find<ResponsiveUtils>();
|
final responsiveUtils = Get.find<ResponsiveUtils>();
|
||||||
@@ -107,10 +110,24 @@ mixin EmailActionController {
|
|||||||
final accountId = mailboxDashBoardController.accountId.value;
|
final accountId = mailboxDashBoardController.accountId.value;
|
||||||
|
|
||||||
if (currentMailbox != null && accountId != null) {
|
if (currentMailbox != null && accountId != null) {
|
||||||
final destinationMailbox = await push(
|
final arguments = DestinationPickerArguments(accountId, MailboxActions.moveEmail);
|
||||||
AppRoutes.destinationPicker,
|
|
||||||
arguments: DestinationPickerArguments(accountId, MailboxActions.moveEmail)
|
if (BuildUtils.isWeb) {
|
||||||
);
|
showDialogDestinationPicker(
|
||||||
|
context: context,
|
||||||
|
arguments: arguments,
|
||||||
|
onSelectedMailbox: (destinationMailbox) {
|
||||||
|
_dispatchMoveToAction(
|
||||||
|
context,
|
||||||
|
accountId,
|
||||||
|
email,
|
||||||
|
currentMailbox,
|
||||||
|
destinationMailbox);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
final destinationMailbox = await push(
|
||||||
|
AppRoutes.destinationPicker,
|
||||||
|
arguments: arguments);
|
||||||
|
|
||||||
if (destinationMailbox != null && destinationMailbox is PresentationMailbox) {
|
if (destinationMailbox != null && destinationMailbox is PresentationMailbox) {
|
||||||
if (destinationMailbox.isTrash) {
|
if (destinationMailbox.isTrash) {
|
||||||
@@ -137,6 +154,45 @@ mixin EmailActionController {
|
|||||||
destinationPath: destinationMailbox.mailboxPath));
|
destinationPath: destinationMailbox.mailboxPath));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
_dispatchMoveToAction(
|
||||||
|
context,
|
||||||
|
accountId,
|
||||||
|
email,
|
||||||
|
currentMailbox,
|
||||||
|
destinationMailbox);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _dispatchMoveToAction(
|
||||||
|
BuildContext context,
|
||||||
|
AccountId accountId,
|
||||||
|
PresentationEmail emailSelected,
|
||||||
|
PresentationMailbox currentMailbox,
|
||||||
|
PresentationMailbox destinationMailbox
|
||||||
|
) {
|
||||||
|
if (destinationMailbox.isTrash) {
|
||||||
|
moveToSpamAction(accountId, MoveToMailboxRequest(
|
||||||
|
[emailSelected.id],
|
||||||
|
currentMailbox.id,
|
||||||
|
destinationMailbox.id,
|
||||||
|
MoveAction.moving,
|
||||||
|
EmailActionType.moveToTrash));
|
||||||
|
} else if (destinationMailbox.isSpam) {
|
||||||
|
moveToSpamAction(accountId, MoveToMailboxRequest(
|
||||||
|
[emailSelected.id],
|
||||||
|
currentMailbox.id,
|
||||||
|
destinationMailbox.id,
|
||||||
|
MoveAction.moving,
|
||||||
|
EmailActionType.moveToSpam));
|
||||||
|
} else {
|
||||||
|
_moveToMailboxAction(accountId, MoveToMailboxRequest(
|
||||||
|
[emailSelected.id],
|
||||||
|
currentMailbox.id,
|
||||||
|
destinationMailbox.id,
|
||||||
|
MoveAction.moving,
|
||||||
|
EmailActionType.moveToMailbox,
|
||||||
|
destinationPath: destinationMailbox.mailboxPath));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -200,8 +256,15 @@ mixin EmailActionController {
|
|||||||
mailboxDashBoardController.markAsStarSelectedMultipleEmail(listEmails, markStarAction);
|
mailboxDashBoardController.markAsStarSelectedMultipleEmail(listEmails, markStarAction);
|
||||||
}
|
}
|
||||||
|
|
||||||
void moveSelectedMultipleEmailToMailbox(List<PresentationEmail> listEmails, PresentationMailbox mailboxCurrent) {
|
void moveSelectedMultipleEmailToMailbox(
|
||||||
mailboxDashBoardController.moveSelectedMultipleEmailToMailbox(listEmails, mailboxCurrent);
|
BuildContext context,
|
||||||
|
List<PresentationEmail> listEmails,
|
||||||
|
PresentationMailbox mailboxCurrent
|
||||||
|
) {
|
||||||
|
mailboxDashBoardController.moveSelectedMultipleEmailToMailbox(
|
||||||
|
context,
|
||||||
|
listEmails,
|
||||||
|
mailboxCurrent);
|
||||||
}
|
}
|
||||||
|
|
||||||
void moveSelectedMultipleEmailToTrash(List<PresentationEmail> listEmails, PresentationMailbox mailboxCurrent) {
|
void moveSelectedMultipleEmailToTrash(List<PresentationEmail> listEmails, PresentationMailbox mailboxCurrent) {
|
||||||
|
|||||||
@@ -635,15 +635,28 @@ class ThreadController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void moveSelectedMultipleEmailToMailbox(
|
void moveSelectedMultipleEmailToMailbox(
|
||||||
|
BuildContext context,
|
||||||
List<PresentationEmail> listEmail,
|
List<PresentationEmail> listEmail,
|
||||||
PresentationMailbox currentMailbox
|
PresentationMailbox currentMailbox
|
||||||
) async {
|
) async {
|
||||||
if (_accountId != null) {
|
if (_accountId != null) {
|
||||||
final listEmailIds = listEmail.map((email) => email.id).toList();
|
final arguments = DestinationPickerArguments(_accountId!, MailboxActions.moveEmail);
|
||||||
final destinationMailbox = await push(
|
|
||||||
AppRoutes.destinationPicker,
|
if (BuildUtils.isWeb) {
|
||||||
arguments: DestinationPickerArguments(_accountId!, MailboxActions.moveEmail)
|
showDialogDestinationPicker(
|
||||||
);
|
context: context,
|
||||||
|
arguments: arguments,
|
||||||
|
onSelectedMailbox: (destinationMailbox) {
|
||||||
|
_dispatchMoveToMultipleAction(
|
||||||
|
_accountId!,
|
||||||
|
listEmail.listEmailIds,
|
||||||
|
currentMailbox,
|
||||||
|
destinationMailbox);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
final destinationMailbox = await push(
|
||||||
|
AppRoutes.destinationPicker,
|
||||||
|
arguments: arguments);
|
||||||
|
|
||||||
if (destinationMailbox != null && destinationMailbox is PresentationMailbox) {
|
if (destinationMailbox != null && destinationMailbox is PresentationMailbox) {
|
||||||
if (destinationMailbox.isTrash) {
|
if (destinationMailbox.isTrash) {
|
||||||
@@ -670,6 +683,45 @@ class ThreadController extends BaseController {
|
|||||||
destinationPath: destinationMailbox.mailboxPath));
|
destinationPath: destinationMailbox.mailboxPath));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (destinationMailbox != null && destinationMailbox is PresentationMailbox) {
|
||||||
|
_dispatchMoveToMultipleAction(
|
||||||
|
_accountId!,
|
||||||
|
listEmail.listEmailIds,
|
||||||
|
currentMailbox,
|
||||||
|
destinationMailbox);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _dispatchMoveToMultipleAction(
|
||||||
|
AccountId accountId,
|
||||||
|
List<EmailId> listEmailIds,
|
||||||
|
PresentationMailbox currentMailbox,
|
||||||
|
PresentationMailbox destinationMailbox
|
||||||
|
) {
|
||||||
|
if (destinationMailbox.isTrash) {
|
||||||
|
_moveSelectedEmailMultipleToTrashAction(accountId, MoveToMailboxRequest(
|
||||||
|
listEmailIds,
|
||||||
|
currentMailbox.id,
|
||||||
|
destinationMailbox.id,
|
||||||
|
MoveAction.moving,
|
||||||
|
EmailActionType.moveToTrash));
|
||||||
|
} else if (destinationMailbox.isSpam) {
|
||||||
|
_moveSelectedEmailMultipleToSpamAction(accountId, MoveToMailboxRequest(
|
||||||
|
listEmailIds,
|
||||||
|
currentMailbox.id,
|
||||||
|
destinationMailbox.id,
|
||||||
|
MoveAction.moving,
|
||||||
|
EmailActionType.moveToSpam));
|
||||||
|
} else {
|
||||||
|
_moveSelectedEmailMultipleToMailboxAction(accountId, MoveToMailboxRequest(
|
||||||
|
listEmailIds,
|
||||||
|
currentMailbox.id,
|
||||||
|
destinationMailbox.id,
|
||||||
|
MoveAction.moving,
|
||||||
|
EmailActionType.moveToMailbox,
|
||||||
|
destinationPath: destinationMailbox.mailboxPath));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -984,7 +1036,7 @@ class ThreadController extends BaseController {
|
|||||||
? selectionEmail.getCurrentMailboxContain(mailboxDashBoardController.mapMailboxById)
|
? selectionEmail.getCurrentMailboxContain(mailboxDashBoardController.mapMailboxById)
|
||||||
: currentMailbox;
|
: currentMailbox;
|
||||||
if (mailboxContainCurrent != null) {
|
if (mailboxContainCurrent != null) {
|
||||||
moveSelectedMultipleEmailToMailbox(selectionEmail, mailboxContainCurrent);
|
moveSelectedMultipleEmailToMailbox(context, selectionEmail, mailboxContainCurrent);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EmailActionType.moveToTrash:
|
case EmailActionType.moveToTrash:
|
||||||
@@ -1079,10 +1131,24 @@ class ThreadController extends BaseController {
|
|||||||
final accountId = mailboxDashBoardController.accountId.value;
|
final accountId = mailboxDashBoardController.accountId.value;
|
||||||
|
|
||||||
if (currentMailbox != null && accountId != null) {
|
if (currentMailbox != null && accountId != null) {
|
||||||
final destinationMailbox = await push(
|
final arguments = DestinationPickerArguments(accountId, MailboxActions.moveEmail);
|
||||||
AppRoutes.destinationPicker,
|
|
||||||
arguments: DestinationPickerArguments(accountId, MailboxActions.moveEmail)
|
if (BuildUtils.isWeb) {
|
||||||
);
|
showDialogDestinationPicker(
|
||||||
|
context: context,
|
||||||
|
arguments: arguments,
|
||||||
|
onSelectedMailbox: (destinationMailbox) {
|
||||||
|
_dispatchMoveToAction(
|
||||||
|
context,
|
||||||
|
accountId,
|
||||||
|
email,
|
||||||
|
currentMailbox,
|
||||||
|
destinationMailbox);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
final destinationMailbox = await push(
|
||||||
|
AppRoutes.destinationPicker,
|
||||||
|
arguments: arguments);
|
||||||
|
|
||||||
if (destinationMailbox != null && destinationMailbox is PresentationMailbox) {
|
if (destinationMailbox != null && destinationMailbox is PresentationMailbox) {
|
||||||
if (destinationMailbox.isTrash) {
|
if (destinationMailbox.isTrash) {
|
||||||
@@ -1109,6 +1175,47 @@ class ThreadController extends BaseController {
|
|||||||
destinationPath: destinationMailbox.mailboxPath));
|
destinationPath: destinationMailbox.mailboxPath));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (destinationMailbox != null && destinationMailbox is PresentationMailbox) {
|
||||||
|
_dispatchMoveToAction(
|
||||||
|
context,
|
||||||
|
accountId,
|
||||||
|
email,
|
||||||
|
currentMailbox,
|
||||||
|
destinationMailbox);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _dispatchMoveToAction(
|
||||||
|
BuildContext context,
|
||||||
|
AccountId accountId,
|
||||||
|
PresentationEmail emailSelected,
|
||||||
|
PresentationMailbox currentMailbox,
|
||||||
|
PresentationMailbox destinationMailbox
|
||||||
|
) {
|
||||||
|
if (destinationMailbox.isTrash) {
|
||||||
|
_moveToTrashAction(accountId, MoveToMailboxRequest(
|
||||||
|
[emailSelected.id],
|
||||||
|
currentMailbox.id,
|
||||||
|
destinationMailbox.id,
|
||||||
|
MoveAction.moving,
|
||||||
|
EmailActionType.moveToTrash));
|
||||||
|
} else if (destinationMailbox.isSpam) {
|
||||||
|
_moveToSpamAction(accountId, MoveToMailboxRequest(
|
||||||
|
[emailSelected.id],
|
||||||
|
currentMailbox.id,
|
||||||
|
destinationMailbox.id,
|
||||||
|
MoveAction.moving,
|
||||||
|
EmailActionType.moveToSpam));
|
||||||
|
} else {
|
||||||
|
_moveToMailboxAction(accountId, MoveToMailboxRequest(
|
||||||
|
[emailSelected.id],
|
||||||
|
currentMailbox.id,
|
||||||
|
destinationMailbox.id,
|
||||||
|
MoveAction.moving,
|
||||||
|
EmailActionType.moveToMailbox,
|
||||||
|
destinationPath: destinationMailbox.mailboxPath));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,70 +31,70 @@ import 'package:tmail_ui_user/main/pages/deferred_widget.dart';
|
|||||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
|
|
||||||
class AppPages {
|
class AppPages {
|
||||||
static final pages = [
|
static final pagesOnlyOnMobile = [
|
||||||
GetPage(
|
GetPage(
|
||||||
name: AppRoutes.home,
|
|
||||||
page: () => const HomeView(),
|
|
||||||
binding: HomeBindings()),
|
|
||||||
GetPage(
|
|
||||||
name: AppRoutes.login,
|
|
||||||
page: () => DeferredWidget(login.loadLibrary, () => login.LoginView()),
|
|
||||||
binding: LoginBindings()),
|
|
||||||
GetPage(
|
|
||||||
name: AppRoutes.session,
|
|
||||||
page: () => DeferredWidget(session.loadLibrary, () => session.SessionView()),
|
|
||||||
binding: SessionPageBindings()),
|
|
||||||
GetPage(
|
|
||||||
name: AppRoutes.dashboard,
|
|
||||||
page: () => DeferredWidget(mailbox_dashboard.loadLibrary, () => mailbox_dashboard.MailboxDashBoardView()),
|
|
||||||
binding: MailboxDashBoardBindings()),
|
|
||||||
if (!BuildUtils.isWeb)
|
|
||||||
GetPage(
|
|
||||||
name: AppRoutes.composer,
|
name: AppRoutes.composer,
|
||||||
opaque: false,
|
opaque: false,
|
||||||
page: () {
|
page: () => DeferredWidget(composer.loadLibrary, () => composer.ComposerView()),
|
||||||
ComposerBindings().dependencies();
|
binding: ComposerBindings()),
|
||||||
return DeferredWidget(composer.loadLibrary, () => composer.ComposerView());
|
|
||||||
}),
|
|
||||||
GetPage(
|
GetPage(
|
||||||
name: AppRoutes.destinationPicker,
|
name: AppRoutes.destinationPicker,
|
||||||
opaque: false,
|
opaque: false,
|
||||||
page: () => DeferredWidget(destination_picker.loadLibrary, () => destination_picker.DestinationPickerView()),
|
page: () => DeferredWidget(destination_picker.loadLibrary, () => destination_picker.DestinationPickerView()),
|
||||||
binding: DestinationPickerBindings()),
|
binding: DestinationPickerBindings()),
|
||||||
|
];
|
||||||
|
|
||||||
|
static final pages = [
|
||||||
GetPage(
|
GetPage(
|
||||||
name: AppRoutes.mailboxCreator,
|
name: AppRoutes.home,
|
||||||
opaque: false,
|
page: () => const HomeView(),
|
||||||
page: () => DeferredWidget(mailbox_creator.loadLibrary, () => mailbox_creator.MailboxCreatorView()),
|
binding: HomeBindings()),
|
||||||
binding: MailboxCreatorBindings()),
|
|
||||||
GetPage(
|
GetPage(
|
||||||
name: AppRoutes.settings,
|
name: AppRoutes.login,
|
||||||
page: () => DeferredWidget(manage_account_dashboard.loadLibrary, () => manage_account_dashboard.ManageAccountDashBoardView()),
|
page: () => DeferredWidget(login.loadLibrary, () => login.LoginView()),
|
||||||
binding: ManageAccountDashBoardBindings()),
|
binding: LoginBindings()),
|
||||||
GetPage(
|
GetPage(
|
||||||
name: AppRoutes.identityCreator,
|
name: AppRoutes.session,
|
||||||
opaque: false,
|
page: () => DeferredWidget(session.loadLibrary, () => session.SessionView()),
|
||||||
page: () => DeferredWidget(identity_creator.loadLibrary, () => identity_creator.IdentityCreatorView()),
|
binding: SessionPageBindings()),
|
||||||
binding: IdentityCreatorBindings()),
|
|
||||||
GetPage(
|
GetPage(
|
||||||
name: AppRoutes.rulesFilterCreator,
|
name: AppRoutes.dashboard,
|
||||||
opaque: false,
|
page: () => DeferredWidget(mailbox_dashboard.loadLibrary, () => mailbox_dashboard.MailboxDashBoardView()),
|
||||||
page: () => DeferredWidget(
|
binding: MailboxDashBoardBindings()),
|
||||||
rules_filter_creator.loadLibrary,
|
|
||||||
() => rules_filter_creator.RuleFilterCreatorView()),
|
|
||||||
binding: RulesFilterCreatorBindings()),
|
|
||||||
GetPage(
|
GetPage(
|
||||||
name: AppRoutes.emailsForwardCreator,
|
name: AppRoutes.mailboxCreator,
|
||||||
opaque: false,
|
opaque: false,
|
||||||
page: () => DeferredWidget(
|
page: () => DeferredWidget(mailbox_creator.loadLibrary, () => mailbox_creator.MailboxCreatorView()),
|
||||||
emails_forward_creator.loadLibrary,
|
binding: MailboxCreatorBindings()),
|
||||||
() => emails_forward_creator.EmailsForwardCreatorView()),
|
GetPage(
|
||||||
binding: EmailsForwardCreatorBindings()),
|
name: AppRoutes.settings,
|
||||||
|
page: () => DeferredWidget(manage_account_dashboard.loadLibrary,
|
||||||
|
() => manage_account_dashboard.ManageAccountDashBoardView()),
|
||||||
|
binding: ManageAccountDashBoardBindings()),
|
||||||
|
GetPage(
|
||||||
|
name: AppRoutes.identityCreator,
|
||||||
|
opaque: false,
|
||||||
|
page: () => DeferredWidget(identity_creator.loadLibrary,
|
||||||
|
() => identity_creator.IdentityCreatorView()),
|
||||||
|
binding: IdentityCreatorBindings()),
|
||||||
|
GetPage(
|
||||||
|
name: AppRoutes.rulesFilterCreator,
|
||||||
|
opaque: false,
|
||||||
|
page: () => DeferredWidget(rules_filter_creator.loadLibrary,
|
||||||
|
() => rules_filter_creator.RuleFilterCreatorView()),
|
||||||
|
binding: RulesFilterCreatorBindings()),
|
||||||
|
GetPage(
|
||||||
|
name: AppRoutes.emailsForwardCreator,
|
||||||
|
opaque: false,
|
||||||
|
page: () => DeferredWidget(emails_forward_creator.loadLibrary,
|
||||||
|
() => emails_forward_creator.EmailsForwardCreatorView()),
|
||||||
|
binding: EmailsForwardCreatorBindings()),
|
||||||
GetPage(
|
GetPage(
|
||||||
name: AppRoutes.contact,
|
name: AppRoutes.contact,
|
||||||
opaque: false,
|
opaque: false,
|
||||||
page: () => DeferredWidget(
|
page: () => DeferredWidget(contact_view.loadLibrary, () => contact_view.ContactView()),
|
||||||
contact_view.loadLibrary,
|
|
||||||
() => contact_view.ContactView()),
|
|
||||||
binding: ContactBindings()),
|
binding: ContactBindings()),
|
||||||
];
|
if (!BuildUtils.isWeb)
|
||||||
|
...pagesOnlyOnMobile
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,13 +3,12 @@ abstract class AppRoutes {
|
|||||||
static const login = '/login';
|
static const login = '/login';
|
||||||
static const session = '/session';
|
static const session = '/session';
|
||||||
static const dashboard = '/dashboard';
|
static const dashboard = '/dashboard';
|
||||||
static const composer = '/composer';
|
|
||||||
static const destinationPicker = '/destination_picker';
|
|
||||||
static const settings = '/settings';
|
static const settings = '/settings';
|
||||||
|
|
||||||
|
static const composer = '/composer';
|
||||||
|
static const destinationPicker = '/destination_picker';
|
||||||
static const mailboxCreator = '$dashboard/mailbox_creator';
|
static const mailboxCreator = '$dashboard/mailbox_creator';
|
||||||
static const contact = '$dashboard/contact';
|
static const contact = '$dashboard/contact';
|
||||||
|
|
||||||
static const identityCreator = '$settings/identity_creator';
|
static const identityCreator = '$settings/identity_creator';
|
||||||
static const rulesFilterCreator = '$settings/rules_filter_creator';
|
static const rulesFilterCreator = '$settings/rules_filter_creator';
|
||||||
static const emailsForwardCreator = '$settings/emails_forward_creator';
|
static const emailsForwardCreator = '$settings/emails_forward_creator';
|
||||||
|
|||||||
Reference in New Issue
Block a user