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 ff01704fd..5d7376427 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 @@ -5,6 +5,7 @@ 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/utils/app_logger.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; @@ -12,7 +13,6 @@ import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:pointer_interceptor/pointer_interceptor.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/data/extensions/list_tmail_rule_extensions.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/model/edit_email_rule_filter_request.dart'; import 'package:tmail_ui_user/features/manage_account/domain/state/delete_email_rule_state.dart'; @@ -28,6 +28,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/w 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/creator_action_type.dart'; import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart'; +import 'package:tmail_ui_user/features/rules_filter_creator/presentation/rules_filter_creator_bindings.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'; @@ -46,6 +47,8 @@ class EmailRulesController extends BaseController { final listEmailRule = [].obs; + final rulesFilterCreatorArguments = Rxn(); + EmailRulesController( this._getAllRulesInteractor, this._deleteEmailRuleInteractor, @@ -82,22 +85,18 @@ class EmailRulesController extends BaseController { void goToCreateNewRule() async { final accountId = _accountDashBoardController.accountId.value; if (accountId != null) { - final newEmailRuleFilter = await push( + rulesFilterCreatorArguments.value = RulesFilterCreatorArguments(accountId); + if(kIsWeb) { + _openRulesFilterCreatorOverlay(); + } else { + push( AppRoutes.RULES_FILTER_CREATOR, - arguments: RulesFilterCreatorArguments(accountId)); - - if (newEmailRuleFilter is TMailRule) { - _createNewRuleFilterAction( - accountId, - CreateNewEmailRuleFilterRequest( - listEmailRule, - newEmailRuleFilter) ); } } } - void _createNewRuleFilterAction( + void createNewRuleFilterAction( AccountId accountId, CreateNewEmailRuleFilterRequest ruleFilterRequest ) async { @@ -123,24 +122,22 @@ class EmailRulesController extends BaseController { void editEmailRule(TMailRule rule) async { final accountId = _accountDashBoardController.accountId.value; if (accountId != null) { - final emailRuleFilterChanged = await push( + rulesFilterCreatorArguments.value = RulesFilterCreatorArguments( + accountId, + actionType: CreatorActionType.edit, + tMailRule: rule, + ); + if(kIsWeb) { + _openRulesFilterCreatorOverlay(); + } else { + push( AppRoutes.RULES_FILTER_CREATOR, - arguments: RulesFilterCreatorArguments( - accountId, - actionType: CreatorActionType.edit, - tMailRule: rule)); - - if (emailRuleFilterChanged is TMailRule) { - final newListRuleWithIds = listEmailRule.withIds; - _editEmailRuleFilterAction( - accountId, - EditEmailRuleFilterRequest(newListRuleWithIds, emailRuleFilterChanged) ); } } } - void _editEmailRuleFilterAction( + void editEmailRuleFilterAction( AccountId accountId, EditEmailRuleFilterRequest ruleFilterRequest ) { @@ -228,6 +225,11 @@ class EmailRulesController extends BaseController { consumeState(_getAllRulesInteractor.execute(_accountDashBoardController.accountId.value!)); } + void _openRulesFilterCreatorOverlay() { + RulesFilterCreatorBindings().dependencies(); + _accountDashBoardController.rulesFilterCreatorIsActive.toggle(); + } + void openEditRuleMenuAction(BuildContext context, TMailRule rule) { openContextMenuAction( context, diff --git a/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart b/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart index 4666b4f19..c7e5fb2d5 100644 --- a/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart +++ b/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart @@ -51,6 +51,8 @@ class ManageAccountDashBoardController extends ReloadableController { final vacationResponse = Rxn(); final emailsForwardCreatorIsActive = false.obs; + final rulesFilterCreatorIsActive = false.obs; + final identityCreatorIsActive = false.obs; ManageAccountDashBoardController( LogoutOidcInteractor logoutOidcInteractor, diff --git a/lib/features/manage_account/presentation/manage_account_dashboard_view.dart b/lib/features/manage_account/presentation/manage_account_dashboard_view.dart index 9a62d9dd9..daa22ac7d 100644 --- a/lib/features/manage_account/presentation/manage_account_dashboard_view.dart +++ b/lib/features/manage_account/presentation/manage_account_dashboard_view.dart @@ -3,6 +3,7 @@ import 'package:core/core.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:tmail_ui_user/features/emails_forward_creator/presentation/emails_forward_creator_view.dart'; +import 'package:tmail_ui_user/features/identity_creator/presentation/identity_creator_view.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mixin/user_setting_popup_menu_mixin.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/vacation/widgets/vacation_notification_message_widget.dart'; @@ -15,6 +16,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/profiles/profiles_view.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_view.dart'; +import 'package:tmail_ui_user/features/rules_filter_creator/presentation/rules_filter_creator_view.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; @@ -126,7 +128,11 @@ class ManageAccountDashBoardView extends GetWidget(); final errorRuleConditionValue = Rxn(); final errorRuleActionValue = Rxn(); @@ -46,10 +50,19 @@ class RulesFilterCreatorController extends BaseMailboxController { final inputRuleNameFocusNode = FocusNode(); final inputRuleConditionFocusNode = FocusNode(); - AccountId? _accountId; + final _accountDashBoardController = Get.find(); + final _emailRulesController = Get.find(); + + late Worker rulesFilterCreatorArgumentsWorker; + + get actionType => _emailRulesController.rulesFilterCreatorArguments.value!.actionType; + + get _accountId => _emailRulesController.rulesFilterCreatorArguments.value!.accountId; + + get _currentTMailRule => _emailRulesController.rulesFilterCreatorArguments.value!.tMailRule; + String? _newRuleName; String? _newRuleConditionValue; - TMailRule? _currentTMailRule; RulesFilterCreatorController( this._verifyNameInteractor, @@ -57,9 +70,22 @@ class RulesFilterCreatorController extends BaseMailboxController { treeBuilder ) : super(treeBuilder); + void _initWorker() { + rulesFilterCreatorArgumentsWorker = ever(_emailRulesController.rulesFilterCreatorArguments, (rulesFilterCreatorArguments) { + if (rulesFilterCreatorArguments is RulesFilterCreatorArguments) { + _setUpDefaultValueRuleFilter(); + } + }); + } + + @override + void onInit() { + _initWorker(); + super.onInit(); + } + @override void onReady() { - _getArguments(); _setUpDefaultValueRuleFilter(); super.onReady(); } @@ -92,17 +118,8 @@ class RulesFilterCreatorController extends BaseMailboxController { @override void onError(error) {} - void _getArguments() { - final arguments = Get.arguments; - if (arguments is RulesFilterCreatorArguments) { - _accountId = arguments.accountId; - actionType.value = arguments.actionType; - _currentTMailRule = arguments.tMailRule; - } - } - void _setUpDefaultValueRuleFilter() { - switch(actionType.value) { + switch(actionType) { case CreatorActionType.create: ruleConditionFieldSelected.value = rule_condition.Field.from; ruleConditionComparatorSelected.value = rule_condition.Comparator.contains; @@ -250,8 +267,30 @@ class RulesFilterCreatorController extends BaseMailboxController { log('RulesFilterCreatorController::newTMailRule(): $newTMailRule'); + if(actionType == CreatorActionType.create) { + _emailRulesController.createNewRuleFilterAction( + _accountId, + CreateNewEmailRuleFilterRequest( + _emailRulesController.listEmailRule, + newTMailRule, + ), + ); + } else { + _emailRulesController.editEmailRuleFilterAction( + _accountId, + EditEmailRuleFilterRequest( + _emailRulesController.listEmailRule.withIds, + newTMailRule, + ), + ); + } + _clearAll(); - popBack(result: newTMailRule); + if(kIsWeb) { + _accountDashBoardController.rulesFilterCreatorIsActive.toggle(); + } else { + popBack(); + } } void _clearAll() { @@ -261,6 +300,11 @@ class RulesFilterCreatorController extends BaseMailboxController { void closeView(BuildContext context) { FocusScope.of(context).unfocus(); - popBack(); + if(kIsWeb) { + _clearAll(); + _accountDashBoardController.rulesFilterCreatorIsActive.toggle(); + } else { + popBack(); + } } } \ No newline at end of file diff --git a/lib/features/rules_filter_creator/presentation/rules_filter_creator_view.dart b/lib/features/rules_filter_creator/presentation/rules_filter_creator_view.dart index 07ef0cf55..9bb526241 100644 --- a/lib/features/rules_filter_creator/presentation/rules_filter_creator_view.dart +++ b/lib/features/rules_filter_creator/presentation/rules_filter_creator_view.dart @@ -107,7 +107,7 @@ class RuleFilterCreatorView extends GetWidget { padding: const EdgeInsets.only(top: 16), alignment: Alignment.center, child: Obx(() => Text( - controller.actionType.value.getTitle(context), + controller.actionType.getTitle(context), style: const TextStyle( fontWeight: FontWeight.bold, fontSize: 20, @@ -237,7 +237,7 @@ class RuleFilterCreatorView extends GetWidget { onTap: () => controller.closeView(context)), const SizedBox(width: 12), Obx(() => buildTextButton( - controller.actionType.value.getActionName(context), + controller.actionType.getActionName(context), width: 128, height: 44, backgroundColor: AppColor.colorTextButton, @@ -266,7 +266,7 @@ class RuleFilterCreatorView extends GetWidget { padding: const EdgeInsets.only(top: 16), alignment: Alignment.center, child: Obx(() => Text( - controller.actionType.value.getTitle(context), + controller.actionType.getTitle(context), style: const TextStyle( fontWeight: FontWeight.bold, fontSize: 20, @@ -396,7 +396,7 @@ class RuleFilterCreatorView extends GetWidget { onTap: () => controller.closeView(context))), const SizedBox(width: 12), Expanded(child: Obx(() => buildTextButton( - controller.actionType.value.getActionName(context), + controller.actionType.getActionName(context), width: 128, height: 44, backgroundColor: AppColor.colorTextButton, @@ -425,7 +425,7 @@ class RuleFilterCreatorView extends GetWidget { padding: const EdgeInsets.only(top: 16), alignment: Alignment.center, child: Obx(() => Text( - controller.actionType.value.getTitle(context), + controller.actionType.getTitle(context), style: const TextStyle( fontWeight: FontWeight.bold, fontSize: 20, @@ -585,7 +585,7 @@ class RuleFilterCreatorView extends GetWidget { onTap: () => controller.closeView(context))), const SizedBox(width: 12), Expanded(child: Obx(() => buildTextButton( - controller.actionType.value.getActionName(context), + controller.actionType.getActionName(context), width: 128, height: 44, backgroundColor: AppColor.colorTextButton,