diff --git a/lib/features/destination_picker/presentation/widgets/app_bar_destination_picker_builder.dart b/lib/features/destination_picker/presentation/widgets/app_bar_destination_picker_builder.dart index cf502ebc3..9f106e6e9 100644 --- a/lib/features/destination_picker/presentation/widgets/app_bar_destination_picker_builder.dart +++ b/lib/features/destination_picker/presentation/widgets/app_bar_destination_picker_builder.dart @@ -54,7 +54,7 @@ class AppBarDestinationPickerBuilder extends StatelessWidget { Widget _buildCancelButton(BuildContext context) { if (_mailboxAction == MailboxActions.moveEmail || _mailboxAction == MailboxActions.move || - _mailboxAction == MailboxActions.selectFromRuleFilter || + _mailboxAction == MailboxActions.selectForRuleAction || _mailboxAction == MailboxActions.select) { return Padding( padding: const EdgeInsets.only(right: 12), diff --git a/lib/features/mailbox/presentation/model/mailbox_actions.dart b/lib/features/mailbox/presentation/model/mailbox_actions.dart index 2f64135cd..d7caeede0 100644 --- a/lib/features/mailbox/presentation/model/mailbox_actions.dart +++ b/lib/features/mailbox/presentation/model/mailbox_actions.dart @@ -11,7 +11,7 @@ enum MailboxActions { rename, move, markAsRead, - selectFromRuleFilter, + selectForRuleAction, } extension MailboxActionsExtension on MailboxActions { @@ -24,7 +24,7 @@ extension MailboxActionsExtension on MailboxActions { case MailboxActions.move: return AppLocalizations.of(context).moveTo; case MailboxActions.select: - case MailboxActions.selectFromRuleFilter: + case MailboxActions.selectForRuleAction: return AppLocalizations.of(context).selectMailbox; default: return ''; @@ -84,7 +84,7 @@ extension MailboxActionsExtension on MailboxActions { case MailboxActions.moveEmail: case MailboxActions.move: case MailboxActions.select: - case MailboxActions.selectFromRuleFilter: + case MailboxActions.selectForRuleAction: return true; default: return false; @@ -107,7 +107,7 @@ extension MailboxActionsExtension on MailboxActions { case MailboxActions.moveEmail: case MailboxActions.move: case MailboxActions.select: - case MailboxActions.selectFromRuleFilter: + case MailboxActions.selectForRuleAction: return false; default: return true; diff --git a/lib/features/manage_account/presentation/email_rules/email_rules_bindings.dart b/lib/features/manage_account/presentation/email_rules/email_rules_bindings.dart index 09e46f211..660e6c4a2 100644 --- a/lib/features/manage_account/presentation/email_rules/email_rules_bindings.dart +++ b/lib/features/manage_account/presentation/email_rules/email_rules_bindings.dart @@ -2,6 +2,7 @@ import 'package:get/get.dart'; import 'package:tmail_ui_user/features/base/base_bindings.dart'; import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/delete_email_rule_interactor.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/usecases/create_new_email_rule_filter_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_rules_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/email_rules_controller.dart'; @@ -12,6 +13,7 @@ class EmailRulesBindings extends BaseBindings { Get.lazyPut(() => EmailRulesController( Get.find(), Get.find(), + Get.find(), )); } @@ -25,6 +27,7 @@ class EmailRulesBindings extends BaseBindings { void bindingsInteractor() { Get.lazyPut(() => GetAllRulesInteractor(Get.find())); Get.lazyPut(() => DeleteEmailRuleInteractor(Get.find())); + Get.lazyPut(() => CreateNewEmailRuleFilterInteractor(Get.find())); } @override diff --git a/lib/features/manage_account/presentation/email_rules/email_rules_controller.dart b/lib/features/manage_account/presentation/email_rules/email_rules_controller.dart index 364cee9b9..c9586bcc7 100644 --- a/lib/features/manage_account/presentation/email_rules/email_rules_controller.dart +++ b/lib/features/manage_account/presentation/email_rules/email_rules_controller.dart @@ -3,27 +3,40 @@ import 'package:core/presentation/resources/image_paths.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; +import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:rule_filter/rule_filter/tmail_rule.dart'; import 'package:tmail_ui_user/features/base/base_controller.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/delete_email_rule_request.dart'; import 'package:tmail_ui_user/features/manage_account/domain/state/delete_email_rule_state.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_email_rule_filter_request.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/state/create_new_rule_filter_state.dart'; import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_rules_state.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/delete_email_rule_interactor.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/usecases/create_new_email_rule_filter_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_rules_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/widgets/email_rule_bottom_sheet_action_tile_builder.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart'; +import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; +import 'package:tmail_ui_user/main/routes/app_routes.dart'; class EmailRulesController extends BaseController { - final listEmailRule = [].obs; - final _accountDashBoardController = - Get.find(); + final GetAllRulesInteractor _getAllRulesInteractor; final DeleteEmailRuleInteractor _deleteEmailRuleInteractor; + final CreateNewEmailRuleFilterInteractor _createNewEmailRuleFilterInteractor; + + final _accountDashBoardController = Get.find(); final _imagePaths = Get.find(); - EmailRulesController(this._getAllRulesInteractor, this._deleteEmailRuleInteractor); + final listEmailRule = [].obs; + + EmailRulesController( + this._getAllRulesInteractor, + this._deleteEmailRuleInteractor, + this._createNewEmailRuleFilterInteractor + ); @override void onDone() { @@ -32,12 +45,13 @@ class EmailRulesController extends BaseController { if (success.rules?.isNotEmpty == true) { listEmailRule.addAll(success.rules!); } - } - if (success is DeleteEmailRuleSuccess) { + } else if (success is DeleteEmailRuleSuccess) { if (success.rules?.isNotEmpty == true) { listEmailRule.clear(); listEmailRule.addAll(success.rules!); } + } else if (success is CreateNewRuleFilterSuccess) { + _createNewRuleFilterSuccess(success); } }); } @@ -51,8 +65,38 @@ class EmailRulesController extends BaseController { super.onInit(); } - void goToCreateNewRule() { - //TODO: goToCreateNewRule + void goToCreateNewRule() async { + final accountId = _accountDashBoardController.accountId.value; + if (accountId != null) { + final newEmailRuleFilter = await push( + AppRoutes.RULES_FILTER_CREATOR, + arguments: RulesFilterCreatorArguments(accountId)); + + if (newEmailRuleFilter is TMailRule) { + _createNewRuleFilterAction( + accountId, + CreateNewEmailRuleFilterRequest( + listEmailRule, + newEmailRuleFilter) + ); + } + } + } + + void _createNewRuleFilterAction( + AccountId accountId, + CreateNewEmailRuleFilterRequest ruleFilterRequest + ) async { + consumeState(_createNewEmailRuleFilterInteractor.execute( + accountId, + ruleFilterRequest)); + } + + void _createNewRuleFilterSuccess(CreateNewRuleFilterSuccess success) { + if (success.newListRules.isNotEmpty == true) { + listEmailRule.clear(); + listEmailRule.addAll(success.newListRules); + } } void editEmailRule(TMailRule rule) { @@ -109,4 +153,4 @@ class EmailRulesController extends BaseController { )..onActionClick((rule) => editEmailRule(rule))) .build(); } -} +} \ No newline at end of file diff --git a/lib/l10n/intl_messages.arb b/lib/l10n/intl_messages.arb index 742ef6848..710147f4d 100644 --- a/lib/l10n/intl_messages.arb +++ b/lib/l10n/intl_messages.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2022-08-10T18:05:32.066682", + "@@last_modified": "2022-08-11T11:23:27.430951", "initializing_data": "Initializing data...", "@initializing_data": { "type": "text", @@ -1844,7 +1844,7 @@ "placeholders_order": [], "placeholders": {} }, - "actionTitleRulesFilter": "Perform the following actions:", + "actionTitleRulesFilter": "Perform the following action:", "@actionTitleRulesFilter": { "type": "text", "placeholders_order": [], diff --git a/lib/main/localizations/app_localizations.dart b/lib/main/localizations/app_localizations.dart index 10dd9a744..df2f3edae 100644 --- a/lib/main/localizations/app_localizations.dart +++ b/lib/main/localizations/app_localizations.dart @@ -1897,7 +1897,7 @@ class AppLocalizations { String get actionTitleRulesFilter { return Intl.message( - 'Perform the following actions:', + 'Perform the following action:', name: 'actionTitleRulesFilter'); } diff --git a/lib/main/pages/app_pages.dart b/lib/main/pages/app_pages.dart index 42849b727..deb49ff69 100644 --- a/lib/main/pages/app_pages.dart +++ b/lib/main/pages/app_pages.dart @@ -9,6 +9,8 @@ import 'package:tmail_ui_user/features/home/presentation/home_bindings.dart'; import 'package:tmail_ui_user/features/home/presentation/home_view.dart'; import 'package:tmail_ui_user/features/identity_creator/presentation/identity_creator_bindings.dart'; import 'package:tmail_ui_user/features/identity_creator/presentation/identity_creator_view.dart' deferred as identity_creator; +import 'package:tmail_ui_user/features/rules_filter_creator/presentation/rules_filter_creator_bindings.dart'; +import 'package:tmail_ui_user/features/rules_filter_creator/presentation/rules_filter_creator_view.dart' deferred as rules_filter_creator; import 'package:tmail_ui_user/features/login/presentation/login_bindings.dart'; import 'package:tmail_ui_user/features/login/presentation/login_view.dart' if (dart.library.html) 'package:tmail_ui_user/features/login/presentation/login_view_web.dart' deferred as login; @@ -71,5 +73,12 @@ class AppPages { opaque: false, page: () => DeferredWidget(identity_creator.loadLibrary, () => identity_creator.IdentityCreatorView()), binding: IdentityCreatorBindings()), + GetPage( + name: AppRoutes.RULES_FILTER_CREATOR, + opaque: false, + page: () => DeferredWidget( + rules_filter_creator.loadLibrary, + () => rules_filter_creator.RuleFilterCreatorView()), + binding: RulesFilterCreatorBindings()), ]; } diff --git a/lib/main/routes/app_routes.dart b/lib/main/routes/app_routes.dart index 04d37c421..448b123bc 100644 --- a/lib/main/routes/app_routes.dart +++ b/lib/main/routes/app_routes.dart @@ -11,4 +11,5 @@ abstract class AppRoutes { static const MAILBOX_CREATOR = '/mailboxCreator'; static const MANAGE_ACCOUNT = '$MAILBOX_DASHBOARD/manage_account'; static const IDENTITY_CREATOR = '/identity_creator'; + static const RULES_FILTER_CREATOR = '/rules_filter_creator'; } \ No newline at end of file