TF-2085 Add RuleConditionGroup
(cherry picked from commit d6e642fe707627a29931265fe156d17fb01d8d64)
This commit is contained in:
@@ -0,0 +1,37 @@
|
|||||||
|
import 'package:jmap_dart_client/jmap/core/filter/filter_condition.dart';
|
||||||
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
import 'package:rule_filter/rule_filter/rule_condition.dart';
|
||||||
|
|
||||||
|
part 'rule_condition_group.g.dart';
|
||||||
|
|
||||||
|
enum ConditionCombiner {
|
||||||
|
@JsonValue('AND')
|
||||||
|
AND,
|
||||||
|
@JsonValue('OR')
|
||||||
|
OR
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonSerializable()
|
||||||
|
class RuleConditionGroup extends FilterCondition {
|
||||||
|
final ConditionCombiner conditionCombiner;
|
||||||
|
|
||||||
|
final List<RuleCondition> conditions;
|
||||||
|
|
||||||
|
RuleConditionGroup({
|
||||||
|
required this.conditionCombiner,
|
||||||
|
required this.conditions,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [
|
||||||
|
conditionCombiner,
|
||||||
|
conditions,
|
||||||
|
];
|
||||||
|
|
||||||
|
factory RuleConditionGroup.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$RuleConditionGroupFromJson(json);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Map<String, dynamic> toJson() => _$RuleConditionGroupToJson(this);
|
||||||
|
|
||||||
|
}
|
||||||
@@ -4,6 +4,7 @@ import 'package:rule_filter/rule_filter/converter/rule_id_nullable_converter.dar
|
|||||||
import 'package:rule_filter/rule_filter/rule.dart';
|
import 'package:rule_filter/rule_filter/rule.dart';
|
||||||
import 'package:rule_filter/rule_filter/rule_action.dart';
|
import 'package:rule_filter/rule_filter/rule_action.dart';
|
||||||
import 'package:rule_filter/rule_filter/rule_condition.dart';
|
import 'package:rule_filter/rule_filter/rule_condition.dart';
|
||||||
|
import 'package:rule_filter/rule_filter/rule_condition_group.dart';
|
||||||
import 'package:rule_filter/rule_filter/rule_id.dart';
|
import 'package:rule_filter/rule_filter/rule_id.dart';
|
||||||
|
|
||||||
part 'tmail_rule.g.dart';
|
part 'tmail_rule.g.dart';
|
||||||
@@ -14,26 +15,39 @@ part 'tmail_rule.g.dart';
|
|||||||
class TMailRule extends Rule {
|
class TMailRule extends Rule {
|
||||||
final RuleId? id;
|
final RuleId? id;
|
||||||
final String name;
|
final String name;
|
||||||
final RuleCondition condition;
|
final RuleCondition? condition;
|
||||||
|
final RuleConditionGroup? conditionGroup;
|
||||||
final RuleAction action;
|
final RuleAction action;
|
||||||
|
|
||||||
TMailRule({
|
TMailRule({
|
||||||
this.id,
|
this.id,
|
||||||
required this.name,
|
required this.name,
|
||||||
required this.condition,
|
this.condition,
|
||||||
|
this.conditionGroup,
|
||||||
required this.action,
|
required this.action,
|
||||||
});
|
});
|
||||||
|
|
||||||
factory TMailRule.fromJson(Map<String, dynamic> json) =>
|
factory TMailRule.fromJson(Map<String, dynamic> json) =>
|
||||||
_$TMailRuleFromJson(json);
|
_$TMailRuleFromJson(json);
|
||||||
|
|
||||||
Map<String, dynamic> toJson() => _$TMailRuleToJson(this);
|
Map<String, dynamic> toJson() {
|
||||||
|
final result = _$TMailRuleToJson(this);
|
||||||
|
|
||||||
|
if (result['condition'] != null) {
|
||||||
|
result.remove('conditionGroup');
|
||||||
|
} else {
|
||||||
|
result.remove('condition');
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [
|
List<Object?> get props => [
|
||||||
name,
|
name,
|
||||||
condition,
|
condition,
|
||||||
action,
|
action,
|
||||||
|
conditionGroup,
|
||||||
];
|
];
|
||||||
|
|
||||||
TMailRule copyWith({
|
TMailRule copyWith({
|
||||||
@@ -41,12 +55,14 @@ class TMailRule extends Rule {
|
|||||||
String? name,
|
String? name,
|
||||||
RuleCondition? condition,
|
RuleCondition? condition,
|
||||||
RuleAction? action,
|
RuleAction? action,
|
||||||
|
RuleConditionGroup? conditionGroup,
|
||||||
}) {
|
}) {
|
||||||
return TMailRule(
|
return TMailRule(
|
||||||
id: id ?? this.id,
|
id: id ?? this.id,
|
||||||
name: name ?? this.name,
|
name: name ?? this.name,
|
||||||
condition: condition ?? this.condition,
|
condition: condition ?? this.condition,
|
||||||
action: action ?? this.action,
|
action: action ?? this.action,
|
||||||
|
conditionGroup: conditionGroup ?? this.conditionGroup,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
|||||||
import 'package:rule_filter/rule_filter/rule_action.dart';
|
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_append_in.dart';
|
||||||
import 'package:rule_filter/rule_filter/rule_condition.dart';
|
import 'package:rule_filter/rule_filter/rule_condition.dart';
|
||||||
|
import 'package:rule_filter/rule_filter/rule_condition_group.dart';
|
||||||
import 'package:rule_filter/rule_filter/rule_filter_id.dart';
|
import 'package:rule_filter/rule_filter/rule_filter_id.dart';
|
||||||
import 'package:rule_filter/rule_filter/rule_id.dart';
|
import 'package:rule_filter/rule_filter/rule_id.dart';
|
||||||
import 'package:rule_filter/rule_filter/set/set_rule_filter_method.dart';
|
import 'package:rule_filter/rule_filter/set/set_rule_filter_method.dart';
|
||||||
@@ -20,6 +21,21 @@ void main() {
|
|||||||
final expectedUpdated = TMailRule(
|
final expectedUpdated = TMailRule(
|
||||||
id: RuleId(id: Id('1')),
|
id: RuleId(id: Id('1')),
|
||||||
name: 'My first rule',
|
name: 'My first rule',
|
||||||
|
conditionGroup: RuleConditionGroup(
|
||||||
|
conditionCombiner: ConditionCombiner.AND,
|
||||||
|
conditions: [
|
||||||
|
RuleCondition(
|
||||||
|
value: 'question',
|
||||||
|
comparator: Comparator.contains,
|
||||||
|
field: Field.subject,
|
||||||
|
),
|
||||||
|
RuleCondition(
|
||||||
|
field: Field.from,
|
||||||
|
comparator: Comparator.contains,
|
||||||
|
value: 'user2'
|
||||||
|
)
|
||||||
|
]
|
||||||
|
),
|
||||||
condition: RuleCondition(
|
condition: RuleCondition(
|
||||||
value: 'question',
|
value: 'question',
|
||||||
comparator: Comparator.contains,
|
comparator: Comparator.contains,
|
||||||
@@ -54,6 +70,21 @@ void main() {
|
|||||||
"singleton": {
|
"singleton": {
|
||||||
"id": "1",
|
"id": "1",
|
||||||
"name": "My first rule",
|
"name": "My first rule",
|
||||||
|
"conditionGroup": {
|
||||||
|
"conditionCombiner": "AND",
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"field": "subject",
|
||||||
|
"comparator": "contains",
|
||||||
|
"value": "question"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"field": "from",
|
||||||
|
"comparator": "contains",
|
||||||
|
"value": "user2"
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
"condition": {
|
"condition": {
|
||||||
"field": "subject",
|
"field": "subject",
|
||||||
"comparator": "contains",
|
"comparator": "contains",
|
||||||
|
|||||||
Reference in New Issue
Block a user