Skip to content

Commit

Permalink
fixup! TF-2083 change condition widget to RuleFilterConditionWidget
Browse files Browse the repository at this point in the history
  • Loading branch information
hieutbui committed Sep 8, 2023
1 parent f1401f4 commit 8b8eadd
Show file tree
Hide file tree
Showing 3 changed files with 154 additions and 143 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// ignore_for_file: public_member_api_docs, sort_constructors_first
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';

class RulesFilterInputFieldArguments with EquatableMixin {
final FocusNode inputRuleConditionValueFocusNode;
final String errorRuleConditionValue;
final TextEditingController inputRuleConditionValueController;

RulesFilterInputFieldArguments({
required this.inputRuleConditionValueFocusNode,
required this.errorRuleConditionValue,
required this.inputRuleConditionValueController,
});

@override
List<Object?> get props => [
inputRuleConditionValueFocusNode,
errorRuleConditionValue,
inputRuleConditionValueController,
];
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';

import 'model/rules_filter_input_field_arguments.dart';

class RulesFilterCreatorController extends BaseMailboxController {

final _appToast = Get.find<AppToast>();
Expand All @@ -50,17 +52,15 @@ class RulesFilterCreatorController extends BaseMailboxController {
GetAllRulesInteractor? _getAllRulesInteractor;

final errorRuleName = Rxn<String>();
final listErrorRuleConditionValue = RxList<String>();
final errorRuleActionValue = Rxn<String>();
final emailRuleFilterActionSelected = Rxn<EmailRuleFilterAction>();
final mailboxSelected = Rxn<PresentationMailbox>();
final actionType = CreatorActionType.create.obs;
final listRuleCondition = RxList<RuleCondition>();

final TextEditingController inputRuleNameController = TextEditingController();
final List<TextEditingController> listInputConditionValueController = [];
final FocusNode inputRuleNameFocusNode = FocusNode();
final List<FocusNode> listInputRuleConditionFocusNode = [];
final listRuleConditionValueArguments = RxList<RulesFilterInputFieldArguments>();

String? _newRuleName;

Expand Down Expand Up @@ -111,12 +111,10 @@ class RulesFilterCreatorController extends BaseMailboxController {
void onClose() {
log('RulesFilterCreatorController::onClose():');
inputRuleNameFocusNode.dispose();
for (var inputRuleConditionFocusNode in listInputRuleConditionFocusNode) {
inputRuleConditionFocusNode.dispose();
}
inputRuleNameController.dispose();
for (var inputConditionValueController in listInputConditionValueController) {
inputConditionValueController.dispose();
for (var ruleConditionValueArguments in listRuleConditionValueArguments) {
ruleConditionValueArguments.inputRuleConditionValueFocusNode.dispose();
ruleConditionValueArguments.inputRuleConditionValueController.dispose();
}
super.onClose();
}
Expand Down Expand Up @@ -153,9 +151,12 @@ class RulesFilterCreatorController extends BaseMailboxController {
value: ''
);
listRuleCondition.add(newRuleCondition);
listInputConditionValueController.add(TextEditingController());
listInputRuleConditionFocusNode.add(FocusNode());
listErrorRuleConditionValue.add('');
RulesFilterInputFieldArguments newRuleConditionValueArguments = RulesFilterInputFieldArguments(
inputRuleConditionValueFocusNode: FocusNode(),
errorRuleConditionValue: '',
inputRuleConditionValueController: TextEditingController(),
);
listRuleConditionValueArguments.add(newRuleConditionValueArguments);
emailRuleFilterActionSelected.value = EmailRuleFilterAction.moveMessage;
if (_emailAddress != null) {
RuleCondition firstRuleCondition = RuleCondition(
Expand All @@ -165,7 +166,10 @@ class RulesFilterCreatorController extends BaseMailboxController {
);
listRuleCondition[0] = firstRuleCondition;
listRuleCondition.refresh();
_setValueInputField(listInputConditionValueController[0], listRuleCondition[0].value);
_setValueInputField(
listRuleConditionValueArguments[0].inputRuleConditionValueController,
listRuleCondition[0].value
);
}
if (_mailboxDestination != null) {
mailboxSelected.value = _mailboxDestination;
Expand All @@ -179,11 +183,17 @@ class RulesFilterCreatorController extends BaseMailboxController {
value: _currentTMailRule!.condition.value
);
listRuleCondition.add(currentRule);
listInputConditionValueController.add(TextEditingController());
listInputRuleConditionFocusNode.add(FocusNode());
listErrorRuleConditionValue.add('');
RulesFilterInputFieldArguments newRuleConditionValueArguments = RulesFilterInputFieldArguments(
inputRuleConditionValueFocusNode: FocusNode(),
errorRuleConditionValue: '',
inputRuleConditionValueController: TextEditingController(),
);
listRuleConditionValueArguments.add(newRuleConditionValueArguments);
emailRuleFilterActionSelected.value = EmailRuleFilterAction.moveMessage;
_setValueInputField(listInputConditionValueController[0], listRuleCondition[0].value);
_setValueInputField(
listRuleConditionValueArguments[0].inputRuleConditionValueController,
listRuleCondition[0].value
);
_newRuleName = _currentTMailRule!.name;
_setValueInputField(inputRuleNameController, _newRuleName ?? '');
_getAllMailboxAction();
Expand Down Expand Up @@ -227,12 +237,17 @@ class RulesFilterCreatorController extends BaseMailboxController {
listRuleCondition[ruleConditionIndex] = newRuleCondition;
listRuleCondition.refresh();
String? errorString = _getErrorStringByInputValue(context, listRuleCondition[ruleConditionIndex].value);
if (listErrorRuleConditionValue.length > ruleConditionIndex) {
listErrorRuleConditionValue[ruleConditionIndex] = errorString ?? '';
RulesFilterInputFieldArguments newRuleConditionValueArguments = RulesFilterInputFieldArguments(
inputRuleConditionValueFocusNode: listRuleConditionValueArguments[ruleConditionIndex].inputRuleConditionValueFocusNode,
errorRuleConditionValue: errorString ?? '',
inputRuleConditionValueController: listRuleConditionValueArguments[ruleConditionIndex].inputRuleConditionValueController,
);
if (listRuleConditionValueArguments.length > ruleConditionIndex) {
listRuleConditionValueArguments[ruleConditionIndex] = newRuleConditionValueArguments;
} else {
listErrorRuleConditionValue.add(errorString ?? '');
listRuleConditionValueArguments.add(newRuleConditionValueArguments);
}
listErrorRuleConditionValue.refresh();
listRuleConditionValueArguments.refresh();
}

String? _getErrorStringByInputValue(BuildContext context, String? inputValue) {
Expand All @@ -249,23 +264,27 @@ class RulesFilterCreatorController extends BaseMailboxController {
}

void selectRuleConditionField(rule_condition.Field? newField, int? ruleConditionIndex) {
RuleCondition newRuleCondition = RuleCondition(
field: newField!,
comparator: listRuleCondition[ruleConditionIndex!].comparator,
value: listRuleCondition[ruleConditionIndex].value,
);
listRuleCondition[ruleConditionIndex] = newRuleCondition;
listRuleCondition.refresh();
if (newField != null && ruleConditionIndex != null) {
RuleCondition newRuleCondition = RuleCondition(
field: newField,
comparator: listRuleCondition[ruleConditionIndex].comparator,
value: listRuleCondition[ruleConditionIndex].value,
);
listRuleCondition[ruleConditionIndex] = newRuleCondition;
listRuleCondition.refresh();
}
}

void selectRuleConditionComparator(rule_condition.Comparator? newComparator, int? ruleConditionIndex) {
RuleCondition newRuleCondition = RuleCondition(
field: listRuleCondition[ruleConditionIndex!].field,
comparator: newComparator!,
value: listRuleCondition[ruleConditionIndex].value,
);
listRuleCondition[ruleConditionIndex] = newRuleCondition;
listRuleCondition.refresh();
if (newComparator != null && ruleConditionIndex != null) {
RuleCondition newRuleCondition = RuleCondition(
field: listRuleCondition[ruleConditionIndex].field,
comparator: newComparator,
value: listRuleCondition[ruleConditionIndex].value,
);
listRuleCondition[ruleConditionIndex] = newRuleCondition;
listRuleCondition.refresh();
}
}

void selectEmailRuleFilterAction(EmailRuleFilterAction? newAction) {
Expand Down Expand Up @@ -302,16 +321,19 @@ class RulesFilterCreatorController extends BaseMailboxController {
return;
}

List<String> errorCondition = [];
for (var ruleCondition in listRuleCondition) {
if (_getErrorStringByInputValue(context, ruleCondition.value) != null) {
errorCondition.add(_getErrorStringByInputValue(context, ruleCondition.value)!);
}
}
if (errorCondition.isNotEmpty) {
listErrorRuleConditionValue.value = errorCondition;
for (var inputRuleConditionFocusNode in listInputRuleConditionFocusNode) {
inputRuleConditionFocusNode.requestFocus();
if (listRuleCondition.isNotEmpty) {
for (var ruleCondition in listRuleCondition) {
String? errorString = _getErrorStringByInputValue(context, ruleCondition.value);
if (errorString != null) {
int ruleConditionIndex = listRuleCondition.indexOf(ruleCondition);
RulesFilterInputFieldArguments newRuleConditionValueArguments = RulesFilterInputFieldArguments(
inputRuleConditionValueFocusNode: listRuleConditionValueArguments[ruleConditionIndex].inputRuleConditionValueFocusNode,
errorRuleConditionValue: errorString,
inputRuleConditionValueController: listRuleConditionValueArguments[ruleConditionIndex].inputRuleConditionValueController,
);
listRuleConditionValueArguments[ruleConditionIndex] = newRuleConditionValueArguments;
listRuleConditionValueArguments[listRuleCondition.indexOf(ruleCondition)].inputRuleConditionValueFocusNode.requestFocus();
}
}
return;
}
Expand Down Expand Up @@ -386,15 +408,15 @@ class RulesFilterCreatorController extends BaseMailboxController {
value: ''
);
listRuleCondition.add(newRuleCondition);
listInputConditionValueController.add(TextEditingController());
listInputRuleConditionFocusNode.add(FocusNode());
listErrorRuleConditionValue.add('');
listRuleConditionValueArguments.add(RulesFilterInputFieldArguments(
inputRuleConditionValueFocusNode: FocusNode(),
errorRuleConditionValue: '',
inputRuleConditionValueController: TextEditingController(),
));
}

void tapRemoveCondition(int ruleConditionIndex) {
listRuleCondition.removeAt(ruleConditionIndex);
listInputConditionValueController.removeAt(ruleConditionIndex);
listInputRuleConditionFocusNode.removeAt(ruleConditionIndex);
listErrorRuleConditionValue.removeAt(ruleConditionIndex);
listRuleConditionValueArguments.removeAt(ruleConditionIndex);
}
}
Loading

0 comments on commit 8b8eadd

Please sign in to comment.