TF-1427 Abstraction mailbox method action
This commit is contained in:
@@ -1,16 +1,47 @@
|
|||||||
|
import 'package:core/presentation/extensions/color_extension.dart';
|
||||||
|
import 'package:core/presentation/resources/image_paths.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/dialog/confirmation_dialog_builder.dart';
|
||||||
|
import 'package:core/presentation/views/dialog/edit_text_dialog_builder.dart';
|
||||||
|
import 'package:core/presentation/views/modal_sheets/edit_text_modal_sheet_builder.dart';
|
||||||
|
import 'package:core/utils/build_utils.dart';
|
||||||
|
import 'package:flutter/material.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:model/mailbox/select_mode.dart';
|
||||||
|
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
||||||
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree_builder.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree_builder.dart';
|
||||||
import 'package:core/utils/app_logger.dart';
|
import 'package:core/utils/app_logger.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/duplicate_name_validator.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/empty_name_validator.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_creator/presentation/extensions/validator_failure_extension.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_creator/domain/state/verify_name_view_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
||||||
|
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/route_navigation.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||||
|
|
||||||
abstract class BaseMailboxController extends BaseController {
|
abstract class BaseMailboxController extends BaseController {
|
||||||
final TreeBuilder _treeBuilder;
|
final TreeBuilder _treeBuilder;
|
||||||
|
final VerifyNameInteractor verifyNameInteractor;
|
||||||
|
jmap.State? currentMailboxState;
|
||||||
|
|
||||||
BaseMailboxController(this._treeBuilder);
|
BaseMailboxController(
|
||||||
|
this._treeBuilder,
|
||||||
|
this.verifyNameInteractor
|
||||||
|
);
|
||||||
|
|
||||||
final personalMailboxTree = MailboxTree(MailboxNode.root()).obs;
|
final personalMailboxTree = MailboxTree(MailboxNode.root()).obs;
|
||||||
final defaultMailboxTree = MailboxTree(MailboxNode.root()).obs;
|
final defaultMailboxTree = MailboxTree(MailboxNode.root()).obs;
|
||||||
@@ -159,4 +190,206 @@ abstract class BaseMailboxController extends BaseController {
|
|||||||
|
|
||||||
MailboxNode get teamMailboxesRootNode => teamMailboxesTree.value.root;
|
MailboxNode get teamMailboxesRootNode => teamMailboxesTree.value.root;
|
||||||
|
|
||||||
|
List<String> getListMailboxNameInParentMailbox(PresentationMailbox parentMailbox) {
|
||||||
|
if (parentMailbox.parentId == null) {
|
||||||
|
final allChildrenAtMailboxLocation = (defaultMailboxTree.value.root.childrenItems ?? <MailboxNode>[])
|
||||||
|
+ (personalMailboxTree.value.root.childrenItems ?? <MailboxNode>[])
|
||||||
|
+ (teamMailboxesTree.value.root.childrenItems ?? <MailboxNode>[]);
|
||||||
|
if (allChildrenAtMailboxLocation.isNotEmpty) {
|
||||||
|
final listMailboxNameAsStringExist = allChildrenAtMailboxLocation
|
||||||
|
.where((mailboxNode) => mailboxNode.nameNotEmpty)
|
||||||
|
.map((mailboxNode) => mailboxNode.mailboxNameAsString)
|
||||||
|
.toList();
|
||||||
|
return listMailboxNameAsStringExist;
|
||||||
|
} else {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
final mailboxNodeLocation = findMailboxNodeById(parentMailbox.parentId!);
|
||||||
|
if (mailboxNodeLocation != null && mailboxNodeLocation.childrenItems?.isNotEmpty == true) {
|
||||||
|
final allChildrenAtMailboxLocation = mailboxNodeLocation.childrenItems!;
|
||||||
|
final listMailboxNameAsStringExist = allChildrenAtMailboxLocation
|
||||||
|
.where((mailboxNode) => mailboxNode.nameNotEmpty)
|
||||||
|
.map((mailboxNode) => mailboxNode.mailboxNameAsString)
|
||||||
|
.toList();
|
||||||
|
return listMailboxNameAsStringExist;
|
||||||
|
} else {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String? verifyMailboxNameAction(
|
||||||
|
BuildContext context,
|
||||||
|
String newName,
|
||||||
|
List<String> listMailboxName,
|
||||||
|
MailboxActions mailboxActions
|
||||||
|
) {
|
||||||
|
return verifyNameInteractor.execute(newName, [
|
||||||
|
EmptyNameValidator(),
|
||||||
|
DuplicateNameValidator(listMailboxName),
|
||||||
|
]).fold((failure) {
|
||||||
|
if (failure is VerifyNameFailure) {
|
||||||
|
return failure.getMessage(context, actions: mailboxActions);
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}, (success) => null);
|
||||||
|
}
|
||||||
|
|
||||||
|
void openDialogRenameMailboxAction(
|
||||||
|
BuildContext context,
|
||||||
|
PresentationMailbox presentationMailbox,
|
||||||
|
ResponsiveUtils responsiveUtils, {
|
||||||
|
required Function(PresentationMailbox mailbox, MailboxName newMailboxName) onRenameMailboxAction
|
||||||
|
}) {
|
||||||
|
final listMailboxName = getListMailboxNameInParentMailbox(presentationMailbox);
|
||||||
|
|
||||||
|
if (responsiveUtils.isMobile(context)) {
|
||||||
|
(EditTextModalSheetBuilder()
|
||||||
|
..key(const Key('rename_mailbox_dialog'))
|
||||||
|
..title(AppLocalizations.of(context).rename_mailbox)
|
||||||
|
..cancelText(AppLocalizations.of(context).cancel)
|
||||||
|
..boxConstraints(responsiveUtils.isLandscapeMobile(context)
|
||||||
|
? const BoxConstraints(maxWidth: 400)
|
||||||
|
: null)
|
||||||
|
..onConfirmAction(
|
||||||
|
AppLocalizations.of(context).rename,
|
||||||
|
(value) => onRenameMailboxAction(presentationMailbox, MailboxName(value))
|
||||||
|
)
|
||||||
|
..setErrorString((value) {
|
||||||
|
return verifyMailboxNameAction(
|
||||||
|
context,
|
||||||
|
value,
|
||||||
|
listMailboxName,
|
||||||
|
MailboxActions.rename
|
||||||
|
);
|
||||||
|
})
|
||||||
|
..setTextController(TextEditingController.fromValue(
|
||||||
|
TextEditingValue(
|
||||||
|
text: presentationMailbox.name?.name ?? '',
|
||||||
|
selection: TextSelection(
|
||||||
|
baseOffset: 0,
|
||||||
|
extentOffset: presentationMailbox.name?.name.length ?? 0
|
||||||
|
)
|
||||||
|
)))
|
||||||
|
).show(context);
|
||||||
|
} else {
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
|
||||||
|
builder: (context) =>
|
||||||
|
PointerInterceptor(child: (EditTextDialogBuilder()
|
||||||
|
..key(const Key('rename_mailbox_dialog'))
|
||||||
|
..title(AppLocalizations.of(context).rename_mailbox)
|
||||||
|
..cancelText(AppLocalizations.of(context).cancel)
|
||||||
|
..setErrorString((value) {
|
||||||
|
return verifyMailboxNameAction(
|
||||||
|
context,
|
||||||
|
value,
|
||||||
|
listMailboxName,
|
||||||
|
MailboxActions.rename
|
||||||
|
);
|
||||||
|
})
|
||||||
|
..setTextController(TextEditingController.fromValue(
|
||||||
|
TextEditingValue(
|
||||||
|
text: presentationMailbox.name?.name ?? '',
|
||||||
|
selection: TextSelection(
|
||||||
|
baseOffset: 0,
|
||||||
|
extentOffset: presentationMailbox.name?.name.length ?? 0
|
||||||
|
)
|
||||||
|
))
|
||||||
|
)
|
||||||
|
..onConfirmButtonAction(
|
||||||
|
AppLocalizations.of(context).rename,
|
||||||
|
(value) => onRenameMailboxAction(presentationMailbox, MailboxName(value))
|
||||||
|
)
|
||||||
|
).build())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void moveMailboxAction(
|
||||||
|
BuildContext context,
|
||||||
|
PresentationMailbox mailboxSelected,
|
||||||
|
MailboxDashBoardController dashBoardController, {
|
||||||
|
required Function(PresentationMailbox mailboxSelected, PresentationMailbox? destinationMailbox) onMovingMailboxAction
|
||||||
|
}) async {
|
||||||
|
final accountId = dashBoardController.accountId.value;
|
||||||
|
final session = dashBoardController.sessionCurrent;
|
||||||
|
if (accountId != null && session != null) {
|
||||||
|
|
||||||
|
final arguments = DestinationPickerArguments(
|
||||||
|
accountId,
|
||||||
|
MailboxActions.move,
|
||||||
|
session,
|
||||||
|
mailboxIdSelected: mailboxSelected.id
|
||||||
|
);
|
||||||
|
|
||||||
|
if (BuildUtils.isWeb) {
|
||||||
|
showDialogDestinationPicker(
|
||||||
|
context: context,
|
||||||
|
arguments: arguments,
|
||||||
|
onSelectedMailbox: (destinationMailbox) {
|
||||||
|
onMovingMailboxAction(
|
||||||
|
mailboxSelected,
|
||||||
|
destinationMailbox == PresentationMailbox.unifiedMailbox
|
||||||
|
? null
|
||||||
|
: destinationMailbox
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
final destinationMailbox = await push(
|
||||||
|
AppRoutes.destinationPicker,
|
||||||
|
arguments: arguments);
|
||||||
|
|
||||||
|
if (destinationMailbox is PresentationMailbox) {
|
||||||
|
onMovingMailboxAction(
|
||||||
|
mailboxSelected,
|
||||||
|
destinationMailbox == PresentationMailbox.unifiedMailbox
|
||||||
|
? null
|
||||||
|
: destinationMailbox
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void openConfirmationDialogDeleteMailboxAction(
|
||||||
|
BuildContext context,
|
||||||
|
ResponsiveUtils responsiveUtils,
|
||||||
|
ImagePaths imagePaths,
|
||||||
|
PresentationMailbox presentationMailbox, {
|
||||||
|
required Function(PresentationMailbox mailbox) onDeleteMailboxAction
|
||||||
|
}) {
|
||||||
|
if (responsiveUtils.isLandscapeMobile(context) || responsiveUtils.isPortraitMobile(context)) {
|
||||||
|
(ConfirmationDialogActionSheetBuilder(context)
|
||||||
|
..messageText(AppLocalizations.of(context).message_confirmation_dialog_delete_mailbox(presentationMailbox.name?.name ?? ''))
|
||||||
|
..onCancelAction(AppLocalizations.of(context).cancel, () => popBack())
|
||||||
|
..onConfirmAction(AppLocalizations.of(context).delete, () => onDeleteMailboxAction(presentationMailbox))
|
||||||
|
).show();
|
||||||
|
} else {
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
|
||||||
|
builder: (context) => PointerInterceptor(
|
||||||
|
child: (ConfirmDialogBuilder(imagePaths)
|
||||||
|
..key(const Key('confirm_dialog_delete_mailbox'))
|
||||||
|
..title(AppLocalizations.of(context).delete_mailboxes)
|
||||||
|
..content(AppLocalizations.of(context).message_confirmation_dialog_delete_mailbox(presentationMailbox.name?.name ?? ''))
|
||||||
|
..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill))
|
||||||
|
..colorConfirmButton(AppColor.colorConfirmActionDialog)
|
||||||
|
..styleTextConfirmButton(const TextStyle(
|
||||||
|
fontSize: 17,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
color: AppColor.colorActionDeleteConfirmDialog
|
||||||
|
))
|
||||||
|
..onCloseButtonAction(() => popBack())
|
||||||
|
..onConfirmButtonAction(AppLocalizations.of(context).delete, () => onDeleteMailboxAction(presentationMailbox))
|
||||||
|
..onCancelButtonAction(AppLocalizations.of(context).cancel, () => popBack())
|
||||||
|
).build())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
|
||||||
|
import 'package:core/utils/app_logger.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/route_utils.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
|
mixin MailboxActionHandlerMixin {
|
||||||
|
|
||||||
|
void openMailboxInNewTabAction(PresentationMailbox mailbox) {
|
||||||
|
final mailboxRouteWeb = RouteUtils.generateRouteBrowser(
|
||||||
|
AppRoutes.dashboard,
|
||||||
|
NavigationRouter(mailboxId: mailbox.id)
|
||||||
|
);
|
||||||
|
log('MailboxActionHandlerMixin::openMailboxInNewTabAction(): mailboxRouteWeb: $mailboxRouteWeb');
|
||||||
|
AppUtils.launchLink(mailboxRouteWeb.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
void markAsReadMailboxAction(
|
||||||
|
BuildContext context,
|
||||||
|
PresentationMailbox presentationMailbox,
|
||||||
|
MailboxDashBoardController dashboardController,
|
||||||
|
{
|
||||||
|
Function(BuildContext)? onCallbackAction
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
final accountId = dashboardController.accountId.value;
|
||||||
|
final mailboxId = presentationMailbox.id;
|
||||||
|
final mailboxName = presentationMailbox.name;
|
||||||
|
final countEmailsUnread = presentationMailbox.unreadEmails?.value.value ?? 0;
|
||||||
|
if (accountId != null && mailboxName != null) {
|
||||||
|
dashboardController.markAsReadMailbox(
|
||||||
|
accountId,
|
||||||
|
mailboxId,
|
||||||
|
mailboxName,
|
||||||
|
countEmailsUnread.toInt()
|
||||||
|
);
|
||||||
|
|
||||||
|
onCallbackAction?.call(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -44,12 +44,12 @@ class DestinationPickerBindings extends BaseBindings {
|
|||||||
@override
|
@override
|
||||||
void bindingsController() {
|
void bindingsController() {
|
||||||
Get.lazyPut(() => DestinationPickerController(
|
Get.lazyPut(() => DestinationPickerController(
|
||||||
Get.find<GetAllMailboxInteractor>(),
|
Get.find<GetAllMailboxInteractor>(),
|
||||||
Get.find<SearchMailboxInteractor>(),
|
Get.find<SearchMailboxInteractor>(),
|
||||||
Get.find<CreateNewMailboxInteractor>(),
|
Get.find<CreateNewMailboxInteractor>(),
|
||||||
Get.find<RefreshAllMailboxInteractor>(),
|
Get.find<RefreshAllMailboxInteractor>(),
|
||||||
Get.find<VerifyNameInteractor>(),
|
Get.find<TreeBuilder>(),
|
||||||
Get.find<TreeBuilder>(),
|
Get.find<VerifyNameInteractor>(),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_action
|
|||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories_expand_mode.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories_expand_mode.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/duplicate_name_validator.dart';
|
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/duplicate_name_validator.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/empty_name_validator.dart';
|
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/empty_name_validator.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/state/verify_name_view_state.dart';
|
import 'package:tmail_ui_user/features/mailbox_creator/domain/state/verify_name_view_state.dart';
|
||||||
@@ -59,7 +60,6 @@ class DestinationPickerController extends BaseMailboxController {
|
|||||||
final SearchMailboxInteractor _searchMailboxInteractor;
|
final SearchMailboxInteractor _searchMailboxInteractor;
|
||||||
final CreateNewMailboxInteractor _createNewMailboxInteractor;
|
final CreateNewMailboxInteractor _createNewMailboxInteractor;
|
||||||
final RefreshAllMailboxInteractor _refreshAllMailboxInteractor;
|
final RefreshAllMailboxInteractor _refreshAllMailboxInteractor;
|
||||||
final VerifyNameInteractor _verifyNameInteractor;
|
|
||||||
|
|
||||||
final mailboxAction = Rxn<MailboxActions>();
|
final mailboxAction = Rxn<MailboxActions>();
|
||||||
final listMailboxSearched = <PresentationMailbox>[].obs;
|
final listMailboxSearched = <PresentationMailbox>[].obs;
|
||||||
@@ -88,9 +88,9 @@ class DestinationPickerController extends BaseMailboxController {
|
|||||||
this._searchMailboxInteractor,
|
this._searchMailboxInteractor,
|
||||||
this._createNewMailboxInteractor,
|
this._createNewMailboxInteractor,
|
||||||
this._refreshAllMailboxInteractor,
|
this._refreshAllMailboxInteractor,
|
||||||
this._verifyNameInteractor,
|
TreeBuilder treeBuilder,
|
||||||
treeBuilder,
|
VerifyNameInteractor verifyNameInteractor,
|
||||||
) : super(treeBuilder);
|
) : super(treeBuilder, verifyNameInteractor);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
@@ -201,7 +201,7 @@ class DestinationPickerController extends BaseMailboxController {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _verifyNameInteractor.execute(
|
return verifyNameInteractor.execute(
|
||||||
nameMailbox,
|
nameMailbox,
|
||||||
[
|
[
|
||||||
EmptyNameValidator(),
|
EmptyNameValidator(),
|
||||||
|
|||||||
@@ -282,8 +282,8 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
|
|||||||
mailboxActions: actions,
|
mailboxActions: actions,
|
||||||
mailboxIdAlreadySelected: mailboxIdSelected,
|
mailboxIdAlreadySelected: mailboxIdSelected,
|
||||||
mailboxDisplayed: MailboxDisplayed.destinationPicker)
|
mailboxDisplayed: MailboxDisplayed.destinationPicker)
|
||||||
..addOnOpenMailboxFolderClick((node) => _pickMailboxNode(context, node))
|
..addOnClickOpenMailboxNodeAction((node) => _pickMailboxNode(context, node))
|
||||||
..addOnExpandFolderActionClick((mailboxNode) => controller.toggleMailboxFolder(mailboxNode))
|
..addOnClickExpandMailboxNodeAction((mailboxNode) => controller.toggleMailboxFolder(mailboxNode))
|
||||||
).build(),
|
).build(),
|
||||||
children: _buildListChildTileWidget(
|
children: _buildListChildTileWidget(
|
||||||
context,
|
context,
|
||||||
@@ -300,7 +300,7 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
|
|||||||
mailboxDisplayed: MailboxDisplayed.destinationPicker,
|
mailboxDisplayed: MailboxDisplayed.destinationPicker,
|
||||||
mailboxIdAlreadySelected: mailboxIdSelected,
|
mailboxIdAlreadySelected: mailboxIdSelected,
|
||||||
mailboxActions: actions)
|
mailboxActions: actions)
|
||||||
..addOnOpenMailboxFolderClick((node) => _pickMailboxNode(context, node))
|
..addOnClickOpenMailboxNodeAction((node) => _pickMailboxNode(context, node))
|
||||||
).build();
|
).build();
|
||||||
}})
|
}})
|
||||||
.toList() ?? <Widget>[];
|
.toList() ?? <Widget>[];
|
||||||
|
|||||||
@@ -49,17 +49,17 @@ class MailboxBindings extends BaseBindings {
|
|||||||
@override
|
@override
|
||||||
void bindingsController() {
|
void bindingsController() {
|
||||||
Get.put(MailboxController(
|
Get.put(MailboxController(
|
||||||
Get.find<GetAllMailboxInteractor>(),
|
Get.find<GetAllMailboxInteractor>(),
|
||||||
Get.find<RefreshAllMailboxInteractor>(),
|
Get.find<RefreshAllMailboxInteractor>(),
|
||||||
Get.find<CreateNewMailboxInteractor>(),
|
Get.find<CreateNewMailboxInteractor>(),
|
||||||
Get.find<SearchMailboxInteractor>(),
|
Get.find<SearchMailboxInteractor>(),
|
||||||
Get.find<DeleteMultipleMailboxInteractor>(),
|
Get.find<DeleteMultipleMailboxInteractor>(),
|
||||||
Get.find<VerifyNameInteractor>(),
|
Get.find<RenameMailboxInteractor>(),
|
||||||
Get.find<RenameMailboxInteractor>(),
|
Get.find<MoveMailboxInteractor>(),
|
||||||
Get.find<MoveMailboxInteractor>(),
|
Get.find<SubscribeMailboxInteractor>(),
|
||||||
Get.find<SubscribeMailboxInteractor>(),
|
Get.find<SubscribeMultipleMailboxInteractor>(),
|
||||||
Get.find<SubscribeMultipleMailboxInteractor>(),
|
Get.find<TreeBuilder>(),
|
||||||
Get.find<TreeBuilder>(),
|
Get.find<VerifyNameInteractor>()
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,10 +17,10 @@ import 'package:model/model.dart';
|
|||||||
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
||||||
import 'package:rxdart/transformers.dart';
|
import 'package:rxdart/transformers.dart';
|
||||||
import 'package:tmail_ui_user/features/base/base_mailbox_controller.dart';
|
import 'package:tmail_ui_user/features/base/base_mailbox_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/features/base/mixin/mailbox_action_handler_mixin.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/state/save_email_as_drafts_state.dart';
|
import 'package:tmail_ui_user/features/composer/domain/state/save_email_as_drafts_state.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/state/send_email_state.dart';
|
import 'package:tmail_ui_user/features/composer/domain/state/send_email_state.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/state/update_email_drafts_state.dart';
|
import 'package:tmail_ui_user/features/composer/domain/state/update_email_drafts_state.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/state/delete_email_permanently_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/delete_email_permanently_state.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/state/delete_multiple_emails_permanently_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/delete_multiple_emails_permanently_state.dart';
|
||||||
@@ -59,19 +59,17 @@ import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_action
|
|||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories_expand_mode.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories_expand_mode.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/open_mailbox_view_event.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/open_mailbox_view_event.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_utils.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_utils.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/duplicate_name_validator.dart';
|
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/empty_name_validator.dart';
|
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/state/verify_name_view_state.dart';
|
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/presentation/extensions/validator_failure_extension.dart';
|
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/mailbox_creator_arguments.dart';
|
import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/mailbox_creator_arguments.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/new_mailbox_arguments.dart';
|
import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/new_mailbox_arguments.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/remove_email_drafts_state.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/remove_email_drafts_state.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
|
||||||
|
import 'package:tmail_ui_user/features/search/mailbox/presentation/search_mailbox_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/state/empty_trash_folder_state.dart';
|
import 'package:tmail_ui_user/features/thread/domain/state/empty_trash_folder_state.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/state/mark_as_multiple_email_read_state.dart';
|
import 'package:tmail_ui_user/features/thread/domain/state/mark_as_multiple_email_read_state.dart';
|
||||||
@@ -83,10 +81,9 @@ import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
|||||||
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
|
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_utils.dart';
|
import 'package:tmail_ui_user/main/routes/route_utils.dart';
|
||||||
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
|
||||||
import 'package:uuid/uuid.dart';
|
import 'package:uuid/uuid.dart';
|
||||||
|
|
||||||
class MailboxController extends BaseMailboxController {
|
class MailboxController extends BaseMailboxController with MailboxActionHandlerMixin {
|
||||||
|
|
||||||
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
|
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
|
||||||
final _appToast = Get.find<AppToast>();
|
final _appToast = Get.find<AppToast>();
|
||||||
@@ -99,7 +96,6 @@ class MailboxController extends BaseMailboxController {
|
|||||||
final CreateNewMailboxInteractor _createNewMailboxInteractor;
|
final CreateNewMailboxInteractor _createNewMailboxInteractor;
|
||||||
final SearchMailboxInteractor _searchMailboxInteractor;
|
final SearchMailboxInteractor _searchMailboxInteractor;
|
||||||
final DeleteMultipleMailboxInteractor _deleteMultipleMailboxInteractor;
|
final DeleteMultipleMailboxInteractor _deleteMultipleMailboxInteractor;
|
||||||
final VerifyNameInteractor _verifyNameInteractor;
|
|
||||||
final RenameMailboxInteractor _renameMailboxInteractor;
|
final RenameMailboxInteractor _renameMailboxInteractor;
|
||||||
final MoveMailboxInteractor _moveMailboxInteractor;
|
final MoveMailboxInteractor _moveMailboxInteractor;
|
||||||
final SubscribeMailboxInteractor _subscribeMailboxInteractor;
|
final SubscribeMailboxInteractor _subscribeMailboxInteractor;
|
||||||
@@ -116,9 +112,6 @@ class MailboxController extends BaseMailboxController {
|
|||||||
final searchFocus = FocusNode();
|
final searchFocus = FocusNode();
|
||||||
final mailboxListScrollController = ScrollController();
|
final mailboxListScrollController = ScrollController();
|
||||||
|
|
||||||
jmap.State? _currentMailboxState;
|
|
||||||
List<String> listMailboxNameAsStringExist = <String>[];
|
|
||||||
|
|
||||||
PresentationMailbox? get selectedMailbox => mailboxDashBoardController.selectedMailbox.value;
|
PresentationMailbox? get selectedMailbox => mailboxDashBoardController.selectedMailbox.value;
|
||||||
|
|
||||||
PresentationEmail? get selectedEmail => mailboxDashBoardController.selectedEmail.value;
|
PresentationEmail? get selectedEmail => mailboxDashBoardController.selectedEmail.value;
|
||||||
@@ -129,13 +122,13 @@ class MailboxController extends BaseMailboxController {
|
|||||||
this._createNewMailboxInteractor,
|
this._createNewMailboxInteractor,
|
||||||
this._searchMailboxInteractor,
|
this._searchMailboxInteractor,
|
||||||
this._deleteMultipleMailboxInteractor,
|
this._deleteMultipleMailboxInteractor,
|
||||||
this._verifyNameInteractor,
|
|
||||||
this._renameMailboxInteractor,
|
this._renameMailboxInteractor,
|
||||||
this._moveMailboxInteractor,
|
this._moveMailboxInteractor,
|
||||||
this._subscribeMailboxInteractor,
|
this._subscribeMailboxInteractor,
|
||||||
this._subscribeMultipleMailboxInteractor,
|
this._subscribeMultipleMailboxInteractor,
|
||||||
treeBuilder,
|
TreeBuilder treeBuilder,
|
||||||
) : super(treeBuilder);
|
VerifyNameInteractor verifyNameInteractor,
|
||||||
|
) : super(treeBuilder, verifyNameInteractor);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
@@ -168,10 +161,10 @@ class MailboxController extends BaseMailboxController {
|
|||||||
super.onData(newState);
|
super.onData(newState);
|
||||||
newState.map((success) async {
|
newState.map((success) async {
|
||||||
if (success is GetAllMailboxSuccess) {
|
if (success is GetAllMailboxSuccess) {
|
||||||
_currentMailboxState = success.currentMailboxState;
|
currentMailboxState = success.currentMailboxState;
|
||||||
_buildMailboxTreeHasSubscribed(success.mailboxList);
|
_buildMailboxTreeHasSubscribed(success.mailboxList);
|
||||||
} else if (success is RefreshChangesAllMailboxSuccess) {
|
} else if (success is RefreshChangesAllMailboxSuccess) {
|
||||||
_currentMailboxState = success.currentMailboxState;
|
currentMailboxState = success.currentMailboxState;
|
||||||
_refreshMailboxTreeHasSubscribed(success.mailboxList);
|
_refreshMailboxTreeHasSubscribed(success.mailboxList);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -278,7 +271,7 @@ class MailboxController extends BaseMailboxController {
|
|||||||
ever(mailboxDashBoardController.dashBoardAction, (action) {
|
ever(mailboxDashBoardController.dashBoardAction, (action) {
|
||||||
if (action is ClearSearchEmailAction) {
|
if (action is ClearSearchEmailAction) {
|
||||||
_switchBackToMailboxDefault();
|
_switchBackToMailboxDefault();
|
||||||
} else if (action is OpenSpamMailboxAction) {
|
} else if (action is OpenMailboxAction) {
|
||||||
openMailbox(action.context, action.presentationMailbox);
|
openMailbox(action.context, action.presentationMailbox);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -290,7 +283,7 @@ class MailboxController extends BaseMailboxController {
|
|||||||
}
|
}
|
||||||
mailboxDashBoardController.clearMailboxUIAction();
|
mailboxDashBoardController.clearMailboxUIAction();
|
||||||
} else if (action is RefreshChangeMailboxAction) {
|
} else if (action is RefreshChangeMailboxAction) {
|
||||||
if (action.newState != _currentMailboxState) {
|
if (action.newState != currentMailboxState) {
|
||||||
refreshMailboxChanges();
|
refreshMailboxChanges();
|
||||||
}
|
}
|
||||||
mailboxDashBoardController.clearMailboxUIAction();
|
mailboxDashBoardController.clearMailboxUIAction();
|
||||||
@@ -340,7 +333,7 @@ class MailboxController extends BaseMailboxController {
|
|||||||
void refreshMailboxChanges({jmap.State? currentMailboxState}) {
|
void refreshMailboxChanges({jmap.State? currentMailboxState}) {
|
||||||
mailboxDashBoardController.showSpamReportBanner();
|
mailboxDashBoardController.showSpamReportBanner();
|
||||||
log('MailboxController::refreshMailboxChanges(): currentMailboxState: $currentMailboxState');
|
log('MailboxController::refreshMailboxChanges(): currentMailboxState: $currentMailboxState');
|
||||||
final newMailboxState = currentMailboxState ?? _currentMailboxState;
|
final newMailboxState = currentMailboxState ?? this.currentMailboxState;
|
||||||
log('MailboxController::refreshMailboxChanges(): newMailboxState: $newMailboxState');
|
log('MailboxController::refreshMailboxChanges(): newMailboxState: $newMailboxState');
|
||||||
final accountId = mailboxDashBoardController.accountId.value;
|
final accountId = mailboxDashBoardController.accountId.value;
|
||||||
final session = mailboxDashBoardController.sessionCurrent;
|
final session = mailboxDashBoardController.sessionCurrent;
|
||||||
@@ -605,7 +598,8 @@ class MailboxController extends BaseMailboxController {
|
|||||||
|
|
||||||
void enableSearch() {
|
void enableSearch() {
|
||||||
_cancelSelectMailbox();
|
_cancelSelectMailbox();
|
||||||
searchState.value = searchState.value.enableSearchState();
|
SearchMailboxBindings().dependencies();
|
||||||
|
mailboxDashBoardController.searchMailboxActivated.value = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void disableSearch() {
|
void disableSearch() {
|
||||||
@@ -705,58 +699,34 @@ class MailboxController extends BaseMailboxController {
|
|||||||
_openConfirmationDialogDeleteMultipleMailboxAction(context, selectedMailboxList);
|
_openConfirmationDialogDeleteMultipleMailboxAction(context, selectedMailboxList);
|
||||||
break;
|
break;
|
||||||
case MailboxActions.rename:
|
case MailboxActions.rename:
|
||||||
_openDialogRenameMailboxAction(context, selectedMailboxList.first);
|
openDialogRenameMailboxAction(
|
||||||
|
context,
|
||||||
|
selectedMailboxList.first,
|
||||||
|
_responsiveUtils,
|
||||||
|
onRenameMailboxAction: _renameMailboxAction
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case MailboxActions.markAsRead:
|
case MailboxActions.markAsRead:
|
||||||
_markAsReadMailboxAction(context, selectedMailboxList.first);
|
markAsReadMailboxAction(
|
||||||
|
context,
|
||||||
|
selectedMailboxList.first,
|
||||||
|
mailboxDashBoardController,
|
||||||
|
onCallbackAction: closeMailboxScreen
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case MailboxActions.move:
|
case MailboxActions.move:
|
||||||
_moveMailboxAction(context, selectedMailboxList.first);
|
moveMailboxAction(
|
||||||
|
context,
|
||||||
|
selectedMailboxList.first,
|
||||||
|
mailboxDashBoardController,
|
||||||
|
onMovingMailboxAction: _invokeMovingMailboxAction
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _openConfirmationDialogDeleteMailboxAction(
|
|
||||||
BuildContext context,
|
|
||||||
PresentationMailbox presentationMailbox
|
|
||||||
) {
|
|
||||||
if (_responsiveUtils.isLandscapeMobile(context) ||
|
|
||||||
_responsiveUtils.isPortraitMobile(context)) {
|
|
||||||
(ConfirmationDialogActionSheetBuilder(context)
|
|
||||||
..messageText(AppLocalizations.of(context)
|
|
||||||
.message_confirmation_dialog_delete_mailbox(presentationMailbox.name?.name ?? ''))
|
|
||||||
..onCancelAction(AppLocalizations.of(context).cancel, () =>
|
|
||||||
popBack())
|
|
||||||
..onConfirmAction(AppLocalizations.of(context).delete, () =>
|
|
||||||
_deleteMailboxAction(presentationMailbox)))
|
|
||||||
.show();
|
|
||||||
} else {
|
|
||||||
showDialog(
|
|
||||||
context: context,
|
|
||||||
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
|
|
||||||
builder: (BuildContext context) => PointerInterceptor(child: (ConfirmDialogBuilder(_imagePaths)
|
|
||||||
..key(const Key('confirm_dialog_delete_mailbox'))
|
|
||||||
..title(AppLocalizations.of(context).delete_mailboxes)
|
|
||||||
..content(AppLocalizations.of(context)
|
|
||||||
.message_confirmation_dialog_delete_mailbox(presentationMailbox.name?.name ?? ''))
|
|
||||||
..addIcon(SvgPicture.asset(_imagePaths.icRemoveDialog,
|
|
||||||
fit: BoxFit.fill))
|
|
||||||
..colorConfirmButton(AppColor.colorConfirmActionDialog)
|
|
||||||
..styleTextConfirmButton(const TextStyle(
|
|
||||||
fontSize: 17,
|
|
||||||
fontWeight: FontWeight.w500,
|
|
||||||
color: AppColor.colorActionDeleteConfirmDialog))
|
|
||||||
..onCloseButtonAction(() => popBack())
|
|
||||||
..onConfirmButtonAction(AppLocalizations.of(context).delete, () =>
|
|
||||||
_deleteMailboxAction(presentationMailbox))
|
|
||||||
..onCancelButtonAction(AppLocalizations.of(context).cancel, () =>
|
|
||||||
popBack()))
|
|
||||||
.build()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void _deleteMailboxAction(PresentationMailbox presentationMailbox) {
|
void _deleteMailboxAction(PresentationMailbox presentationMailbox) {
|
||||||
final accountId = mailboxDashBoardController.accountId.value;
|
final accountId = mailboxDashBoardController.accountId.value;
|
||||||
final session = mailboxDashBoardController.sessionCurrent;
|
final session = mailboxDashBoardController.sessionCurrent;
|
||||||
@@ -881,141 +851,19 @@ class MailboxController extends BaseMailboxController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _openDialogRenameMailboxAction(BuildContext context, PresentationMailbox presentationMailbox) {
|
void _renameMailboxAction(PresentationMailbox presentationMailbox, MailboxName newMailboxName) {
|
||||||
_createListMailboxNameAsStringInMailboxParent(presentationMailbox);
|
|
||||||
|
|
||||||
if (_responsiveUtils.isMobile(context)) {
|
|
||||||
(EditTextModalSheetBuilder()
|
|
||||||
..key(const Key('rename_mailbox_modal_sheet'))
|
|
||||||
..title(AppLocalizations.of(context).rename_mailbox)
|
|
||||||
..cancelText(AppLocalizations.of(context).cancel)
|
|
||||||
..boxConstraints(_responsiveUtils.isLandscapeMobile(context)
|
|
||||||
? const BoxConstraints(maxWidth: 400)
|
|
||||||
: null)
|
|
||||||
..onConfirmAction(AppLocalizations.of(context).rename,
|
|
||||||
(value) => _renameMailboxAction(presentationMailbox, value))
|
|
||||||
..setErrorString((value) => getErrorInputNameStringRenameMailbox(context, value))
|
|
||||||
..setTextController(TextEditingController.fromValue(
|
|
||||||
TextEditingValue(
|
|
||||||
text: presentationMailbox.name?.name ?? '',
|
|
||||||
selection: TextSelection(
|
|
||||||
baseOffset: 0,
|
|
||||||
extentOffset: presentationMailbox.name?.name.length ?? 0
|
|
||||||
)
|
|
||||||
))))
|
|
||||||
.show(context);
|
|
||||||
} else {
|
|
||||||
showDialog(
|
|
||||||
context: context,
|
|
||||||
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
|
|
||||||
builder: (BuildContext context) =>
|
|
||||||
PointerInterceptor(child: (EditTextDialogBuilder()
|
|
||||||
..key(const Key('rename_mailbox_dialog'))
|
|
||||||
..title(AppLocalizations.of(context).rename_mailbox)
|
|
||||||
..cancelText(AppLocalizations.of(context).cancel)
|
|
||||||
..setErrorString((value) => getErrorInputNameStringRenameMailbox(context, value))
|
|
||||||
..setTextController(TextEditingController.fromValue(
|
|
||||||
TextEditingValue(
|
|
||||||
text: presentationMailbox.name?.name ?? '',
|
|
||||||
selection: TextSelection(
|
|
||||||
baseOffset: 0,
|
|
||||||
extentOffset: presentationMailbox.name?.name.length ?? 0
|
|
||||||
)
|
|
||||||
)))
|
|
||||||
..onConfirmButtonAction(AppLocalizations.of(context).rename,
|
|
||||||
(value) => _renameMailboxAction(presentationMailbox, value)))
|
|
||||||
.build()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
String? getErrorInputNameStringRenameMailbox(BuildContext context, String newName) {
|
|
||||||
return _verifyNameInteractor.execute(
|
|
||||||
newName,
|
|
||||||
[
|
|
||||||
EmptyNameValidator(),
|
|
||||||
DuplicateNameValidator(listMailboxNameAsStringExist),
|
|
||||||
]
|
|
||||||
).fold(
|
|
||||||
(failure) {
|
|
||||||
if (failure is VerifyNameFailure) {
|
|
||||||
return failure.getMessage(context, actions: MailboxActions.rename);
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
(success) => null
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
void _renameMailboxAction(PresentationMailbox presentationMailbox, String newName) {
|
|
||||||
final accountId = mailboxDashBoardController.accountId.value;
|
final accountId = mailboxDashBoardController.accountId.value;
|
||||||
|
|
||||||
if (accountId != null) {
|
if (accountId != null) {
|
||||||
consumeState(_renameMailboxInteractor.execute(
|
consumeState(_renameMailboxInteractor.execute(
|
||||||
accountId,
|
accountId,
|
||||||
RenameMailboxRequest(presentationMailbox.id, MailboxName(newName))));
|
RenameMailboxRequest(presentationMailbox.id, newMailboxName))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
_cancelSelectMailbox();
|
_cancelSelectMailbox();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _markAsReadMailboxAction(BuildContext context, PresentationMailbox presentationMailbox) {
|
|
||||||
final accountId = mailboxDashBoardController.accountId.value;
|
|
||||||
final mailboxId = presentationMailbox.id;
|
|
||||||
final mailboxName = presentationMailbox.name;
|
|
||||||
final countEmailsUnread = presentationMailbox.unreadEmails?.value.value ?? 0;
|
|
||||||
if (accountId != null && mailboxName != null) {
|
|
||||||
mailboxDashBoardController.markAsReadMailbox(
|
|
||||||
accountId,
|
|
||||||
mailboxId,
|
|
||||||
mailboxName,
|
|
||||||
countEmailsUnread.toInt());
|
|
||||||
|
|
||||||
closeMailboxScreen(context);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void _moveMailboxAction(BuildContext context, PresentationMailbox mailboxSelected) async {
|
|
||||||
final accountId = mailboxDashBoardController.accountId.value;
|
|
||||||
final _session = mailboxDashBoardController.sessionCurrent;
|
|
||||||
if (accountId != null) {
|
|
||||||
final arguments = DestinationPickerArguments(
|
|
||||||
accountId,
|
|
||||||
MailboxActions.move,
|
|
||||||
_session,
|
|
||||||
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,
|
|
||||||
MoveAction.moving,
|
|
||||||
mailboxSelected,
|
|
||||||
destinationMailbox: destinationMailbox == PresentationMailbox.unifiedMailbox ? null : destinationMailbox);
|
|
||||||
|
|
||||||
_cancelSelectMailbox();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void _handleMovingMailbox(
|
void _handleMovingMailbox(
|
||||||
AccountId accountId,
|
AccountId accountId,
|
||||||
MoveAction moveAction,
|
MoveAction moveAction,
|
||||||
@@ -1069,36 +917,6 @@ class MailboxController extends BaseMailboxController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _createListMailboxNameAsStringInMailboxParent(PresentationMailbox mailboxRenamed) {
|
|
||||||
if (mailboxRenamed.parentId == null) {
|
|
||||||
final allChildrenAtMailboxLocation = (
|
|
||||||
defaultMailboxTree.value.root.childrenItems ?? <MailboxNode>[])
|
|
||||||
+ (personalMailboxTree.value.root.childrenItems ?? <MailboxNode>[])
|
|
||||||
+ (teamMailboxesTree.value.root.childrenItems ?? <MailboxNode>[]);
|
|
||||||
if (allChildrenAtMailboxLocation.isNotEmpty) {
|
|
||||||
listMailboxNameAsStringExist = allChildrenAtMailboxLocation
|
|
||||||
.where((mailboxNode) => mailboxNode.nameNotEmpty)
|
|
||||||
.map((mailboxNode) => mailboxNode.mailboxNameAsString)
|
|
||||||
.toList();
|
|
||||||
} else {
|
|
||||||
listMailboxNameAsStringExist = [];
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
final mailboxNodeLocation = findMailboxNodeById(mailboxRenamed.parentId!);
|
|
||||||
if (mailboxNodeLocation != null && mailboxNodeLocation.childrenItems?.isNotEmpty == true) {
|
|
||||||
final allChildrenAtMailboxLocation = mailboxNodeLocation.childrenItems!;
|
|
||||||
listMailboxNameAsStringExist = allChildrenAtMailboxLocation
|
|
||||||
.where((mailboxNode) => mailboxNode.nameNotEmpty)
|
|
||||||
.map((mailboxNode) => mailboxNode.mailboxNameAsString)
|
|
||||||
.toList();
|
|
||||||
} else {
|
|
||||||
listMailboxNameAsStringExist = [];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
log('MailboxController::_createListMailboxNameAsStringInMailboxLocation(): $listMailboxNameAsStringExist');
|
|
||||||
}
|
|
||||||
|
|
||||||
void toggleMailboxCategories(MailboxCategories categories) {
|
void toggleMailboxCategories(MailboxCategories categories) {
|
||||||
switch(categories) {
|
switch(categories) {
|
||||||
case MailboxCategories.exchange:
|
case MailboxCategories.exchange:
|
||||||
@@ -1149,16 +967,37 @@ class MailboxController extends BaseMailboxController {
|
|||||||
|
|
||||||
switch(actions) {
|
switch(actions) {
|
||||||
case MailboxActions.delete:
|
case MailboxActions.delete:
|
||||||
_openConfirmationDialogDeleteMailboxAction(context, mailbox);
|
openConfirmationDialogDeleteMailboxAction(
|
||||||
|
context,
|
||||||
|
_responsiveUtils,
|
||||||
|
_imagePaths,
|
||||||
|
mailbox,
|
||||||
|
onDeleteMailboxAction: _deleteMailboxAction
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case MailboxActions.rename:
|
case MailboxActions.rename:
|
||||||
_openDialogRenameMailboxAction(context, mailbox);
|
openDialogRenameMailboxAction(
|
||||||
|
context,
|
||||||
|
mailbox,
|
||||||
|
_responsiveUtils,
|
||||||
|
onRenameMailboxAction: _renameMailboxAction
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case MailboxActions.move:
|
case MailboxActions.move:
|
||||||
_moveMailboxAction(context, mailbox);
|
moveMailboxAction(
|
||||||
|
context,
|
||||||
|
mailbox,
|
||||||
|
mailboxDashBoardController,
|
||||||
|
onMovingMailboxAction: _invokeMovingMailboxAction
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case MailboxActions.markAsRead:
|
case MailboxActions.markAsRead:
|
||||||
_markAsReadMailboxAction(context, mailbox);
|
markAsReadMailboxAction(
|
||||||
|
context,
|
||||||
|
mailbox,
|
||||||
|
mailboxDashBoardController,
|
||||||
|
onCallbackAction: closeMailboxScreen
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case MailboxActions.openInNewTab:
|
case MailboxActions.openInNewTab:
|
||||||
openMailboxInNewTabAction(mailbox);
|
openMailboxInNewTabAction(mailbox);
|
||||||
@@ -1175,13 +1014,17 @@ class MailboxController extends BaseMailboxController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void openMailboxInNewTabAction(PresentationMailbox mailbox) {
|
void _invokeMovingMailboxAction(PresentationMailbox mailboxSelected, PresentationMailbox? destinationMailbox) {
|
||||||
final mailboxRouteWeb = RouteUtils.generateRouteBrowser(
|
final accountId = mailboxDashBoardController.accountId.value;
|
||||||
AppRoutes.dashboard,
|
if (accountId != null) {
|
||||||
NavigationRouter(mailboxId: mailbox.id)
|
_handleMovingMailbox(
|
||||||
);
|
accountId,
|
||||||
log('MailboxController::openMailboxInNewTabAction(): mailboxRouteWeb: $mailboxRouteWeb');
|
MoveAction.moving,
|
||||||
AppUtils.launchLink(mailboxRouteWeb.toString());
|
mailboxSelected,
|
||||||
|
destinationMailbox: destinationMailbox
|
||||||
|
);
|
||||||
|
_cancelSelectMailbox();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _updateSelectedMailboxRouteOnBrowser() {
|
void _updateSelectedMailboxRouteOnBrowser() {
|
||||||
|
|||||||
@@ -226,13 +226,16 @@ class MailboxView extends GetWidget<MailboxController> {
|
|||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
buildIconWeb(
|
buildIconWeb(
|
||||||
iconSize: 20,
|
minSize: 40,
|
||||||
minSize: 40,
|
iconPadding: EdgeInsets.zero,
|
||||||
iconPadding: EdgeInsets.zero,
|
icon: SvgPicture.asset(
|
||||||
splashRadius: 15,
|
_imagePaths.icSearchBar,
|
||||||
icon: SvgPicture.asset(_imagePaths.icSearchBar, color: AppColor.colorTextButton, fit: BoxFit.fill),
|
color: AppColor.colorTextButton,
|
||||||
|
fit: BoxFit.fill
|
||||||
|
),
|
||||||
tooltip: AppLocalizations.of(context).search_folder,
|
tooltip: AppLocalizations.of(context).search_folder,
|
||||||
onTap: () => controller.enableSearch()),
|
onTap: controller.enableSearch
|
||||||
|
),
|
||||||
buildIconWeb(
|
buildIconWeb(
|
||||||
minSize: 40,
|
minSize: 40,
|
||||||
iconSize: 20,
|
iconSize: 20,
|
||||||
@@ -391,18 +394,18 @@ class MailboxView extends GetWidget<MailboxController> {
|
|||||||
isExpanded: mailboxNode.expandMode == ExpandMode.EXPAND,
|
isExpanded: mailboxNode.expandMode == ExpandMode.EXPAND,
|
||||||
parent: Obx(() => (MailBoxFolderTileBuilder(context, _imagePaths, mailboxNode, lastNode: lastNode,
|
parent: Obx(() => (MailBoxFolderTileBuilder(context, _imagePaths, mailboxNode, lastNode: lastNode,
|
||||||
allSelectMode: controller.currentSelectMode.value)
|
allSelectMode: controller.currentSelectMode.value)
|
||||||
..addOnLongPressMailboxFolderClick((mailboxNode) => _openBottomSheetMailboxMenuAction(context, mailboxNode.item))
|
..addOnLongPressMailboxNodeAction((mailboxNode) => _openBottomSheetMailboxMenuAction(context, mailboxNode.item))
|
||||||
..addOnOpenMailboxFolderClick((mailboxNode) => controller.openMailbox(context, mailboxNode.item))
|
..addOnClickOpenMailboxNodeAction((mailboxNode) => controller.openMailbox(context, mailboxNode.item))
|
||||||
..addOnExpandFolderActionClick((mailboxNode) => controller.toggleMailboxFolder(mailboxNode))
|
..addOnClickExpandMailboxNodeAction((mailboxNode) => controller.toggleMailboxFolder(mailboxNode))
|
||||||
..addOnSelectMailboxFolderClick((mailboxNode) => controller.selectMailboxNode(mailboxNode)))
|
..addOnSelectMailboxNodeAction((mailboxNode) => controller.selectMailboxNode(mailboxNode)))
|
||||||
.build()),
|
.build()),
|
||||||
children: _buildListChildTileWidget(context, mailboxNode)
|
children: _buildListChildTileWidget(context, mailboxNode)
|
||||||
).build()
|
).build()
|
||||||
: Obx(() => (MailBoxFolderTileBuilder(context, _imagePaths, mailboxNode, lastNode: lastNode,
|
: Obx(() => (MailBoxFolderTileBuilder(context, _imagePaths, mailboxNode, lastNode: lastNode,
|
||||||
allSelectMode: controller.currentSelectMode.value)
|
allSelectMode: controller.currentSelectMode.value)
|
||||||
..addOnLongPressMailboxFolderClick((mailboxNode) => _openBottomSheetMailboxMenuAction(context, mailboxNode.item))
|
..addOnLongPressMailboxNodeAction((mailboxNode) => _openBottomSheetMailboxMenuAction(context, mailboxNode.item))
|
||||||
..addOnOpenMailboxFolderClick((mailboxNode) => controller.openMailbox(context, mailboxNode.item))
|
..addOnClickOpenMailboxNodeAction((mailboxNode) => controller.openMailbox(context, mailboxNode.item))
|
||||||
..addOnSelectMailboxFolderClick((mailboxNode) => controller.selectMailboxNode(mailboxNode)))
|
..addOnSelectMailboxNodeAction((mailboxNode) => controller.selectMailboxNode(mailboxNode)))
|
||||||
.build())
|
.build())
|
||||||
).toList() ?? <Widget>[];
|
).toList() ?? <Widget>[];
|
||||||
}
|
}
|
||||||
@@ -466,7 +469,7 @@ class MailboxView extends GetWidget<MailboxController> {
|
|||||||
allSelectMode: controller.currentSelectMode.value,
|
allSelectMode: controller.currentSelectMode.value,
|
||||||
lastMailboxIdInSearchedList: controller.listMailboxSearched.last.id)
|
lastMailboxIdInSearchedList: controller.listMailboxSearched.last.id)
|
||||||
..addOnOpenMailboxAction((mailbox) => controller.openMailbox(context, mailbox))
|
..addOnOpenMailboxAction((mailbox) => controller.openMailbox(context, mailbox))
|
||||||
..addOnSelectMailboxActionClick((mailbox) => controller.selectMailboxSearched(context, mailbox)))
|
..addOnSelectMailboxAction((mailbox) => controller.selectMailboxSearched(context, mailbox)))
|
||||||
.build())
|
.build())
|
||||||
)
|
)
|
||||||
));
|
));
|
||||||
|
|||||||
@@ -153,12 +153,15 @@ class MailboxView extends GetWidget<MailboxController> with AppLoaderMixin, Popu
|
|||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
buildIconWeb(
|
buildIconWeb(
|
||||||
minSize: 40,
|
minSize: 40,
|
||||||
iconSize: 20,
|
iconPadding: EdgeInsets.zero,
|
||||||
iconPadding: EdgeInsets.zero,
|
icon: SvgPicture.asset(
|
||||||
splashRadius: 15,
|
_imagePaths.icSearchBar,
|
||||||
icon: SvgPicture.asset(_imagePaths.icSearchBar, color: AppColor.colorTextButton, fit: BoxFit.fill),
|
color: AppColor.colorTextButton,
|
||||||
onTap: () => controller.enableSearch()),
|
fit: BoxFit.fill
|
||||||
|
),
|
||||||
|
onTap: controller.enableSearch
|
||||||
|
),
|
||||||
buildIconWeb(
|
buildIconWeb(
|
||||||
minSize: 40,
|
minSize: 40,
|
||||||
iconSize: 20,
|
iconSize: 20,
|
||||||
@@ -295,27 +298,27 @@ class MailboxView extends GetWidget<MailboxController> with AppLoaderMixin, Popu
|
|||||||
isExpanded: mailboxNode.expandMode == ExpandMode.EXPAND,
|
isExpanded: mailboxNode.expandMode == ExpandMode.EXPAND,
|
||||||
parent: Obx(() => (MailBoxFolderTileBuilder(context, _imagePaths, mailboxNode, lastNode: lastNode,
|
parent: Obx(() => (MailBoxFolderTileBuilder(context, _imagePaths, mailboxNode, lastNode: lastNode,
|
||||||
mailboxNodeSelected: controller.mailboxDashBoardController.selectedMailbox.value)
|
mailboxNodeSelected: controller.mailboxDashBoardController.selectedMailbox.value)
|
||||||
..addOnOpenMailboxFolderClick((mailboxNode) =>
|
..addOnClickOpenMailboxNodeAction((mailboxNode) =>
|
||||||
controller.openMailbox(context, mailboxNode.item))
|
controller.openMailbox(context, mailboxNode.item))
|
||||||
..addOnExpandFolderActionClick((mailboxNode) =>
|
..addOnClickExpandMailboxNodeAction((mailboxNode) =>
|
||||||
controller.toggleMailboxFolder(mailboxNode))
|
controller.toggleMailboxFolder(mailboxNode))
|
||||||
..addOnMenuActionClick((position, mailboxNode) =>
|
..addOnClickOpenMenuMailboxNodeAction((position, mailboxNode) =>
|
||||||
_openMailboxMenuAction(context, position, mailboxNode.item))
|
_openMailboxMenuAction(context, position, mailboxNode.item))
|
||||||
..addOnSelectMailboxFolderClick((mailboxNode) =>
|
..addOnSelectMailboxNodeAction((mailboxNode) =>
|
||||||
controller.selectMailboxNode(mailboxNode))
|
controller.selectMailboxNode(mailboxNode))
|
||||||
..addOnDragItemAccepted(_handleDragItemAccepted))
|
..addOnDragEmailToMailboxAccepted(_handleDragItemAccepted))
|
||||||
.build()),
|
.build()),
|
||||||
children: _buildListChildTileWidget(context, mailboxNode)
|
children: _buildListChildTileWidget(context, mailboxNode)
|
||||||
).build()
|
).build()
|
||||||
: Obx(() => (MailBoxFolderTileBuilder(context, _imagePaths, mailboxNode, lastNode: lastNode,
|
: Obx(() => (MailBoxFolderTileBuilder(context, _imagePaths, mailboxNode, lastNode: lastNode,
|
||||||
mailboxNodeSelected: controller.mailboxDashBoardController.selectedMailbox.value)
|
mailboxNodeSelected: controller.mailboxDashBoardController.selectedMailbox.value)
|
||||||
..addOnOpenMailboxFolderClick((mailboxNode) =>
|
..addOnClickOpenMailboxNodeAction((mailboxNode) =>
|
||||||
controller.openMailbox(context, mailboxNode.item))
|
controller.openMailbox(context, mailboxNode.item))
|
||||||
..addOnMenuActionClick((position, mailboxNode) =>
|
..addOnClickOpenMenuMailboxNodeAction((position, mailboxNode) =>
|
||||||
_openMailboxMenuAction(context, position, mailboxNode.item))
|
_openMailboxMenuAction(context, position, mailboxNode.item))
|
||||||
..addOnSelectMailboxFolderClick((mailboxNode) =>
|
..addOnSelectMailboxNodeAction((mailboxNode) =>
|
||||||
controller.selectMailboxNode(mailboxNode))
|
controller.selectMailboxNode(mailboxNode))
|
||||||
..addOnDragItemAccepted(_handleDragItemAccepted))
|
..addOnDragEmailToMailboxAccepted(_handleDragItemAccepted))
|
||||||
.build())
|
.build())
|
||||||
).toList() ?? <Widget>[];
|
).toList() ?? <Widget>[];
|
||||||
}
|
}
|
||||||
@@ -392,10 +395,10 @@ class MailboxView extends GetWidget<MailboxController> with AppLoaderMixin, Popu
|
|||||||
_imagePaths,
|
_imagePaths,
|
||||||
_responsiveUtils,
|
_responsiveUtils,
|
||||||
listMailbox[index])
|
listMailbox[index])
|
||||||
..addOnDragItemAccepted(controller.mailboxDashBoardController.dragSelectedMultipleEmailToMailboxAction)
|
..addOnDragEmailToMailboxAccepted(controller.mailboxDashBoardController.dragSelectedMultipleEmailToMailboxAction)
|
||||||
..addOnOpenMailboxAction((mailbox) => controller.openMailbox(context, mailbox))
|
..addOnOpenMailboxAction((mailbox) => controller.openMailbox(context, mailbox))
|
||||||
..addOnMenuActionClick((position, mailbox) => _openMailboxMenuAction(context, position, mailbox))
|
..addOnMenuActionClick((position, mailbox) => _openMailboxMenuAction(context, position, mailbox))
|
||||||
..addOnSelectMailboxActionClick((mailbox) => controller.selectMailboxSearched(context, mailbox)))
|
..addOnSelectMailboxAction((mailbox) => controller.selectMailboxSearched(context, mailbox)))
|
||||||
.build()))
|
.build()))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -427,7 +430,7 @@ class MailboxView extends GetWidget<MailboxController> with AppLoaderMixin, Popu
|
|||||||
if (_responsiveUtils.isScreenWithShortestSide(context)) {
|
if (_responsiveUtils.isScreenWithShortestSide(context)) {
|
||||||
controller.openContextMenuAction(
|
controller.openContextMenuAction(
|
||||||
context,
|
context,
|
||||||
_bottomSheetIdentityActionTiles(
|
_bottomSheetMailboxActionTiles(
|
||||||
context,
|
context,
|
||||||
mailbox,
|
mailbox,
|
||||||
listContextMenuItemAction));
|
listContextMenuItemAction));
|
||||||
@@ -442,7 +445,7 @@ class MailboxView extends GetWidget<MailboxController> with AppLoaderMixin, Popu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Widget> _bottomSheetIdentityActionTiles(
|
List<Widget> _bottomSheetMailboxActionTiles(
|
||||||
BuildContext context,
|
BuildContext context,
|
||||||
PresentationMailbox mailbox,
|
PresentationMailbox mailbox,
|
||||||
List<ContextMenuItemMailboxAction> contextMenuActions
|
List<ContextMenuItemMailboxAction> contextMenuActions
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:model/email/presentation_email.dart';
|
||||||
|
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
||||||
|
|
||||||
|
typedef OnClickOpenMailboxAction = void Function(PresentationMailbox);
|
||||||
|
typedef OnClickOpenMenuMailboxAction = void Function(RelativeRect, PresentationMailbox);
|
||||||
|
typedef OnSelectMailboxAction = void Function(PresentationMailbox);
|
||||||
|
typedef OnDragEmailToMailboxAccepted = void Function(List<PresentationEmail>, PresentationMailbox);
|
||||||
|
|
||||||
|
typedef OnClickExpandMailboxNodeAction = void Function(MailboxNode);
|
||||||
|
typedef OnClickOpenMailboxNodeAction = void Function(MailboxNode);
|
||||||
|
typedef OnSelectMailboxNodeAction = void Function(MailboxNode);
|
||||||
|
typedef OnClickOpenMenuMailboxNodeAction = void Function(RelativeRect, MailboxNode);
|
||||||
|
typedef OnLongPressMailboxNodeAction = void Function(MailboxNode);
|
||||||
@@ -8,15 +8,9 @@ import 'package:tmail_ui_user/features/mailbox/domain/extensions/presentation_ma
|
|||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_displayed.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_displayed.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_method_action_define.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
typedef OnExpandFolderActionClick = void Function(MailboxNode);
|
|
||||||
typedef OnOpenMailboxFolderClick = void Function(MailboxNode);
|
|
||||||
typedef OnSelectMailboxFolderClick = void Function(MailboxNode);
|
|
||||||
typedef OnMenuActionClick = void Function(RelativeRect, MailboxNode);
|
|
||||||
typedef OnDragItemAccepted = void Function(List<PresentationEmail>, PresentationMailbox);
|
|
||||||
typedef OnLongPressMailboxFolderClick = void Function(MailboxNode);
|
|
||||||
|
|
||||||
class MailBoxFolderTileBuilder {
|
class MailBoxFolderTileBuilder {
|
||||||
|
|
||||||
final _responsiveUtils = Get.find<ResponsiveUtils>();
|
final _responsiveUtils = Get.find<ResponsiveUtils>();
|
||||||
@@ -31,12 +25,12 @@ class MailBoxFolderTileBuilder {
|
|||||||
final MailboxActions? mailboxActions;
|
final MailboxActions? mailboxActions;
|
||||||
final MailboxId? mailboxIdAlreadySelected;
|
final MailboxId? mailboxIdAlreadySelected;
|
||||||
|
|
||||||
OnExpandFolderActionClick? _onExpandFolderActionClick;
|
OnClickExpandMailboxNodeAction? _onExpandFolderActionClick;
|
||||||
OnOpenMailboxFolderClick? _onOpenMailboxFolderClick;
|
OnClickOpenMailboxNodeAction? _onOpenMailboxFolderClick;
|
||||||
OnSelectMailboxFolderClick? _onSelectMailboxFolderClick;
|
OnSelectMailboxNodeAction? _onSelectMailboxFolderClick;
|
||||||
OnMenuActionClick? _onMenuActionClick;
|
OnClickOpenMenuMailboxNodeAction? _onMenuActionClick;
|
||||||
OnDragItemAccepted? _onDragItemAccepted;
|
OnDragEmailToMailboxAccepted? _onDragItemAccepted;
|
||||||
OnLongPressMailboxFolderClick? _onLongPressMailboxFolderClick;
|
OnLongPressMailboxNodeAction? _onLongPressSpamReport;
|
||||||
|
|
||||||
bool isHoverItem = false;
|
bool isHoverItem = false;
|
||||||
|
|
||||||
@@ -54,28 +48,28 @@ class MailBoxFolderTileBuilder {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
void addOnExpandFolderActionClick(OnExpandFolderActionClick onExpandFolderActionClick) {
|
void addOnClickExpandMailboxNodeAction(OnClickExpandMailboxNodeAction onExpandFolderActionClick) {
|
||||||
_onExpandFolderActionClick = onExpandFolderActionClick;
|
_onExpandFolderActionClick = onExpandFolderActionClick;
|
||||||
}
|
}
|
||||||
|
|
||||||
void addOnOpenMailboxFolderClick(OnOpenMailboxFolderClick onOpenMailboxFolderClick) {
|
void addOnClickOpenMailboxNodeAction(OnClickOpenMailboxNodeAction onOpenMailboxFolderClick) {
|
||||||
_onOpenMailboxFolderClick = onOpenMailboxFolderClick;
|
_onOpenMailboxFolderClick = onOpenMailboxFolderClick;
|
||||||
}
|
}
|
||||||
|
|
||||||
void addOnSelectMailboxFolderClick(OnSelectMailboxFolderClick onSelectMailboxFolderClick) {
|
void addOnSelectMailboxNodeAction(OnSelectMailboxNodeAction onSelectMailboxFolderClick) {
|
||||||
_onSelectMailboxFolderClick = onSelectMailboxFolderClick;
|
_onSelectMailboxFolderClick = onSelectMailboxFolderClick;
|
||||||
}
|
}
|
||||||
|
|
||||||
void addOnMenuActionClick(OnMenuActionClick onMenuActionClick) {
|
void addOnClickOpenMenuMailboxNodeAction(OnClickOpenMenuMailboxNodeAction onMenuActionClick) {
|
||||||
_onMenuActionClick = onMenuActionClick;
|
_onMenuActionClick = onMenuActionClick;
|
||||||
}
|
}
|
||||||
|
|
||||||
void addOnDragItemAccepted(OnDragItemAccepted onDragItemAccepted) {
|
void addOnDragEmailToMailboxAccepted(OnDragEmailToMailboxAccepted onDragItemAccepted) {
|
||||||
_onDragItemAccepted = onDragItemAccepted;
|
_onDragItemAccepted = onDragItemAccepted;
|
||||||
}
|
}
|
||||||
|
|
||||||
void addOnLongPressMailboxFolderClick(OnLongPressMailboxFolderClick onLongPressMailboxFolderClick) {
|
void addOnLongPressMailboxNodeAction(OnLongPressMailboxNodeAction onLongPressSpamReport) {
|
||||||
_onLongPressMailboxFolderClick = onLongPressMailboxFolderClick;
|
_onLongPressSpamReport = onLongPressSpamReport;
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget build() => DragTarget<List<PresentationEmail>>(
|
Widget build() => DragTarget<List<PresentationEmail>>(
|
||||||
|
|||||||
@@ -6,11 +6,7 @@ import 'package:model/model.dart';
|
|||||||
import 'package:tmail_ui_user/features/mailbox/domain/extensions/presentation_mailbox_extension.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/extensions/presentation_mailbox_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_displayed.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_displayed.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_method_action_define.dart';
|
||||||
typedef OnOpenMailboxActionClick = void Function(PresentationMailbox);
|
|
||||||
typedef OnSelectMailboxActionClick = void Function(PresentationMailbox);
|
|
||||||
typedef OnOpenMenuActionClick = void Function(RelativeRect, PresentationMailbox);
|
|
||||||
typedef OnDragItemAccepted = void Function(List<PresentationEmail>, PresentationMailbox);
|
|
||||||
|
|
||||||
class MailboxSearchTileBuilder {
|
class MailboxSearchTileBuilder {
|
||||||
|
|
||||||
@@ -27,10 +23,10 @@ class MailboxSearchTileBuilder {
|
|||||||
|
|
||||||
bool isHoverItem = false;
|
bool isHoverItem = false;
|
||||||
|
|
||||||
OnOpenMailboxActionClick? _onOpenMailboxActionClick;
|
OnClickOpenMailboxAction? _onOpenMailboxActionClick;
|
||||||
OnSelectMailboxActionClick? _onSelectMailboxActionClick;
|
OnSelectMailboxAction? _onSelectMailboxActionClick;
|
||||||
OnOpenMenuActionClick? _onMenuActionClick;
|
OnClickOpenMenuMailboxAction? _onMenuActionClick;
|
||||||
OnDragItemAccepted? _onDragItemAccepted;
|
OnDragEmailToMailboxAccepted? _onDragItemAccepted;
|
||||||
|
|
||||||
MailboxSearchTileBuilder(
|
MailboxSearchTileBuilder(
|
||||||
this._context,
|
this._context,
|
||||||
@@ -47,19 +43,19 @@ class MailboxSearchTileBuilder {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
void addOnOpenMailboxAction(OnOpenMailboxActionClick onOpenMailboxActionClick) {
|
void addOnOpenMailboxAction(OnClickOpenMailboxAction onOpenMailboxActionClick) {
|
||||||
_onOpenMailboxActionClick = onOpenMailboxActionClick;
|
_onOpenMailboxActionClick = onOpenMailboxActionClick;
|
||||||
}
|
}
|
||||||
|
|
||||||
void addOnSelectMailboxActionClick(OnSelectMailboxActionClick onSelectMailboxActionClick) {
|
void addOnSelectMailboxAction(OnSelectMailboxAction onSelectMailboxActionClick) {
|
||||||
_onSelectMailboxActionClick = onSelectMailboxActionClick;
|
_onSelectMailboxActionClick = onSelectMailboxActionClick;
|
||||||
}
|
}
|
||||||
|
|
||||||
void addOnMenuActionClick(OnOpenMenuActionClick onOpenMenuActionClick) {
|
void addOnMenuActionClick(OnClickOpenMenuMailboxAction onOpenMenuActionClick) {
|
||||||
_onMenuActionClick = onOpenMenuActionClick;
|
_onMenuActionClick = onOpenMenuActionClick;
|
||||||
}
|
}
|
||||||
|
|
||||||
void addOnDragItemAccepted(OnDragItemAccepted onDragItemAccepted) {
|
void addOnDragEmailToMailboxAccepted(OnDragEmailToMailboxAccepted onDragItemAccepted) {
|
||||||
_onDragItemAccepted = onDragItemAccepted;
|
_onDragItemAccepted = onDragItemAccepted;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ class VerifyNameViewState extends UIState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class VerifyNameFailure extends FeatureFailure {
|
class VerifyNameFailure extends FeatureFailure {
|
||||||
final exception;
|
final dynamic exception;
|
||||||
|
|
||||||
VerifyNameFailure(this.exception);
|
VerifyNameFailure(this.exception);
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -34,9 +34,9 @@ class RulesFilterCreatorBindings extends BaseBindings {
|
|||||||
@override
|
@override
|
||||||
void bindingsController() {
|
void bindingsController() {
|
||||||
Get.lazyPut(() => RulesFilterCreatorController(
|
Get.lazyPut(() => RulesFilterCreatorController(
|
||||||
Get.find<VerifyNameInteractor>(),
|
|
||||||
Get.find<GetAllMailboxInteractor>(),
|
Get.find<GetAllMailboxInteractor>(),
|
||||||
Get.find<TreeBuilder>()
|
Get.find<TreeBuilder>(),
|
||||||
|
Get.find<VerifyNameInteractor>()
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import 'package:tmail_ui_user/features/destination_picker/presentation/model/des
|
|||||||
import 'package:tmail_ui_user/features/mailbox/domain/state/get_all_mailboxes_state.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/state/get_all_mailboxes_state.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/get_all_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/get_all_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/empty_name_validator.dart';
|
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/empty_name_validator.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/state/verify_name_view_state.dart';
|
import 'package:tmail_ui_user/features/mailbox_creator/domain/state/verify_name_view_state.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart';
|
||||||
@@ -44,7 +45,6 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
|||||||
|
|
||||||
final _appToast = Get.find<AppToast>();
|
final _appToast = Get.find<AppToast>();
|
||||||
|
|
||||||
final VerifyNameInteractor _verifyNameInteractor;
|
|
||||||
final GetAllMailboxInteractor _getAllMailboxInteractor;
|
final GetAllMailboxInteractor _getAllMailboxInteractor;
|
||||||
|
|
||||||
GetAllRulesInteractor? _getAllRulesInteractor;
|
GetAllRulesInteractor? _getAllRulesInteractor;
|
||||||
@@ -76,10 +76,10 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
|||||||
List<TMailRule>? _listEmailRule;
|
List<TMailRule>? _listEmailRule;
|
||||||
|
|
||||||
RulesFilterCreatorController(
|
RulesFilterCreatorController(
|
||||||
this._verifyNameInteractor,
|
|
||||||
this._getAllMailboxInteractor,
|
this._getAllMailboxInteractor,
|
||||||
treeBuilder
|
TreeBuilder treeBuilder,
|
||||||
) : super(treeBuilder);
|
VerifyNameInteractor verifyNameInteractor,
|
||||||
|
) : super(treeBuilder, verifyNameInteractor);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
@@ -206,7 +206,7 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String? _getErrorStringByInputValue(BuildContext context, String? inputValue) {
|
String? _getErrorStringByInputValue(BuildContext context, String? inputValue) {
|
||||||
return _verifyNameInteractor.execute(inputValue, [EmptyNameValidator()]).fold(
|
return verifyNameInteractor.execute(inputValue, [EmptyNameValidator()]).fold(
|
||||||
(failure) {
|
(failure) {
|
||||||
if (failure is VerifyNameFailure) {
|
if (failure is VerifyNameFailure) {
|
||||||
return failure.getMessageRulesFilter(context);
|
return failure.getMessageRulesFilter(context);
|
||||||
|
|||||||
Reference in New Issue
Block a user