TF-2084 Update rule filter creator controller for multi actions
(cherry picked from commit a6b70ca579ef7455bd4b5f143a309746d3f97630)
This commit is contained in:
+100
-20
@@ -1,4 +1,3 @@
|
||||
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:core/presentation/utils/app_toast.dart';
|
||||
import 'package:core/presentation/utils/keyboard_utils.dart';
|
||||
@@ -36,6 +35,7 @@ import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_rules
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_rules_interactor.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/email_rule_filter_action.dart';
|
||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/rule_filter_action_arguments.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/app_routes.dart';
|
||||
@@ -53,7 +53,6 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
||||
GetAllRulesInteractor? _getAllRulesInteractor;
|
||||
|
||||
final errorRuleName = Rxn<String>();
|
||||
final errorRuleActionValue = Rxn<String>();
|
||||
final emailRuleFilterActionSelected = Rxn<EmailRuleFilterAction>();
|
||||
final mailboxSelected = Rxn<PresentationMailbox>();
|
||||
final actionType = CreatorActionType.create.obs;
|
||||
@@ -64,6 +63,14 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
||||
final listRuleConditionValueArguments = RxList<RulesFilterInputFieldArguments>();
|
||||
final conditionCombinerType = Rxn<ConditionCombiner>();
|
||||
|
||||
final errorMailboxSelectedValue = Rxn<String>();
|
||||
final errorForwardEmailValue = Rxn<String>();
|
||||
final TextEditingController forwardEmailController = TextEditingController();
|
||||
final FocusNode forwardEmailFocusNode = FocusNode();
|
||||
final listEmailRuleFilterActionSelected = RxList<RuleFilterActionArguments>();
|
||||
int maxCountAction = EmailRuleFilterAction.values.where((action) => action.getSupported() == true).length - 1;
|
||||
final isShowAddAction = Rxn<bool>();
|
||||
|
||||
String? _newRuleName;
|
||||
|
||||
RulesFilterCreatorArguments? arguments;
|
||||
@@ -118,6 +125,8 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
||||
ruleConditionValueArguments.focusNode.dispose();
|
||||
ruleConditionValueArguments.controller.dispose();
|
||||
}
|
||||
forwardEmailFocusNode.dispose();
|
||||
forwardEmailController.dispose();
|
||||
super.onClose();
|
||||
}
|
||||
|
||||
@@ -160,7 +169,9 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
||||
controller: TextEditingController(),
|
||||
);
|
||||
listRuleConditionValueArguments.add(newRuleConditionValueArguments);
|
||||
emailRuleFilterActionSelected.value = EmailRuleFilterAction.moveMessage;
|
||||
isShowAddAction.value = true;
|
||||
RuleFilterActionArguments newRuleFilterAction = RuleFilterActionArguments.newAction(null);
|
||||
listEmailRuleFilterActionSelected.add(newRuleFilterAction);
|
||||
if (_emailAddress != null) {
|
||||
RuleCondition firstRuleCondition = RuleCondition(
|
||||
field: rule_condition.Field.from,
|
||||
@@ -294,11 +305,34 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
||||
}
|
||||
}
|
||||
|
||||
void selectEmailRuleFilterAction(EmailRuleFilterAction? newAction) {
|
||||
emailRuleFilterActionSelected.value = newAction;
|
||||
void selectEmailRuleFilterAction(EmailRuleFilterAction? newAction, int ruleFilterActionIndex) {
|
||||
RuleFilterActionArguments newRuleFilterAction = RuleFilterActionArguments.newAction(newAction);
|
||||
if (newRuleFilterAction is RejectItActionArguments) {
|
||||
listEmailRuleFilterActionSelected.clear();
|
||||
forwardEmailController.clear();
|
||||
mailboxSelected.value = null;
|
||||
listEmailRuleFilterActionSelected.add(newRuleFilterAction);
|
||||
isShowAddAction.value = false;
|
||||
errorForwardEmailValue.value = null;
|
||||
errorMailboxSelectedValue.value = null;
|
||||
} else {
|
||||
if (listEmailRuleFilterActionSelected.length < maxCountAction) {
|
||||
isShowAddAction.value = true;
|
||||
}
|
||||
final int duplicatedIndex = listEmailRuleFilterActionSelected.indexWhere((filterAction) => filterAction.action == newAction);
|
||||
if (duplicatedIndex != -1) {
|
||||
_appToast.showToastErrorMessage(
|
||||
currentOverlayContext!,
|
||||
AppLocalizations.of(currentContext!).duplicatedActionError,
|
||||
);
|
||||
} else {
|
||||
listEmailRuleFilterActionSelected[ruleFilterActionIndex] = newRuleFilterAction;
|
||||
}
|
||||
}
|
||||
listEmailRuleFilterActionSelected.refresh();
|
||||
}
|
||||
|
||||
void selectMailbox(BuildContext context) async {
|
||||
void selectMailbox(BuildContext context, int ruleFilterActionIndex) async {
|
||||
if (_accountId != null) {
|
||||
final arguments = DestinationPickerArguments(
|
||||
_accountId!,
|
||||
@@ -311,9 +345,11 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
||||
|
||||
if (destinationMailbox is PresentationMailbox && context.mounted) {
|
||||
mailboxSelected.value = destinationMailbox;
|
||||
errorRuleActionValue.value = _getErrorStringByInputValue(
|
||||
errorMailboxSelectedValue.value = _getErrorStringByInputValue(
|
||||
context,
|
||||
mailboxSelected.value?.getDisplayName(context));
|
||||
RuleFilterActionArguments newRuleFilterAction = MoveMessageActionArguments(mailbox: mailboxSelected.value);
|
||||
listEmailRuleFilterActionSelected[ruleFilterActionIndex] = newRuleFilterAction;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -350,19 +386,7 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
||||
}
|
||||
}
|
||||
|
||||
final errorAction = _getErrorStringByInputValue(context, mailboxSelected.value?.getDisplayName(context));
|
||||
log('RulesFilterCreatorController::createNewRuleFilter:errorAction: $errorAction');
|
||||
if (errorAction?.isNotEmpty == true) {
|
||||
errorRuleActionValue.value = errorAction;
|
||||
if (currentOverlayContext != null && currentContext != null) {
|
||||
_appToast.showToastErrorMessage(
|
||||
currentOverlayContext!,
|
||||
AppLocalizations.of(currentContext!).this_field_cannot_be_blank);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (listRuleCondition.isEmpty || emailRuleFilterActionSelected.value == null) {
|
||||
if (listRuleCondition.isEmpty == true || listEmailRuleFilterActionSelected.isEmpty == true) {
|
||||
if (currentOverlayContext != null && currentContext != null) {
|
||||
_appToast.showToastErrorMessage(
|
||||
currentOverlayContext!,
|
||||
@@ -371,6 +395,32 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
||||
return;
|
||||
}
|
||||
|
||||
if (listEmailRuleFilterActionSelected.isNotEmpty == true) {
|
||||
for (var ruleFilterAction in listEmailRuleFilterActionSelected) {
|
||||
if (ruleFilterAction is MoveMessageActionArguments) {
|
||||
final errorAction = _getErrorStringByInputValue(context, mailboxSelected.value?.getDisplayName(context));
|
||||
log('RulesFilterCreatorController::createNewRuleFilter:errorAction: $errorAction');
|
||||
if (errorAction?.isNotEmpty == true) {
|
||||
if (currentOverlayContext != null && currentContext != null) {
|
||||
_appToast.showToastErrorMessage(
|
||||
currentOverlayContext!,
|
||||
AppLocalizations.of(currentContext!).notSelectedMailboxToMoveMessage);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (ruleFilterAction is ForwardActionArguments) {
|
||||
final errorAction = _getErrorStringByInputValue(context, ruleFilterAction.forwardEmail);
|
||||
log('RulesFilterCreatorController::createNewRuleFilter:errorAction: $errorAction');
|
||||
if (errorAction?.isNotEmpty == true) {
|
||||
errorForwardEmailValue.value = errorAction;
|
||||
forwardEmailFocusNode.requestFocus();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
late EquatableMixin ruleFilterRequest;
|
||||
|
||||
if (actionType.value == CreatorActionType.create) {
|
||||
@@ -435,4 +485,34 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
||||
conditionCombinerType.value = combinerType;
|
||||
}
|
||||
}
|
||||
void tapAddAction() {
|
||||
RuleFilterActionArguments newRuleFilterAction = RuleFilterActionArguments.newAction(null);
|
||||
listEmailRuleFilterActionSelected.add(newRuleFilterAction);
|
||||
if (listEmailRuleFilterActionSelected.length >= maxCountAction) {
|
||||
isShowAddAction.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
void tapRemoveAction(int ruleFilterActionIndex) {
|
||||
EmailRuleFilterAction? actionToRemove = listEmailRuleFilterActionSelected[ruleFilterActionIndex].action;
|
||||
if (actionToRemove is ForwardActionArguments) {
|
||||
forwardEmailController.clear();
|
||||
errorForwardEmailValue.value = null;
|
||||
}
|
||||
if (actionToRemove is MoveMessageActionArguments) {
|
||||
mailboxSelected.value = null;
|
||||
errorMailboxSelectedValue.value = null;
|
||||
}
|
||||
isShowAddAction.value = true;
|
||||
listEmailRuleFilterActionSelected.removeAt(ruleFilterActionIndex);
|
||||
}
|
||||
|
||||
void updateForwardEmailValue(BuildContext context, String? value, int ruleActionIndex) {
|
||||
String? errorAction = _getErrorStringByInputValue(context, value);
|
||||
log('RulesFilterCreatorController::createNewRuleFilter:errorAction: $errorAction');
|
||||
RuleFilterActionArguments newRuleFilterAction = ForwardActionArguments(forwardEmail: value);
|
||||
errorForwardEmailValue.value = errorAction;
|
||||
listEmailRuleFilterActionSelected[ruleActionIndex] = newRuleFilterAction;
|
||||
listEmailRuleFilterActionSelected.refresh();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user