Skip to content

Commit 117902e

Browse files
committed
Implement more operators.
1 parent 1512b9b commit 117902e

File tree

2 files changed

+95
-8
lines changed

2 files changed

+95
-8
lines changed

lib/src/api/models/condition.dart

Lines changed: 89 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,30 @@ enum ConditionOperation {
2727

2828
/// Checks if the value of the variable is less than or equal to the
2929
/// value provided.
30-
lessThanOrEqualTo;
30+
lessThanOrEqualTo,
31+
32+
/// Checks if the value of the variable is empty. This is applicable only
33+
/// for strings and collections.
34+
isEmpty,
35+
36+
/// Checks if the value of the variable is not empty. This is applicable only
37+
/// for strings and collections.
38+
isNotEmpty,
39+
40+
/// Checks if the value of the variable contains a given item. This is
41+
/// applicable only for collections.
42+
contains,
43+
44+
/// Checks if the value of the variable is odd. This is applicable only
45+
/// for integers.
46+
isOdd,
47+
48+
/// Checks if the value of the variable is even. This is applicable only
49+
/// for integers.
50+
isEven,
51+
52+
/// Checks if the value of the variable is null.
53+
isNull;
3154

3255
/// label for the operation
3356
String get label => switch (this) {
@@ -37,6 +60,12 @@ enum ConditionOperation {
3760
lessThan => 'Less Than',
3861
greaterThanOrEqualTo => 'Greater Than Or Equal To',
3962
lessThanOrEqualTo => 'Less Than Or Equal To',
63+
isEmpty => 'Is Empty',
64+
isNotEmpty => 'Is Not Empty',
65+
contains => 'Contains',
66+
isOdd => 'Is Odd',
67+
isEven => 'Is Even',
68+
isNull => 'Is Null',
4069
};
4170

4271
/// short description of the operation
@@ -47,16 +76,28 @@ enum ConditionOperation {
4776
lessThan => 'less than',
4877
greaterThanOrEqualTo => 'greater than or equal to',
4978
lessThanOrEqualTo => 'less than or equal to',
79+
isEmpty => 'is empty',
80+
isNotEmpty => 'is not empty',
81+
contains => 'contains',
82+
isOdd => 'is odd',
83+
isEven => 'is even',
84+
isNull => 'is null',
5085
};
5186

5287
/// short description of the operation
53-
String get sign => switch (this) {
88+
String? get sign => switch (this) {
5489
equalsTo => '==',
5590
notEqualsTo => '!=',
5691
greaterThan => '>',
5792
lessThan => '<',
5893
greaterThanOrEqualTo => '>=',
5994
lessThanOrEqualTo => '<=',
95+
isEmpty => null,
96+
isNotEmpty => null,
97+
contains => null,
98+
isOdd => null,
99+
isEven => null,
100+
isNull => null,
60101
};
61102

62103
/// Allows the provided [visitor] to visit this operation.
@@ -70,6 +111,28 @@ enum ConditionOperation {
70111
visitor.visitGreaterThanOrEqualToOperator(left, right),
71112
lessThanOrEqualTo =>
72113
visitor.visitLessThanOrEqualToOperator(left, right),
114+
isEmpty => visitor.visitIsEmptyOperator(left),
115+
isNotEmpty => visitor.visitIsNotEmptyOperator(left),
116+
contains => visitor.visitContainsOperator(left, right),
117+
isOdd => visitor.visitIsOddOperator(left),
118+
isEven => visitor.visitIsEvenOperator(left),
119+
isNull => visitor.visitIsNullOperator(left),
120+
};
121+
122+
/// Returns true if the operation requires a right operand.
123+
bool get requiresRightOperand => switch (this) {
124+
equalsTo => true,
125+
notEqualsTo => true,
126+
greaterThan => true,
127+
lessThan => true,
128+
greaterThanOrEqualTo => true,
129+
lessThanOrEqualTo => true,
130+
isEmpty => false,
131+
isNotEmpty => false,
132+
contains => true,
133+
isOdd => false,
134+
isEven => false,
135+
isNull => false,
73136
};
74137
}
75138

@@ -586,23 +649,41 @@ class CanvasConditions with EquatableMixin {
586649

587650
/// A visitor that can be used to visit a [ConditionOperation].
588651
abstract interface class ConditionOperatorVisitor {
589-
/// Visits a [ConditionOperation.equalsTo].
652+
/// Visits a [ConditionOperation.equalsTo] operator.
590653
bool visitEqualsOperator(Object? left, Object? right);
591654

592-
/// Visits a [ConditionOperation.notEqualsTo].
655+
/// Visits a [ConditionOperation.notEqualsTo] operator.
593656
bool visitNotEqualsOperator(Object? left, Object? right);
594657

595-
/// Visits a [ConditionOperation.greaterThan].
658+
/// Visits a [ConditionOperation.greaterThan] operator.
596659
bool visitGreaterThanOperator(Object? left, Object? right);
597660

598-
/// Visits a [ConditionOperation.lessThan].
661+
/// Visits a [ConditionOperation.lessThan] operator.
599662
bool visitLessThanOperator(Object? left, Object? right);
600663

601-
/// Visits a [ConditionOperation.greaterThanOrEqualTo].
664+
/// Visits a [ConditionOperation.greaterThanOrEqualTo] operator.
602665
bool visitGreaterThanOrEqualToOperator(Object? left, Object? right);
603666

604-
/// Visits a [ConditionOperation.lessThanOrEqualTo].
667+
/// Visits a [ConditionOperation.lessThanOrEqualTo] operator.
605668
bool visitLessThanOrEqualToOperator(Object? left, Object? right);
669+
670+
/// Visits a [ConditionOperation.isEmpty] operator.
671+
bool visitIsEmptyOperator(Object? value);
672+
673+
/// Visits a [ConditionOperation.isNotEmpty] operator.
674+
bool visitIsNotEmptyOperator(Object? value);
675+
676+
/// Visits a [ConditionOperation.isNotEmpty] operator.
677+
bool visitContainsOperator(Object? left, Object? right);
678+
679+
/// Visits a [ConditionOperation.isNotEmpty] operator.
680+
bool visitIsOddOperator(Object? value);
681+
682+
/// Visits a [ConditionOperation.isNotEmpty] operator.
683+
bool visitIsEvenOperator(Object? value);
684+
685+
/// Visits a [ConditionOperation.isNull] operator.
686+
bool visitIsNullOperator(Object? value);
606687
}
607688

608689
/// An interface for evaluating conditions.

lib/src/api/models/condition.g.dart

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)