create SearchEmailFilter and Wrapper

This commit is contained in:
ManhNT
2022-06-24 13:37:48 +07:00
committed by Dat H. Pham
parent 6cdb698415
commit 55efe417b6
3 changed files with 84 additions and 0 deletions
+1
View File
@@ -32,6 +32,7 @@ export 'utils/app_logger.dart';
export 'utils/benchmark.dart';
export 'utils/fps_manager.dart';
export 'utils/build_utils.dart';
export 'utils/wrapper.dart';
// Views
export 'presentation/views/text/slogan_builder.dart';
+4
View File
@@ -0,0 +1,4 @@
class Wrapped<T> {
final T value;
const Wrapped.value(this.value);
}
@@ -0,0 +1,79 @@
import 'package:core/core.dart';
import 'package:jmap_dart_client/jmap/core/filter/filter.dart';
import 'package:jmap_dart_client/jmap/core/filter/filter_operator.dart';
import 'package:jmap_dart_client/jmap/core/filter/operator/logic_filter_operator.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart';
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
class SearchEmailFilter {
final Set<String> from;
final Set<String> to;
final SearchQuery? text;
final String? subject;
final String? hasKeyword;
final String? notKeyword;
final PresentationMailbox? mailbox;
final EmailReceiveTimeType emailReceiveTimeType;
final bool hasAttachment;
SearchEmailFilter({
Set<String>? from,
Set<String>? to,
EmailReceiveTimeType? emailReceiveTimeType,
bool? hasAttachment,
this.text,
this.subject,
this.hasKeyword,
this.notKeyword,
this.mailbox,
}) : from = from ?? <String>{},
to = to ?? <String>{},
hasAttachment = hasAttachment ?? false,
emailReceiveTimeType =
emailReceiveTimeType ?? EmailReceiveTimeType.allTime;
SearchEmailFilter copyWith({
Set<String>? from,
Set<String>? to,
SearchQuery? text,
String? subject,
Wrapped<String?>? hasKeyword,
Wrapped<String?>? notKeyword,
PresentationMailbox? mailbox,
EmailReceiveTimeType? emailReceiveTimeType,
bool? hasAttachment,
}) {
return SearchEmailFilter(
from: from ?? this.from,
to: to ?? this.to,
text: text ?? this.text,
subject: subject ?? this.subject,
hasKeyword: hasKeyword != null ? hasKeyword.value : this.hasKeyword,
notKeyword: notKeyword !=null ? notKeyword.value : this.notKeyword,
mailbox: mailbox ?? this.mailbox,
emailReceiveTimeType: emailReceiveTimeType ?? this.emailReceiveTimeType,
hasAttachment: hasAttachment ?? this.hasAttachment,
);
}
Filter? mappingToEmailFilterCondition() {
final emailEmailFilterConditionShared = EmailFilterCondition(
text: text?.value,
inMailbox: mailbox?.id,
after: emailReceiveTimeType.toUTCDate(),
hasKeyword: hasKeyword,
notKeyword: notKeyword,
hasAttachment: hasAttachment == false ? null : hasAttachment,
subject: subject,
);
return LogicFilterOperator(Operator.AND, {
emailEmailFilterConditionShared,
LogicFilterOperator(
Operator.AND, to.map((e) => EmailFilterCondition(to: e)).toSet()),
LogicFilterOperator(
Operator.AND, from.map((e) => EmailFilterCondition(from: e)).toSet()),
});
}
}