Skip to content

Commit 7014d50

Browse files
committed
Conditions #40
- Implement visitor pattern for actions. - Refactor ConditionEvaluator and ConditionVariableVisitor to implement ActionVisitor. - Implement variable input field for set value action of string type. - Fix variable input field validation not showing error on invalid variable.
1 parent 3d0d52d commit 7014d50

File tree

11 files changed

+108
-44
lines changed

11 files changed

+108
-44
lines changed

lib/src/api/models/action/action.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,6 @@ abstract class ActionModel with SerializableMixin {
8585
return ApiCallAction.fromJson(json);
8686
}
8787
}
88+
89+
R? accept<R>(ActionVisitor<R> visitor);
8890
}

lib/src/api/models/action/api_call_action.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'package:equatable/equatable.dart';
22
import 'package:json_annotation/json_annotation.dart';
33

44
import '../../mixins.dart';
5+
import '../condition.dart';
56
import 'action.dart';
67

78
part 'api_call_action.g.dart';
@@ -41,4 +42,7 @@ class ApiCallAction extends ActionModel with EquatableMixin, SerializableMixin {
4142

4243
@override
4344
Map toJson() => _$ApiCallActionToJson(this);
45+
46+
@override
47+
R? accept<R>(ActionVisitor<R> visitor) => visitor.visitApiCall(this);
4448
}

lib/src/api/models/action/call_function_action.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,8 @@ class CallFunctionAction extends ActionModel
3434

3535
@override
3636
Map toJson() => _$CallFunctionActionToJson(this);
37+
38+
@override
39+
R? accept<R>(ActionVisitor<R> visitor) =>
40+
visitor.visitCallFunctionAction(this);
3741
}

lib/src/api/models/action/link_action.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'package:equatable/equatable.dart';
66
import 'package:json_annotation/json_annotation.dart';
77

88
import '../../mixins.dart';
9+
import '../condition.dart';
910
import 'action.dart';
1011

1112
part 'link_action.g.dart';
@@ -31,4 +32,7 @@ class LinkAction extends ActionModel with EquatableMixin, SerializableMixin {
3132

3233
@override
3334
Map toJson() => _$LinkActionToJson(this);
35+
36+
@override
37+
R? accept<R>(ActionVisitor<R> visitor) => visitor.visitLinkAction(this);
3438
}

lib/src/api/models/action/navigation_action.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'package:equatable/equatable.dart';
66
import 'package:json_annotation/json_annotation.dart';
77

88
import '../../mixins.dart';
9+
import '../condition.dart';
910
import 'action.dart';
1011

1112
part 'navigation_action.g.dart';
@@ -67,4 +68,7 @@ class NavigationAction extends ActionModel
6768

6869
@override
6970
Map toJson() => _$NavigationActionToJson(this);
71+
72+
@override
73+
R? accept<R>(ActionVisitor<R> visitor) => visitor.visitNavigationAction(this);
7074
}

lib/src/api/models/action/set_value_action.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ class SetValueAction extends ActionModel
4545

4646
@override
4747
Map toJson() => _$SetValueActionToJson(this);
48+
49+
@override
50+
R? accept<R>(ActionVisitor<R> visitor) => visitor.visitSetValueAction(this);
4851
}
4952

5053
/// Describes how to set the value.

lib/src/api/models/action/set_variable_action.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'package:equatable/equatable.dart';
66
import 'package:json_annotation/json_annotation.dart';
77

88
import '../../mixins.dart';
9+
import '../condition.dart';
910
import '../variables_model.dart';
1011
import 'action.dart';
1112

@@ -46,4 +47,7 @@ class SetVariableAction extends ActionModel
4647

4748
@override
4849
Map toJson() => _$SetVariableActionToJson(this);
50+
51+
@override
52+
R? accept<R>(ActionVisitor<R> visitor) => visitor.visitSetVariableAction(this);
4953
}

lib/src/api/models/action/set_variant_action.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,7 @@ class SetVariantAction extends ActionModel
4444

4545
@override
4646
Map toJson() => _$SetVariantActionToJson(this);
47+
48+
@override
49+
R? accept<R>(ActionVisitor<R> visitor) => visitor.visitSetVariantAction(this);
4750
}

lib/src/api/models/action/submit_action.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'package:equatable/equatable.dart';
66
import 'package:json_annotation/json_annotation.dart';
77

88
import '../../mixins.dart';
9+
import '../condition.dart';
910
import 'action.dart';
1011

1112
part 'submit_action.g.dart';
@@ -59,6 +60,9 @@ class SubmitAction extends ActionModel with EquatableMixin, SerializableMixin {
5960

6061
@override
6162
Map toJson() => _$SubmitActionToJson(this);
63+
64+
@override
65+
R? accept<R>(ActionVisitor<R> visitor) => visitor.visitSubmitAction(this);
6266
}
6367

6468
/// An action that submits a form to Mailchimp.

lib/src/api/models/condition.dart

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@ enum ConditionOperation {
2929
String get label {
3030
switch (this) {
3131
case ConditionOperation.equalsTo:
32-
return 'Equal';
32+
return 'Equals To';
3333
case ConditionOperation.notEqualsTo:
34-
return 'Not Equals';
34+
return 'Not Equal To';
3535
case ConditionOperation.greaterThan:
36-
return 'Greater';
36+
return 'Greater Than';
3737
case ConditionOperation.lessThan:
38-
return 'Less';
38+
return 'Less Than';
3939
}
4040
}
4141

@@ -591,6 +591,33 @@ abstract interface class ConditionVisitor<R> {
591591
R? visitElseCondition(ElseCondition condition);
592592
}
593593

594+
/// An interface for evaluating actions and retrieving the result.
595+
abstract interface class ActionVisitor<R> {
596+
/// Evaluates the action and returns the result.
597+
R? visitSetValueAction(SetValueAction action);
598+
599+
/// Evaluates the action and returns the result.
600+
R? visitSetVariableAction(SetVariableAction action);
601+
602+
/// Evaluates the action and returns the result.
603+
R? visitApiCall(ApiCallAction action);
604+
605+
/// Evaluates the action and returns the result.
606+
R? visitNavigationAction(NavigationAction action);
607+
608+
/// Evaluates the action and returns the result.
609+
R? visitSetVariantAction(SetVariantAction action);
610+
611+
/// Evaluates the action and returns the result.
612+
R? visitSubmitAction(SubmitAction action);
613+
614+
/// Evaluates the action and returns the result.
615+
R? visitLinkAction(LinkAction action);
616+
617+
/// Evaluates the action and returns the result.
618+
R? visitCallFunctionAction(CallFunctionAction action);
619+
}
620+
594621
/// An interface for evaluating expressions.
595622
abstract interface class ExpressionVisitor<R> {
596623
/// Evaluates the expression and returns the result.

0 commit comments

Comments
 (0)