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 660e6c4a2..ef7e2c51d 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 @@ -3,6 +3,7 @@ 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/edit_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'; @@ -14,6 +15,7 @@ class EmailRulesBindings extends BaseBindings { Get.find(), Get.find(), Get.find(), + Get.find(), )); } @@ -28,6 +30,7 @@ class EmailRulesBindings extends BaseBindings { Get.lazyPut(() => GetAllRulesInteractor(Get.find())); Get.lazyPut(() => DeleteEmailRuleInteractor(Get.find())); Get.lazyPut(() => CreateNewEmailRuleFilterInteractor(Get.find())); + Get.lazyPut(() => EditEmailRuleFilterInteractor(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 c9586bcc7..070ac8940 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 @@ -1,21 +1,28 @@ import 'package:core/presentation/extensions/color_extension.dart'; import 'package:core/presentation/resources/image_paths.dart'; +import 'package:core/presentation/utils/app_toast.dart'; +import 'package:core/utils/app_logger.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/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'; 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/edit_email_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/edit_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/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/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; @@ -26,16 +33,19 @@ class EmailRulesController extends BaseController { final GetAllRulesInteractor _getAllRulesInteractor; final DeleteEmailRuleInteractor _deleteEmailRuleInteractor; final CreateNewEmailRuleFilterInteractor _createNewEmailRuleFilterInteractor; + final EditEmailRuleFilterInteractor _editEmailRuleFilterInteractor; final _accountDashBoardController = Get.find(); final _imagePaths = Get.find(); + final _appToast = Get.find(); final listEmailRule = [].obs; EmailRulesController( this._getAllRulesInteractor, this._deleteEmailRuleInteractor, - this._createNewEmailRuleFilterInteractor + this._createNewEmailRuleFilterInteractor, + this._editEmailRuleFilterInteractor, ); @override @@ -52,6 +62,8 @@ class EmailRulesController extends BaseController { } } else if (success is CreateNewRuleFilterSuccess) { _createNewRuleFilterSuccess(success); + } else if (success is EditEmailRuleFilterSuccess) { + _editEmailRuleFilterSuccess(success); } }); } @@ -94,13 +106,57 @@ class EmailRulesController extends BaseController { void _createNewRuleFilterSuccess(CreateNewRuleFilterSuccess success) { if (success.newListRules.isNotEmpty == true) { - listEmailRule.clear(); - listEmailRule.addAll(success.newListRules); + if (currentOverlayContext != null && currentContext != null) { + _appToast.showToastWithIcon( + currentOverlayContext!, + message: AppLocalizations.of(currentContext!).newFilterWasCreated, + icon: _imagePaths.icSelected); + } + log('EmailRulesController::_createNewRuleFilterSuccess(): ${success.newListRules}'); + listEmailRule.value = success.newListRules; + listEmailRule.refresh(); } } - void editEmailRule(TMailRule rule) { - //TODO: editEmailRule + void editEmailRule(TMailRule rule) async { + final accountId = _accountDashBoardController.accountId.value; + if (accountId != null) { + final emailRuleFilterChanged = await 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( + AccountId accountId, + EditEmailRuleFilterRequest ruleFilterRequest + ) { + consumeState(_editEmailRuleFilterInteractor.execute(accountId, ruleFilterRequest)); + } + + void _editEmailRuleFilterSuccess(EditEmailRuleFilterSuccess success) { + if (success.listRulesUpdated.isNotEmpty == true) { + if (currentOverlayContext != null && currentContext != null) { + _appToast.showToastWithIcon( + currentOverlayContext!, + message: AppLocalizations.of(currentContext!).yourFilterHasBeenUpdated, + icon: _imagePaths.icSelected); + } + log('EmailRulesController::_editEmailRuleFilterSuccess(): ${success.listRulesUpdated}'); + listEmailRule.value = success.listRulesUpdated; + listEmailRule.refresh(); + } } void deleteEmailRule(TMailRule emailRule) { @@ -144,13 +200,16 @@ class EmailRulesController extends BaseController { Widget _editEmailRuleActionTile(BuildContext context, TMailRule rule) { return (EmailRuleBottomSheetActionTileBuilder( - const Key('edit_emailRule_action'), - SvgPicture.asset(_imagePaths.icEdit), - AppLocalizations.of(context).editRule, - rule, - iconLeftPadding: const EdgeInsets.only(left: 12, right: 16), - iconRightPadding: const EdgeInsets.only(right: 12), - )..onActionClick((rule) => editEmailRule(rule))) - .build(); + const Key('edit_emailRule_action'), + SvgPicture.asset(_imagePaths.icEdit), + AppLocalizations.of(context).editRule, + rule, + iconLeftPadding: const EdgeInsets.only(left: 12, right: 16), + iconRightPadding: const EdgeInsets.only(right: 12)) + ..onActionClick((rule) { + editEmailRule(rule); + popBack(); + })) + .build(); } } \ No newline at end of file diff --git a/lib/features/manage_account/presentation/email_rules/email_rules_view.dart b/lib/features/manage_account/presentation/email_rules/email_rules_view.dart index ca4ddd3a4..15feb4b9f 100644 --- a/lib/features/manage_account/presentation/email_rules/email_rules_view.dart +++ b/lib/features/manage_account/presentation/email_rules/email_rules_view.dart @@ -37,9 +37,7 @@ class EmailRulesView extends GetWidget with AppLoaderMixin EmailRulesHeaderWidget( imagePaths: _imagePaths, responsiveUtils: _responsiveUtils, - createRule: () { - //TODO: createRule - }, + createRule: () => controller.goToCreateNewRule(), ), const SizedBox(height: 22), _buildLoadingView(), diff --git a/lib/features/manage_account/presentation/email_rules/widgets/email_rule_item_widget.dart b/lib/features/manage_account/presentation/email_rules/widgets/email_rule_item_widget.dart index 59f9ff97c..c0eb04ce9 100644 --- a/lib/features/manage_account/presentation/email_rules/widgets/email_rule_item_widget.dart +++ b/lib/features/manage_account/presentation/email_rules/widgets/email_rule_item_widget.dart @@ -5,17 +5,18 @@ import 'package:get/get.dart'; import 'package:rule_filter/rule_filter/tmail_rule.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/email_rules_controller.dart'; -class EmailRulesItemWidget extends GetWidget { +class EmailRulesItemWidget extends StatelessWidget { final _responsiveUtils = Get.find(); final _imagePaths = Get.find(); + final _emailRuleController = Get.find(); + + final TMailRule rule; EmailRulesItemWidget({ Key? key, required this.rule, }) : super(key: key); - final TMailRule rule; - @override Widget build(BuildContext context) { return Container( @@ -40,7 +41,7 @@ class EmailRulesItemWidget extends GetWidget { fit: BoxFit.fill, ), onTap: () { - controller.editEmailRule(rule); + _emailRuleController.editEmailRule(rule); }), if (!_responsiveUtils.isMobile(context)) buildIconWeb( @@ -49,7 +50,7 @@ class EmailRulesItemWidget extends GetWidget { fit: BoxFit.fill, ), onTap: () { - controller.deleteEmailRule(rule); + _emailRuleController.deleteEmailRule(rule); }), if (_responsiveUtils.isMobile(context)) buildIconWeb( @@ -59,7 +60,7 @@ class EmailRulesItemWidget extends GetWidget { ), iconPadding: const EdgeInsets.all(0), onTap: () { - controller.openEditRuleMenuAction(context, rule); + _emailRuleController.openEditRuleMenuAction(context, rule); }), ]), ); diff --git a/lib/features/manage_account/presentation/email_rules/widgets/email_rules_header_widget.dart b/lib/features/manage_account/presentation/email_rules/widgets/email_rules_header_widget.dart index 4d77f57a4..7a7dfdee3 100644 --- a/lib/features/manage_account/presentation/email_rules/widgets/email_rules_header_widget.dart +++ b/lib/features/manage_account/presentation/email_rules/widgets/email_rules_header_widget.dart @@ -3,11 +3,9 @@ import 'package:core/presentation/resources/image_paths.dart'; import 'package:core/presentation/utils/responsive_utils.dart'; import 'package:core/presentation/views/button/button_builder.dart'; import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/email_rules_controller.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; -class EmailRulesHeaderWidget extends GetWidget { +class EmailRulesHeaderWidget extends StatelessWidget { const EmailRulesHeaderWidget({ Key? key, required this.createRule, @@ -63,7 +61,7 @@ class EmailRulesHeaderWidget extends GetWidget { color: Colors.white, fontWeight: FontWeight.w500, )) - ..onPressActionClick(() => controller.goToCreateNewRule()) + ..onPressActionClick(() => createRule.call()) ..text( AppLocalizations.of(context).addNewRule, isVertical: false, @@ -85,7 +83,7 @@ class EmailRulesHeaderWidget extends GetWidget { color: Colors.white, fontWeight: FontWeight.w500, )) - ..onPressActionClick(() => controller.goToCreateNewRule()) + ..onPressActionClick(() => createRule.call()) ..text( AppLocalizations.of(context).addNewRule, isVertical: false, diff --git a/lib/features/manage_account/presentation/email_rules/widgets/list_email_rules_widget.dart b/lib/features/manage_account/presentation/email_rules/widgets/list_email_rules_widget.dart index d25078165..f0761695d 100644 --- a/lib/features/manage_account/presentation/email_rules/widgets/list_email_rules_widget.dart +++ b/lib/features/manage_account/presentation/email_rules/widgets/list_email_rules_widget.dart @@ -1,6 +1,9 @@ import 'package:core/presentation/extensions/color_extension.dart'; +import 'package:core/utils/app_logger.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:jmap_dart_client/jmap/core/id.dart'; +import 'package:rule_filter/rule_filter/rule_id.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/email_rules_controller.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/widgets/email_rule_item_widget.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; @@ -36,22 +39,24 @@ class ListEmailRulesWidget extends GetWidget { thickness: 0.2, ), Expanded( - child: Obx( - () => ListView.separated( + child: Obx(() { + log('ListEmailRulesWidget::build(): ${controller.listEmailRule}'); + return ListView.separated( shrinkWrap: true, itemCount: controller.listEmailRule.length, itemBuilder: (context, index) { - final rule = controller.listEmailRule[index]; - return EmailRulesItemWidget(rule: rule); + final ruleWithId = controller.listEmailRule[index] + .copyWith(id: RuleId(id: Id(index.toString()))); + log('ListEmailRulesWidget::build(): $ruleWithId'); + return EmailRulesItemWidget(rule: ruleWithId); }, - separatorBuilder: (BuildContext context, int index) => - const Divider( - color: AppColor.lineItemListColor, - height: 1, - thickness: 0.2, - ), - ), - ), + separatorBuilder: (context, index) => const Divider( + color: AppColor.lineItemListColor, + height: 1, + thickness: 0.2, + ), + ); + }), ), ]), ); diff --git a/lib/features/rules_filter_creator/presentation/model/creator_action_type.dart b/lib/features/rules_filter_creator/presentation/model/creator_action_type.dart index 689393fff..61988611c 100644 --- a/lib/features/rules_filter_creator/presentation/model/creator_action_type.dart +++ b/lib/features/rules_filter_creator/presentation/model/creator_action_type.dart @@ -4,19 +4,24 @@ import 'package:flutter/material.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; enum CreatorActionType { - create; + create, + edit; String getTitle(BuildContext context) { switch(this) { case CreatorActionType.create: return AppLocalizations.of(context).createNewRule.inCaps; + case CreatorActionType.edit: + return AppLocalizations.of(context).editRule.inCaps; } } String getActionName(BuildContext context) { switch(this) { case CreatorActionType.create: - return AppLocalizations.of(context).create.inCaps; + return AppLocalizations.of(context).create; + case CreatorActionType.edit: + return AppLocalizations.of(context).save; } } } \ No newline at end of file diff --git a/lib/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart b/lib/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart index 4b2acd1d7..b2f54e189 100644 --- a/lib/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart +++ b/lib/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart @@ -1,16 +1,19 @@ import 'package:equatable/equatable.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/rules_filter_creator/presentation/model/creator_action_type.dart'; class RulesFilterCreatorArguments with EquatableMixin { final AccountId accountId; final CreatorActionType actionType; + final TMailRule? tMailRule; RulesFilterCreatorArguments(this.accountId, { - this.actionType = CreatorActionType.create + this.actionType = CreatorActionType.create, + this.tMailRule }); @override - List get props => [accountId, actionType]; + List get props => [accountId, actionType, tMailRule]; } \ No newline at end of file diff --git a/lib/features/rules_filter_creator/presentation/rules_filter_creator_bindings.dart b/lib/features/rules_filter_creator/presentation/rules_filter_creator_bindings.dart index 5283cf6a7..36215d189 100644 --- a/lib/features/rules_filter_creator/presentation/rules_filter_creator_bindings.dart +++ b/lib/features/rules_filter_creator/presentation/rules_filter_creator_bindings.dart @@ -1,36 +1,75 @@ +import 'package:core/data/model/source_type/data_source_type.dart'; import 'package:get/get.dart'; import 'package:tmail_ui_user/features/base/base_bindings.dart'; +import 'package:tmail_ui_user/features/caching/state_cache_client.dart'; +import 'package:tmail_ui_user/features/mailbox/data/datasource/mailbox_datasource.dart'; +import 'package:tmail_ui_user/features/mailbox/data/datasource/state_datasource.dart'; +import 'package:tmail_ui_user/features/mailbox/data/datasource_impl/mailbox_cache_datasource_impl.dart'; +import 'package:tmail_ui_user/features/mailbox/data/datasource_impl/mailbox_datasource_impl.dart'; +import 'package:tmail_ui_user/features/mailbox/data/datasource_impl/state_datasource_impl.dart'; +import 'package:tmail_ui_user/features/mailbox/data/local/mailbox_cache_manager.dart'; +import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_api.dart'; +import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_isolate_worker.dart'; +import 'package:tmail_ui_user/features/mailbox/data/repository/mailbox_repository_impl.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.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_tree_builder.dart'; import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart'; import 'package:tmail_ui_user/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart'; class RulesFilterCreatorBindings extends BaseBindings { + @override + void dependencies() { + _bindingsUtils(); + super.dependencies(); + } + + void _bindingsUtils() { + Get.lazyPut(() => TreeBuilder()); + } + @override void bindingsController() { Get.lazyPut(() => RulesFilterCreatorController( - Get.find() + Get.find(), + Get.find(), + Get.find() )); } @override void bindingsDataSource() { + Get.lazyPut(() => Get.find()); + Get.lazyPut(() => Get.find()); } @override void bindingsDataSourceImpl() { - + Get.lazyPut(() => MailboxDataSourceImpl(Get.find(), Get.find())); + Get.lazyPut(() => MailboxCacheDataSourceImpl(Get.find())); + Get.lazyPut(() => StateDataSourceImpl(Get.find())); } @override void bindingsInteractor() { Get.lazyPut(() => VerifyNameInteractor()); + Get.lazyPut(() => GetAllMailboxInteractor(Get.find())); } @override void bindingsRepository() { + Get.lazyPut(() => Get.find()); } @override void bindingsRepositoryImpl() { + Get.lazyPut(() => MailboxRepositoryImpl( + { + DataSourceType.network: Get.find(), + DataSourceType.local: Get.find() + }, + Get.find(), + )); } } \ No newline at end of file diff --git a/lib/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart b/lib/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart index b71db6916..0f64fece6 100644 --- a/lib/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart +++ b/lib/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart @@ -1,5 +1,8 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; import 'package:core/utils/app_logger.dart'; +import 'package:dartz/dartz.dart'; import 'package:flutter/cupertino.dart'; import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; @@ -8,8 +11,10 @@ import 'package:rule_filter/rule_filter/rule_action.dart'; import 'package:rule_filter/rule_filter/rule_append_in.dart'; import 'package:rule_filter/rule_filter/rule_condition.dart' as rule_condition; 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/base/base_mailbox_controller.dart'; import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.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/presentation/model/mailbox_actions.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'; @@ -21,9 +26,10 @@ import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/r import 'package:tmail_ui_user/main/routes/app_routes.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; -class RulesFilterCreatorController extends BaseController { +class RulesFilterCreatorController extends BaseMailboxController { final VerifyNameInteractor _verifyNameInteractor; + final GetAllMailboxInteractor _getAllMailboxInteractor; final actionType = CreatorActionType.create.obs; final errorRuleName = Rxn(); @@ -40,8 +46,13 @@ class RulesFilterCreatorController extends BaseController { AccountId? _accountId; String? _newRuleName; String? _newConditionValue; + TMailRule? _currentTMailRule; - RulesFilterCreatorController(this._verifyNameInteractor); + RulesFilterCreatorController( + this._verifyNameInteractor, + this._getAllMailboxInteractor, + treeBuilder + ) : super(treeBuilder); @override void onReady() { @@ -60,6 +71,24 @@ class RulesFilterCreatorController extends BaseController { @override void onDone() {} + @override + void onData(Either newState) { + super.onData(newState); + newState.fold( + (failure) { + if (failure is GetAllMailboxFailure) { + _updateStateCreatorButton(); + } + }, + (success) async { + if (success is GetAllMailboxSuccess) { + await buildTree(success.mailboxList); + _setUpMailboxSelected(); + _updateStateCreatorButton(); + } + }); + } + @override void onError(error) {} @@ -68,19 +97,54 @@ class RulesFilterCreatorController extends BaseController { if (arguments is RulesFilterCreatorArguments) { _accountId = arguments.accountId; actionType.value = arguments.actionType; + _currentTMailRule = arguments.tMailRule; } } void _setUpDefaultValueRuleFilter() { - if (actionType.value == CreatorActionType.create) { - ruleConditionFieldSelected.value = rule_condition.Field.from; - ruleConditionComparatorSelected.value = rule_condition.Comparator.exactlyEquals; - emailRuleFilterActionSelected.value = EmailRuleFilterAction.moveMessage; + switch(actionType.value) { + case CreatorActionType.create: + ruleConditionFieldSelected.value = rule_condition.Field.from; + ruleConditionComparatorSelected.value = rule_condition.Comparator.contains; + emailRuleFilterActionSelected.value = EmailRuleFilterAction.moveMessage; + break; + case CreatorActionType.edit: + if (_currentTMailRule != null) { + ruleConditionFieldSelected.value = _currentTMailRule!.condition.field; + ruleConditionComparatorSelected.value = _currentTMailRule!.condition.comparator; + emailRuleFilterActionSelected.value = EmailRuleFilterAction.moveMessage; + _newConditionValue = _currentTMailRule!.condition.value; + _setValueInputField(inputConditionValueController, _newConditionValue ?? ''); + _newRuleName = _currentTMailRule!.name; + _setValueInputField(inputRuleNameController, _newRuleName ?? ''); + _getAllMailboxAction(); + } + break; } _updateStateCreatorButton(); } + void _setValueInputField(TextEditingController controller, String value) { + controller.value = controller.value.copyWith( + text: value, + selection: TextSelection.collapsed(offset: value.length)); + } + + void _setUpMailboxSelected() { + if (_currentTMailRule != null) { + final mailboxIdOfRule = _currentTMailRule!.action.appendIn.mailboxIds.first; + final mailboxNode = findMailboxNodeById(mailboxIdOfRule); + mailboxSelected.value = mailboxNode?.item; + } + } + + void _getAllMailboxAction() { + if (_accountId != null) { + consumeState(_getAllMailboxInteractor.execute(_accountId!)); + } + } + void updateRuleName(BuildContext context, String? value) { _newRuleName = value; errorRuleName.value = _getErrorStringByInputValue(context, _newRuleName); @@ -161,6 +225,7 @@ class RulesFilterCreatorController extends BaseController { } final newTMailRule = TMailRule( + id: _currentTMailRule?.id, name: _newRuleName!, action: RuleAction( appendIn: RuleAppendIn( 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 70b1a4d95..04d621bdb 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 @@ -415,8 +415,8 @@ class RuleFilterCreatorView extends GetWidget { height: 44, backgroundColor: AppColor.colorTextButton .withOpacity(controller.isCreateRuleFilterValid.value - ? 1.0 - : 0.4), + ? 1.0 + : 0.4), radius: 10, onTap: () { if (controller.isCreateRuleFilterValid.value) { @@ -599,8 +599,8 @@ class RuleFilterCreatorView extends GetWidget { height: 44, backgroundColor: AppColor.colorTextButton .withOpacity(controller.isCreateRuleFilterValid.value - ? 1.0 - : 0.4), + ? 1.0 + : 0.4), radius: 10, onTap: () { if (controller.isCreateRuleFilterValid.value) { diff --git a/lib/features/rules_filter_creator/presentation/widgets/rules_filter_input_field_builder.dart b/lib/features/rules_filter_creator/presentation/widgets/rules_filter_input_field_builder.dart index f16ba08cd..65a6706c4 100644 --- a/lib/features/rules_filter_creator/presentation/widgets/rules_filter_input_field_builder.dart +++ b/lib/features/rules_filter_creator/presentation/widgets/rules_filter_input_field_builder.dart @@ -11,14 +11,12 @@ class RulesFilterInputField extends StatelessWidget { final String? errorText; final String? hintText; final TextEditingController? editingController; - final bool isMandatory; final OnChangeFilterInputAction? onChangeAction; const RulesFilterInputField({ Key? key, this.hintText, this.errorText, - this.isMandatory = false, this.editingController, this.onChangeAction }) : super(key: key); diff --git a/lib/l10n/intl_messages.arb b/lib/l10n/intl_messages.arb index 710147f4d..e99978d82 100644 --- a/lib/l10n/intl_messages.arb +++ b/lib/l10n/intl_messages.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2022-08-11T11:23:27.430951", + "@@last_modified": "2022-08-12T09:07:20.482325", "initializing_data": "Initializing data...", "@initializing_data": { "type": "text", @@ -1879,5 +1879,17 @@ "type": "text", "placeholders_order": [], "placeholders": {} + }, + "newFilterWasCreated": "New filter was created", + "@newFilterWasCreated": { + "type": "text", + "placeholders_order": [], + "placeholders": {} + }, + "yourFilterHasBeenUpdated": "Your filter has been updated", + "@yourFilterHasBeenUpdated": { + "type": "text", + "placeholders_order": [], + "placeholders": {} } } \ No newline at end of file diff --git a/lib/main/localizations/app_localizations.dart b/lib/main/localizations/app_localizations.dart index df2f3edae..3399bfbe8 100644 --- a/lib/main/localizations/app_localizations.dart +++ b/lib/main/localizations/app_localizations.dart @@ -1933,4 +1933,16 @@ class AppLocalizations { name: 'ruleFilterAddressCcField', ); } + + String get newFilterWasCreated { + return Intl.message( + 'New filter was created', + name: 'newFilterWasCreated'); + } + + String get yourFilterHasBeenUpdated { + return Intl.message( + 'Your filter has been updated', + name: 'yourFilterHasBeenUpdated'); + } } \ No newline at end of file