diff --git a/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart index e69e393f7..3544df930 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart @@ -56,13 +56,15 @@ class AdvancedFilterController extends BaseController { if (toFilterInputController.text.isNotEmpty) { _searchController.updateFilterEmail(to: toFilterInputController.text.split(',').toSet()); } + if (hasKeyWordFilterInputController.text.isNotEmpty) { + _searchController.updateFilterEmail(hasKeyword: hasKeyWordFilterInputController.text.split(',').toSet()); + } + if (notKeyWordFilterInputController.text.isNotEmpty) { + _searchController.updateFilterEmail(notKeyword: notKeyWordFilterInputController.text.split(',').toSet()); + } _searchController.updateFilterEmail( subject: StringConvert.writeEmptyToNull(subjectFilterInputController.text), - hasKeyword: Wrapped.value( - StringConvert.writeEmptyToNull(hasKeyWordFilterInputController.text)), - notKeyword: Wrapped.value( - StringConvert.writeEmptyToNull(notKeyWordFilterInputController.text)), emailReceiveTimeType: dateFilterSelectedFormAdvancedSearch.value, hasAttachment: hasAttachment.value, ); @@ -96,11 +98,11 @@ class AdvancedFilterController extends BaseController { initSearchFilterField(BuildContext context) { _searchController.updateFilterEmail(mailbox: _mailboxDashBoardController.selectedMailbox.value); - fromFilterInputController.text = StringConvert.writeNullToEmpty(_searchController.searchEmailFilter.value.from.firstOrNull); + fromFilterInputController.text = StringConvert.writeNullToEmpty(_searchEmailFilter.from.firstOrNull); toFilterInputController.text = StringConvert.writeNullToEmpty(_searchEmailFilter.to.firstOrNull); subjectFilterInputController.text = StringConvert.writeNullToEmpty(_searchEmailFilter.subject); - hasKeyWordFilterInputController.text = StringConvert.writeNullToEmpty(_searchEmailFilter.hasKeyword); - notKeyWordFilterInputController.text = StringConvert.writeNullToEmpty(_searchEmailFilter.notKeyword); + hasKeyWordFilterInputController.text = StringConvert.writeNullToEmpty(_searchEmailFilter.hasKeyword.firstOrNull); + notKeyWordFilterInputController.text = StringConvert.writeNullToEmpty(_searchEmailFilter.notKeyword.firstOrNull); dateFilterInputController.text = StringConvert.writeNullToEmpty(_searchEmailFilter.emailReceiveTimeType.getTitle(context)); mailBoxFilterInputController.text = StringConvert.writeNullToEmpty(_searchEmailFilter.mailbox?.name?.name); dateFilterSelectedFormAdvancedSearch.value = _searchEmailFilter.emailReceiveTimeType; diff --git a/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart index f2fe9321b..f88b8fc3b 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart @@ -122,8 +122,8 @@ class SearchController extends BaseController { Set? to, SearchQuery? text, String? subject, - Wrapped? hasKeyword, - Wrapped? notKeyword, + Set? hasKeyword, + Set? notKeyword, PresentationMailbox? mailbox, EmailReceiveTimeType? emailReceiveTimeType, bool? hasAttachment, 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 afb4d3f13..daab9468e 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 @@ -1,4 +1,3 @@ -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'; @@ -12,8 +11,8 @@ class SearchEmailFilter { final Set to; final SearchQuery? text; final String? subject; - final String? hasKeyword; - final String? notKeyword; + final Set hasKeyword; + final Set notKeyword; final PresentationMailbox? mailbox; final EmailReceiveTimeType emailReceiveTimeType; final bool hasAttachment; @@ -25,11 +24,13 @@ class SearchEmailFilter { bool? hasAttachment, this.text, this.subject, - this.hasKeyword, - this.notKeyword, + Set? hasKeyword, + Set? notKeyword, this.mailbox, }) : from = from ?? {}, to = to ?? {}, + hasKeyword = hasKeyword ?? {}, + notKeyword = notKeyword ?? {}, hasAttachment = hasAttachment ?? false, emailReceiveTimeType = emailReceiveTimeType ?? EmailReceiveTimeType.allTime; @@ -39,8 +40,8 @@ class SearchEmailFilter { Set? to, SearchQuery? text, String? subject, - Wrapped? hasKeyword, - Wrapped? notKeyword, + Set? hasKeyword, + Set? notKeyword, PresentationMailbox? mailbox, EmailReceiveTimeType? emailReceiveTimeType, bool? hasAttachment, @@ -50,8 +51,8 @@ class SearchEmailFilter { 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, + hasKeyword: hasKeyword ?? this.hasKeyword, + notKeyword: notKeyword ?? this.notKeyword, mailbox: mailbox ?? this.mailbox, emailReceiveTimeType: emailReceiveTimeType ?? this.emailReceiveTimeType, hasAttachment: hasAttachment ?? this.hasAttachment, @@ -63,8 +64,6 @@ class SearchEmailFilter { text: text?.value, inMailbox: mailbox?.id, after: emailReceiveTimeType.toUTCDate(), - hasKeyword: hasKeyword, - notKeyword: notKeyword, hasAttachment: hasAttachment == false ? null : hasAttachment, subject: subject, ); @@ -74,6 +73,10 @@ class SearchEmailFilter { Operator.AND, to.map((e) => EmailFilterCondition(to: e)).toSet()), LogicFilterOperator( Operator.AND, from.map((e) => EmailFilterCondition(from: e)).toSet()), + LogicFilterOperator( + Operator.AND, hasKeyword.map((e) => EmailFilterCondition(hasKeyword: e)).toSet()), + LogicFilterOperator( + Operator.AND, notKeyword.map((e) => EmailFilterCondition(notKeyword: e)).toSet()), }); } }