diff --git a/lib/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart b/lib/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart index 7e47fc97c..d1b4c6267 100644 --- a/lib/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart +++ b/lib/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart @@ -59,9 +59,11 @@ class SearchEmailFilter { ); } - Filter mappingToEmailFilterCondition({Filter? moreFilterCondition}) { + Filter? mappingToEmailFilterCondition({EmailFilterCondition? moreFilterCondition}) { final emailEmailFilterConditionShared = EmailFilterCondition( - text: text?.value, + text: text?.value.trim().isNotEmpty == true + ? text?.value + : null, inMailbox: mailbox == PresentationMailbox.unifiedMailbox ? null : mailbox?.id, @@ -70,16 +72,29 @@ class SearchEmailFilter { subject: subject, before: before, ); - 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()), - LogicFilterOperator( - Operator.AND, notKeyword.map((e) => EmailFilterCondition(notKeyword: e)).toSet()), - if(moreFilterCondition !=null) moreFilterCondition - }); + + final listEmailCondition = { + if (emailEmailFilterConditionShared.hasCondition) + emailEmailFilterConditionShared, + if (to.isNotEmpty) + LogicFilterOperator( + Operator.AND, + to.map((e) => EmailFilterCondition(to: e)).toSet()), + if (from.isNotEmpty) + LogicFilterOperator( + Operator.AND, + from.map((e) => EmailFilterCondition(from: e)).toSet()), + if (notKeyword.isNotEmpty) + LogicFilterOperator( + Operator.AND, + notKeyword.map((e) => EmailFilterCondition(notKeyword: e)).toSet()), + if (moreFilterCondition != null && moreFilterCondition.hasCondition) + moreFilterCondition + }; + + return listEmailCondition.isNotEmpty + ? LogicFilterOperator(Operator.AND, listEmailCondition) + : null; } } diff --git a/model/lib/extensions/email_filter_condition_extension.dart b/model/lib/extensions/email_filter_condition_extension.dart new file mode 100644 index 000000000..11ef79975 --- /dev/null +++ b/model/lib/extensions/email_filter_condition_extension.dart @@ -0,0 +1,28 @@ + +import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart'; + +extension EmailFilterConditionExtension on EmailFilterCondition { + + bool get hasCondition { + return inMailbox != null || + inMailboxOtherThan?.isNotEmpty == true || + before != null || + after != null || + minSize != null || + maxSize != null || + allInThreadHaveKeyword?.isNotEmpty == true || + someInThreadHaveKeyword?.isNotEmpty == true || + noneInThreadHaveKeyword?.isNotEmpty == true || + hasKeyword?.isNotEmpty == true || + notKeyword?.isNotEmpty == true || + hasAttachment != null || + text?.isNotEmpty == true || + from?.isNotEmpty == true || + to?.isNotEmpty == true || + cc?.isNotEmpty == true || + bcc?.isNotEmpty == true || + subject?.isNotEmpty == true || + body?.isNotEmpty == true || + header?.isNotEmpty == true; + } +} \ No newline at end of file diff --git a/model/lib/model.dart b/model/lib/model.dart index 534570540..72ba2ea20 100644 --- a/model/lib/model.dart +++ b/model/lib/model.dart @@ -51,6 +51,7 @@ export 'extensions/properties_extension.dart'; export 'extensions/session_extension.dart'; export 'extensions/user_profile_extension.dart'; export 'extensions/utc_date_extension.dart'; +export 'extensions/email_filter_condition_extension.dart'; // Identity export 'identity/identity_request_dto.dart'; export 'mailbox/expand_mode.dart';